Java面试题-web

目录

@、什么是Servlet

@、Servlet

@、Servlet生命周期

@、说出Servlet的生命周期,并说出Servlet和CGI的区别。

@、请求转发与重定向的区别

@、MVC

@、软件分层设计有何优点?

@、四种会话跟踪技术

@、cookie&session

@、cookie和浏览器缓存的区别?

@、什么是cookie?session?

@、session的实现原理

@、cookie的应用

@、Cookie规范(了解)

@、Session和cookie有什么区别?

@、cookie方法

@、Cookie的持久化

@、session的生命周期

@、4个域对象?

@、网站如果有大量的人登陆访问。那么会产生很多的session,如果你是程序员你该怎么办。

@、JSP

@、jsp和Servlet:

@、JSP有哪些动作?作用分别是什么?

@、JSP共有以下6种基本动作 

@、JSP四大域对象和九大内置对象

@、JSP常用的指令有哪些

@、JSP的常用指令

@、AjAX的理解?

@、Ajax同步与异步区别

@、ajax如何实现异步定时5秒刷新

@、json

@、Filter与Listener的区别


@、什么是Servlet

l Servlet是一个功能,如果你希望你的项目功能多一些,那就要多写一此Servlet;

l Servlet是JavaWeb三大组件之一,也是最重要的组件!

Ø 三大组件:Servlet、Filter、Listener

l Servlet是一个我们自定义的Java类,它必须要实现javax.servlet.Servlet接口。

l Servlet是动态资源!

l Servlet必须在web.xml中进行配置后,才能被访问。(把Servlet与一个或多个路径绑定在一起);

Servlet单例、线程不安全

l Servlet是的单例的。所以一个Servlet对象可能同时处理多个请求;

l Servlet不是线程安全的。

Ø 尽可能不创建成员变量,因为成员变量多个线程会共享!

Ø 如果非要创建,那么创建功能性的,只读!

@、Servlet

    是一个小的java的程序,运行在服务器端(Tomcat服务器),是sun公司提供的一套规范,用来处理客户端请求,相应给浏览器的动态资源。Servlet可以接收和响应从客户端发送过来的请求;使用的是http的协议;实现Servlet的接口或者继承GenericServlet和HttpServlet类。

    Servlet的作用 : 用来处理从客户端发送过来的请求,并对该请求作出响应

1.获取请求数据

2.处理请求

3.完成响应

配置文件详解:

<servlet>注册servlet

<servlet-name>servlet名称,当前xml中唯一

<servlet-class>servlet实现类的全限定类名

<servlet-mapping>给注册的servlet添加映射路径

<servlet-name>已经注册的servlet名称,注意,必须与注册的名字一致

<url-pattern>访问路径.要求 : 必须/开头

    WEB-INF文件夹里面的文件不能被直接访问。

    注意:服务器里面的项目越少运行的越快,尽量只有一个当前项目;

    Servlet是JavaWeb三大组件之一(Servlet,Filter,Listener),且最重要.

    Service在容器中是单例的

@、Servlet生命周期

web容器加载servlet,生命周期开始。

通过调用servlet的init()方法进行servlet的初始化。(在第一次访问servlet时创建,一生只执行一次,一般情况下init不使用;)

通过调用service()方法实现,根据请求的不同调用不同的do***()方法。(每次访问servlet都会被调用)

结束服务,web容器调用servlet的destroy()方法。(当服务器正常关闭时销毁,一生只执行一次,一般情况下不使用,用来释放服务器资源 。)

@、说出Servlet的生命周期,并说出Servlet和CGI的区别。

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

设置字符集

request.setCharacterEncoding("utf-8");//设置请求正文部分内容编码格式

response.setContentType("text/html;charset=utf-8");//解决响应内容中中文乱码问题

@、请求转发与重定向的区别

forward&redirect:

1、转发后,地址栏中的地址不变!重定向变

2、转发是一次请求一次响应,重定向是两次请求两次响应;

3、转发只能是本项目中的资源,而重定向可以其他项目。

4、重定向路径需要加工程名,转发的路径不需要工程名。

5、转发可以共享request域,而重定向因为是两个请求,所以不能共享request。

6、一个请求,只有一个请求方式!所以转发后还是原来的请求方式,如果一开始发出的是GET,那么整个请求都是GET!重定向不同,因为是多个请求,第一个无论是什么方式,第二个请求都是GET。

forward转发: 

req.getRequestDispather("WEB路径名").forward(req,resp));

转发不产生新请求。地址栏不变

redirect:重定向

resp.sendRedirect("客户端的绝对路径");

resp.sendRedirect("http://www.baidu.com");

发送指令给客户端浏览器,让浏览发送新的请求到指定的URL,req的内部转发是不产生新请求。

注意:

    l 当response为以提交状态,就不能再重定向了!

    l 当使用了response的输出流响应后,再重定向。如果没有造成response提交,那么说明数据还在缓冲区中,tomcat会把缓冲区清空,然后重定向。

@、MVC

M:业务逻辑(service)&数据库操作(dao)&数据封装(domain,javaBean)

V:(View)视图层显示页面

C:控制层(控制器),调用业务逻辑,转跳页面(负责整体流程).

@、软件分层设计有何优点?

-->1、开发人员可以只关注整个结构中的其中某一层;

   2、可以很容易的用新的实现来替换原有层次的实现;

   3、可以降低层与层之间的依赖;

   4、有利于标准化;

   5、利于各层逻辑的复用。

概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。

-->缺点:

 “金无足赤,人无完人”,分层式结构也不可避免具有一些缺陷:

  1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却     必须通过中间层来完成。

  2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式     结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

关于第一个缺点,完全可以通过系统的缓存机制来减小对性能的影响。第二个缺点,我想只能通过采用一些设计模式来得到改善吧。

@、四种会话跟踪技术

会话作用域ServletsJSP 页面描述

page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面

request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)

session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求

application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

@、cookie&session

 

@、cookie和浏览器缓存的区别?

 

@、什么是cookie?session?

    Cookie是会话技术,将用户的信息保存到浏览器的对象,内容通过请求头和响应头由HTTP传输,

    Session也是会话技术,将Session的信息保存到服务器的对象.Session是基于Cookie的,利用Cookie向浏览器回写JSessionID.

    如果服务器端发送重复的Cookie那么会覆盖原有的Cookie,

    Cookie是基于Http协议

    session的原理:

session实现底层依赖于cookie【会话级别】,将JSESSIONID存入Cookie中。

会话关闭了,cookie被销毁,jsessionid丢失,但是session并没有销毁。jsessionid本来在session端的,是它传给session的,session还有一份的

@、session的实现原理

    session底层是依赖Cookie的!我们来理解一下session的原理吧!

    当我首次去银行时,因为还没有账号,所以需要开一个账号,我获得的是银行卡,而银行这边的数据库中留下了我的账号,我的钱是保存在银行的账号中,而我带走的是我的卡号。

    当我再次去银行时,只需要带上我的卡,而无需再次开一个账号了。只要带上我的卡,那么我在银行操作的一定是我的账号!

    当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。

    当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。

@、cookie的应用

(1)案例:显示上次访问时间 

创建Cookie,名为lasttime,值为当前时间,添加到response中;

在AServlet中获取请求中名为lasttime的Cookie;

如果不存在输出“您是第一次访问本站”,如果存在输出“您上一次访问本站的时间是xxx”;

response.setContentType("text/html;charset=utf-8"); Cookie cookie = new Cookie("lasttime", new Date().toString()); cookie.setMaxAge(60 * 60); response.addCookie(cookie); Cookie[] cs = request.getCookies(); String s = "您是首次访问本站!"; if(cs != null) { for(Cookie c : cs) { if(c.getName().equals("lasttime")) { s = "您上次的访问时间是:" + c.getValue(); } } } response.getWriter().print(s); }

(2)设置Cookie的路径

    设置Cookie的路径需要使用setPath()方法,例如:

    cookie.setPath(“/cookietest/servlet”);

(3)显示曾经浏览过的商品

 您浏览过的商品:

     Cookie[] cs = request.getCookies();

     if(cs != null) {

     for(Cookie c : cs) {

     if(c.getName().equals("goods")) {

     out.print(c.getValue());

     }

     }

     }

@、Cookie规范(了解)

l Cookie大小上限为4KB;

l 一个服务器最多在客户端浏览器上保存20个Cookie;

l 一个浏览器最多保存300个Cookie;

什么是Cookie的生命(了解)

Cookie不只是有name和value,Cookie还是生命。所谓生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int)来设置Cookie的有效时间。

l cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。

l cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;

l cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。

@、Session和cookie有什么区别?

    1、cookie是保存在客户端浏览器缓存(磁盘),session存在于服务器内存的

    2、session是本次会话有效,会话结束,session消失;cookie可以设置有效期,每次对本网站的访问会自动在请求投资中和请求一起发送到服务器。

    3、session中可以放对象,cookie只可以放字符串。

    4、Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,名称为sessionid,当这个Session结束时,其实就是意味着这个Cookie就过期了。

    5、cookie和session都是用来跟踪浏览器用户身份的会话方式

@、cookie方法

添加cookie 的方式:

Cookie c = new Cookie("uname",“xiaowang”));

response.addCookie(c);

只能接受键值对:new Cookie("key","value");

取得

Cookie[] request.getCookies();得到所有Cookie(多个)

写入

resp.addCookie( cookie )写入浏览器

setMaxAge(秒数)//设置Cookie的有效期,超过了该时间后Cookie会自动销毁.

setPath("客户端WEB路径")//在指定的路径内有效

获取Cookie的name:    getName()

获取cookie的value:   getValue()

@、Cookie的持久化

1.持久化:就是把数据从内存中写到硬盘上

cookie默认是在浏览器缓存中【内存中】

cookie通过持久化设置,可以保存在硬盘上。

2.设置方法:

cookie.setMaxAge(int sec);      设置cookie最大生存时间,单位为秒

cookie的有效路径

概述:路径用来指定:访问哪个路径带哪些cookie

设置方法:

cookie对象  setPath(String path);   设置cookie的有效路径

@、session的生命周期

1、创建:   第一次调用request.getSession()时创建。

2、销毁:

①session.invalidate()  强制销毁session对象。【相当于主动去银行销户】

②session过期。【相当于过一段时间不操作银行账户,银行给我销户】

30分钟。在tomcat/conf/web.xml中配置的

<session-config>

         <session-timeout>30</session-timeout>

</session-config>

不能太少,否则还会走默认30分钟

 ③服务器非正常关闭 Console--->Terminate 终结【银行突然倒闭】

注意:

    (服务器正常关闭,不会销毁,序列化数据到 tomcat/work/catalina/localhost/项目名/SESSIONS.ser,在服务器重新启动时,又会重新加载序列化文件,session完全还原)

应用范围:企业开发大多用Session,登录验证、登录信息的保存、权限过滤

Cookie禁用

使用js中的navigator.cookieEnabledo判断cookie是否被禁用。

@、4个域对象?

1_application:有一些数据希望一直保存着,最好和项目的运行生命周期保持一致,此时这些数据可以存放在ServletContext内

2_session:有一些数据希望本次会话有效,session内,可以跨请求(多个请求之间可以共享,但是每个用户都有自己独立的域对话(从第一次请求开始一个会话,到最后一次为止,视为一次会话.默认是30分钟))

3_request:有一些数据希望本次请求内有效,request内

4_pageContext:很少用,因为这个对象是在service方法中创建好的,意味着在jsp范围内有效

 

@、网站如果有大量的人登陆访问。那么会产生很多的session,如果你是程序员你该怎么办。

session默认保存在内存中,内存资源宝贵,session数据量大导致内存利用率高,以下方案解决session内存存储问题:

1、可以设置session超时时间,达到超时时间session自动清空

<session-config>

<session-timeout>20</session-timeout>

</session-config>  

2、将session中的数据序列化到硬盘中

3、不使用session,使用cookie(此方法存在安全性问题)

@、JSP

全名Java Server Pages

它是建立在Servlet规范之上的动态网页开发技术

组成 : html+java+jsp的标签

jsp的作用 : 大白话:在html代码中嵌套java代码

@、jsp和Servlet:

    JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事务处理而通过Servlet来生成动态网页;

    JSP由HTML代码和JSP标签构成,可以方便地编写动态网页

因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.

    答案2:

    JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

@、JSP有哪些动作?作用分别是什么?

@、JSP共有以下6种基本动作 

jsp:include:在页面被请求的时候引入一个文件。

jsp:forward:把请求转到一个新的页面。

jsp:setProperty:设置JavaBean的属性。

jsp:getProperty:输出某个JavaBean的属性。

jsp:useBean:寻找或者实例化一个JavaBean。

jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。

@、JSP四大域对象和九大内置对象

四大域对象:PageContext、request、session、servletContext

Jsp有哪些内置对象?作用分别是什么?

Page,pageContext,request,response,session,application,out,config,exception

Page指的是JSP被翻译成Servlet的对象的引用.

pageContext对象可以用来获得其他8个内置对象,还可以作为JSP的域范围对象使用.pageContext中存的值是当前的页面的作用范围;

request代表的是请求对象,可以用于获得客户机的信息,也可以作为域对象来使用,使用request保存的数据在一次请求范围内有效。

Response是响应对象,代表的是从服务器向浏览器响应数据.

Session代表的是一次会话,可以用于保存用户的私有的信息,也可以作为域对象使用,使用session保存的数据在一次会话范围有效

Application:代表整个应用范围,使用这个对象保存的数据在整个web应用中都有效。

Out:JSPWriter是用于向页面输出内容的对象

Config:指的是ServletConfig用于JSP翻译成Servlet后 获得Servlet的配置的对象.

Exception:在页面中设置isErrorPage=”true”,即可使用,是Throwable的引用.用来获得页面的错误信息。

@、JSP常用的指令有哪些

<%@ page language=” ”

 import=” ” 

errorPage=” ” 

isErrorPage=” ”

 method=””

contextPage=” ” %>

<%@? include file=” ”%><%@tiglib uri=” ”%>

@、JSP的常用指令

<%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>

isErrorPage(是否能使用Exception对象),

isELIgnored(是否忽略表达式)

<%@include file=”filename”%>

<%@taglib prefix=”c”uri=”http://……”%>

@、AjAX的理解?

简单来说:异步加载,局部刷新。

AJAX 是一种用于创建快速动态网页的技术。

    通过在后台与服务器进行少量数据交换,在不重新加载整个网页的情况下,对网页进行部分更新。(javascript的httprequest请求,异步返回处理结果, 可以在页面不提交的情况下,获取服务器或数据库的数据,直接呈现给页面。)

    传统网页不使用AJAX,如果需要刷新网页,则需要重新加载整个网页:

    有很多Ajax应用场景: 异步用户名校验(用户注册用户名校验失去焦点发送请求校验用户名),Google地图,股票数据更新,.... 

细节:

    通过Ajax和服务端传递数据:如果数据量很小,传输字符串;如果数据量比较多,传输xml。

    AJAX=异步js和xml,是一种新的思想,整合之前的多种技术,用于创建快速交互式网页应用的网页开发技术。

    ajax: 异步通信(实现页面无闪刷新效果) 调用浏览器发送请求的对象  发送一个请求到后台  后台servlet处理完返回给前台

      前台有一个回调函数  处理后台的响应结果!

@、Ajax同步与异步区别

属性:url(发送请求地址)、type(请求方式)

同步:async值为false,发送ajax请求后,后面还有代码需要执行,将服务器响应交由另一个js函数进行处理,在服务器没有响应或者响应结果js函数还没有处理完成return时,包含请求代码的函数的剩余代码不能够执行。

提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事。

异步:async值为true,…包含请求代码的函数的剩余代码将继续执行。

请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

@、ajax如何实现异步定时5秒刷新

setInterval(function() {

$("#content").load(location.href+" #content>*","");

}, 5000);

@、json

    json(JavaScript Object Notation)是一种轻量级的数据交换方式。json采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。

(易于阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率))。

json对象格式:

{"key":"value","key":"calue",.......}

*键和值使用冒号分隔;

*标准规范要求key必须使用双引号,value如果没有使用双引号表示常量;

JSON数组:

    [obj,obj,obj,........]

    *表示一组值,多个值之间使用逗号分隔;

@、Filter与Listener的区别

Filter:是一个运行在服务器端的程序,先于与之相关的Servler或JSP页面之前运行

服务器启动时初始化init,访问资源被拦截时执行拦截方法doFiler,服务器关闭销毁destory。使用场景:统一设置编码、权限过滤、预处理和后处理。

Listener:监听器是指对整个WEB环境的监听,当被监视的对象发生改变时,立即调用相应的方法进行处理;随着web应用的启动而启动,只初始化一次,随着web应用的停止而销毁。监听对象:ServlerRequset、HttpSerssion、ServlerContext。应用:做一些初始化的内容添加工作,设置一些基本内容(如一些参数或者固定的对象等)。

区别:Filter可以实现对请求的过滤和重定向等,可以操作request、content、session等对象;Listerer只能监听到以上对象的属性修改。

 

java B/S 主流设计模式  mvc  能够使项目层次 简洁明确,易于维护、二次开发等优点。

其作用也是为了开发项目,所有设计模式都是为了开发。

MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕白Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值