Servlet梳理一

     读《Head First Servlet&JSP》个人体会,总结的一些东东。

      1:HTTP响应剖析。
           下面是HTTP响应的具体的内容:
            HTTP/1.1  200  OK                    这是响应的头部
            Set-Cookie:JSESSIONID=23123lkj32k3j2kk43kjk4kj; Path=/TestEL
            Content-Type: text/html
            Content-Length: 397
            Date : Sat,19 May 2012 18:44:45 GMT
            Server :Apache-Coyote/1.1
            Connection: close

            <html>                                     这是响应的体部
            ...........
            </html>

       2: Servlet剖析。

      Servlet在容器的控制下,如何完成请求处理:
                 用户点击一个连接,指向一个servlet而不是一个静态的页面
                 容器看出来这个请求要的是一个servlet,所以创建两个对象HttpServletRequest,HttpServletResponse
                 容器根据请求的URL找到正确的servlet,为这个请求创建或分配一个线程,并把创建的HttpServletRequest和HttpServletResponse传递给这个servlet的线程
                 容器调用servlet的service()方法。根据请求的不容类型,service会调用doGet()或doPost()方法
                 doGet()方法生成动态的页面,并把这个页面”塞到“响应对象里
                 线程结束,容器把响应对象转换为一个http响应,把他发给用户,然后删除请求对象和响应对象

             import javax.servlet.*;
             import javax.servlet.http.*;
             import java.io.*;                                                    Servlet从这里拿到容器所创建的请求对象和响应对象

             public  class   Servlet2 extends HttpServlet{             ↑↑↑↑↑↑↑↑↑
                       public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
                            PrintWriter out = response.getWriter();                            在Servlet从容器得到的响应对象中,可以拿到一个PrintWriter。使用
                            java.util.Date  today = new java.util.Date();                       这个PrintWriter能够将HTML文本输出到响应对象。最后由容器把响应
                            out.println("<html>"+                                                     对象装换为一个HTTP响应(那个由PrintWriter输出的内容,就放在HTTP响应的
                                            "<body>"+                                                    体部)
                                            "<h1>"+
                                            "This is Servlet2"+
                                            "<br>"+
                                            today+
                                            "</h1>"+
                                            "</body>"+
                                            "</html>");

                        }

              }

              这种做法很原始,如果HTML再复杂一点,不难想象该有多复杂。这样就引入了JSP。引入后响应过程如下:
                    浏览器把请求对象数据发送给容器                   
                    容器根据URL找到正确的servlet,并把请求对象传递给这个servlet
                    servlet调用服务层的javaBean寻找帮助
                    这个类返回一个回答,servlet吧这个回答增加到请求对象中           (我更多的是放在session中的,没有涉及到这一点)
                    servlet把请求对象转发给JSP
                    JSP从请求对象找到答案
                    JSP为容器生成一个静态的页面
                    Servlet把这个页面附加到HttpServletResponse中的内容部分,最后转换为Http响应的体部
                    容器把这个http响应发送给用户

                    import com.example.model.*;
                    import javax.servlet.*;
                    import javax.servlet.http.*;
                    import java.io.*;
                    import java.util.*;

                    public  class  Servlet2 extends HttpServlet{

                              public void  doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{

                                      String c = request.getParameter("color");
                                      JavaBean jb = new JavaBean();

                                      List  result  = jb.getBrands(c);
                                      request.setAttribute("style",result);            
为请求对象增加一个属性,工jsp使用
                                      RequestDispatcher view = request.getRequestDispatcher("result.jsp");        为jsp实例化一个请求分派器
                                      view.forward(request,response);                 使用请求分派器要求容器准备好jsp,并向jsp发送请求和响应

                              }

                     }

                                

           

原文地址:https://www.cnblogs.com/lovery/p/2509161.html