java面试Web相关
面试题目一:关于HttpServlet中的service、doGet、doPost方法的关系
答案: 首先客户端提交一个请求,该请求一定是首先到达了service方法,然后service方法根据请求中的参数内容是get,还是post或者其他方式来决定到底是调用doGet,还是doPost,还是其他的do方法
面试题目二:请问forward与redirect的区别?
答案:forward是HttpServletRequest的方法表示请求转发,地址栏中请求地址不会改变,多个servlet容器会共享request,整个过程只有一次请求和一次响应。redirect是HttpServletResponse的方法表示请求重定向,地址栏中请求地址会改变,执行流程是客户端发送一个请求,Servlet容器发回一个HTTP响应,该HTTP响应的状态行为HTTP/1.1 302 Found,在消息报头中会有一个location的属性指向需要重新请求的Http地址。整个过程包含二个请求以及两个响应,各个请求之间没有任何关系。
面试题目三:阐述下Servlet的生命周期
答案:Servlet的生命周期分为如下三个阶段:
- 初始化阶段
- init方法被调用,Servlet缺省是单实例,Servlet第一次被访问才会进行实例化(也就是说内存中只会有一个该Servlet的对象,后续对它的访问不会生成新的对象),紧接着init方法被调用,该init方法在Servlet的整个生命周期中仅执行一次。因此通常在该方法里存放一些初始化的代码。
- 服务阶段
- service方法被调用,客户端每发来一次请求,该service方法都要被调用一次
- 销毁阶段
- destroy方法被调用 当javaweb项目(context)重新加载之后,会调用该context下的所有已经生成好的servlet实例的destroy方法来销毁已经生成的servlet实例
面试题目四:关于初始化阶段,servlet有几种初始化方式呢?
答案:两种,第一种是通过请求来初始化servlet。第二种通过web.xml文件中配置servlet的启动参数让服务器启动后该servlet自动完成实例化
<load-on-startup>1<load-on-startup>
启动而加载,按数字从小到大的顺序进行servlet实例化
面试题目五:阐述下servlet的特点
答案:servlet缺省是单实例支持多线程的,即一个servlet实例被多个线程所操纵,这样的好处是效率高,毕竟一个servlet只生成一个实例,而不需要请求一次servlet就生成一个servlet对象。
面试题目六:getParameter()与getAttribute()方法有什么区别?
答案:getParameter描述服务器与客户端的关系,它总是返回String,因为客户端不管发送的是什么数据到达服务器都是字符串,而getAttribute是服务器中进行对象保存后的取出的一个操作有setAttribute与之配对,getParameter没有与之对应的setParameter方法。
JSP & SERVLET 知识点补充:
- 对于新建的jsp或刚修改的jsp第一个用户去访问的时候总是非常的慢的原因是,它有一个servlet引擎要把jsp编译成servlet,接着执行servlet(jsp编译成java、对于修改的jsp而言还要卸载已经存于内存中的该jsp所对应的servlet实例、生成servlet实例都是耗时操作),当第二个用户去访问的时候就不需要重新转化了,拿已经转换好的并在内存中已经生成的servlet来为我们提供服务
- jsp修改后,当客户端第一次发送该jsp请求后,服务器会为其重新生成对应的servlet.java文件,然后将之前在内存中的旧的该servlet实例销毁,然后在内存中生成新的servlet实例。
SESSION 知识点补充
- session存在于服务器中
- session依赖于会话cookie,会话cookie存于浏览器的进程中(内存中),不在硬盘上。
- 当浏览器关闭的时候,服务器中的session并不会立即销毁
- 如果浏览器拒绝接受cookie,还有地址重写方式可以选择。 (request.encodeURL)
- 登录系统中的登录操作只不过是给与当前浏览器所匹配的session对象"打标记"而已,访问系统的其它页面首先都会判断取到的session对象是否“已打标记”如果没有则跳转到登陆页面验证身份,有的话可以返回所请求页面的内容。(打标记就是通过session.setAttribute设置属性以及值)
- 某一个时刻只会有一个session对象与当前的浏览器建立联系,该session对象只存在"被验证过"与"未被验证过"两种状态。(设置过值与未被设置过值两种状态)如果匹配到的是被验证过的session,那么在session有效期内对该系统接下来的页面访问都应该畅通无阻,否则应该跳转到登陆页面要求身份验证(为session打标记)