Servlet必须掌握的基础知识

转载:http://blog.csdn.net/luotuomianyang/article/details/52462725

1. servlet生命周期

  Servlet 生命周期:Servlet 加载—>实例化—>服务—>销毁。

  init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

  service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

  destroy():仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。


2、forward() 与redirect()的区别?

1.  getRequestDispatch().forward() 请求转发跳转发生在服务器<容器>因此可以取得,浏览器不知道请求被转发了,所以地址栏上不会看到变化,sendRedirect发生在浏览器,要求浏览器重新请求另一个URL,故又称为重定向,地址栏上会显示URL的变更。

2.  如果希望下一个页面可以使用此属性,用getRequestDispatch

3.  如果session.setAtrribute(“name”,“aa”) 如果希望下一个页面可以使用属性,两个方法都可以用,但是建议使用getRequestDispatch

4.  如果希望跳转到本网站外的URL,只能用sendRedirect


3. 什么时候调用doGet和doPost

  Serlvet接口只定义了一个服务方法就是service,而HttpServlet类实现了该方法并且要求调用下列的方法之一: 

  doGet:处理GET请求 

  doPost:处理POST请求 

  当发出客户端请求的时候,调用service 方法并传递一个请求和响应对象。Servlet首先判断该请求是GET 操作还是POST 操作。然后它调用下面的一个方法:doGet 或 doPost。如果请求是GET就调用doGet方法,如果请求是POST就调用doPost方法。doGet和doPost都接受请求(HttpServletRequest)和响应(HttpServletResponse)。

4. 页面间对象传递的方法是什么

 1. 在要传递值的页面,Response.sendRedirect(url)

 2. session

 3.cookie

 4.applicaiton

 5.request.serAttribute(“uname”,u);

 request.getRequestDispacther(“/…/…”)

5.四种会话跟踪技术

  1).隐藏表单域:<input type=”hidden”>,非常适合步需要大量数据存储的会话应用。

  2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。

     见 http://blog.csdn.NET/xh16319/article/details/8464055

  3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP

响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个

Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至

在客户端计算机重启后它仍可以保留其值。

     见:http://blog.csdn.net/xh16319/article/details/8464319

  4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话

 

共享数据在web中的范围(四种会话跟踪技术)

  (1).page:仅在当前页可用(保存在当前的PageContext中)

  (2).request:仅用于当前客户端的请求(保存在ServletRequest对象中),它在同一个请求范围内有效.

  (3).session:仅在当前的HttpSession的生命周期内,当前浏览器窗口的整个生存期都有效.关闭浏览器时,这个对象会跟着消失,在整个对话期间都有效.

  (4).application:在整个应用范围内都有效,只有当服务器重启时,这个对象才会消失.

      http://blog.csdn.net/xh16319/article/details/8033552


6.输出一个某种编码的字符串

  1. response.setHeader(“Content-type”“text/html;charset=UTF-8”);    
  2. response.setCharacterEncoding(”UTF-8”);  
    response.setHeader("Content-type", "text/html;charset=UTF-8");  
    response.setCharacterEncoding("UTF-8");

7.JSP和Servlet的区别

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

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


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

8.在JSP中如何确定某个Jsp文件的真实路径

  1. getServletContext().getRealPath()  
      getServletContext().getRealPath()


  Cookie:服务器在客户端保存用户的信息

  Session:服务器可以为每个用户浏览器创建一个会话对象

  http://blog.csdn.Net/luotuomianyang/article/details/52397778


10.列出Jsp中包含外部文件的方式

  行为元素<jsp:includepage=”somefile” flush=”true”/>,它是动态包含一个外部文件,运行后代码时是分别编译成单独的.class文件。

  指令元素<%@include file =”somefile”%>这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件。


 11. include的用法

  http://www.hongyanliren.com/2014m01/3187.html


12、编译好的Servlet类放在什么位置?

     放在Web应用WEB-INF下面的classes文件夹中。

13、谈谈Servlet过滤器的作用?

   http://blog.csdn.net/luotuomianyang/article/details/52402991

   Servlet是特殊的Servlet,能够对特定的请求路径进行过滤,在访问这个路径之前,先执行过滤器,过滤器进行预处理,过滤器决定是否继续执行后续的文件。典型的应用,可以把用户验证的代码写在过滤器中,然后把过滤的路径配制成需要验证的文件的路径。

14、谈谈Servlet监听器的作用

  Servlet监听器对特定的事件进行监听,当产生这些事件的时候,会执行监听器的代码。可以对应用的加载、卸载,对session的初始化、销毁,对session中值变化等事件进行监听。

猜你喜欢

转载自blog.csdn.net/NameGGG/article/details/77334283
今日推荐