servlet的转发和重定向

一.什么是servlet

servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

二.servlet类的编写

要继承HttpServlet,重写service()方法
    public void service(HttpServletRequest request,HttpServletResponse response){
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        根据页面传来的数据包,进行下一步处理  用request.getParameter("括号内为String的字符串,是html提交数据的标签的name              值");

        然后调用dao或者java类的方法进行业务处理
        建立entity实例        

        因为有关和数据库连接处理的业务我们都放在了dao中,所以此处不写.
    }    

三.需要在web.xml中配置servlet

建立和html页面连接的配置文件 web.xml
    该文件在Deployed Resources/webapp/WEB-INF/web.xml
    改配置文件中的内容
    
              一个名字
              包名.类名
      

      
              一个名字,和上面的一样
              /路径   
      

四.区别

forward()与redirect()的区别?

前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
 

什么情况下调用doGet()和doPost()?

Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()

五.如何转发和重定向

请求转发:

request.getRequestDispatcher().forward();

重定向:

response.sendRedirect();

例如:

请求转发:

request.getRequestDispatcher("/student_list.jsp").forward(request,response);

重定向:

response.sendRedirect(request.getContextPath + "/student_list.jsp")

      1、转发是在服务器端完成的,重定向是在客户端发生的;

       2、转发的速度快,重定向速度慢;

       3、转发是同一次请求,重定向是两次请求;

       4、转发地址栏没有变化,重定向地址栏有变化;

       5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成

 

你可能感兴趣的:(Java)