码迷,mamicode.com
首页 > Web开发 > 详细

【Head First Servlets and JSP】笔记1

时间:2017-05-12 20:14:43      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:stat   out   生命周期   tps   this   pre   and   hello   对象   

1、把Java放到HTML中,JSP应运而生。

 

2、Servlet本身并没有main()方法,所以必须要有其他Java程序去调用它,这个Java程序就是Web容器(Container)。Tomcat就是一个容器。

 

3、容器能提供什么?

  • 通信支持 -不用再写ServerSocket了
  • 生命周期管理 -容器控制着Servlet的生与死
  • 多线程支持 -容器会自动地为它接收的每一个Servlet请求创建一个新的Java线程
  • 声明方式实现安全 
  • JSP支持 -容器负责把JSP代码翻译成Java

 

4、容器如何处理请求?

Ⅰ、用户发出一个指向Servlet的请求。

Ⅱ、容器“看出”这个请求指向Servlet,于是创建两个对象HttpServletRequest、HttpServletResponse。

Ⅲ、容器找到这个Servlet,为其创建或者分配一个线程,并传入上述两个对象。

Ⅳ、容器调用Servlet的service()方法。

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getMethod();
        long lastModified;
        if(method.equals("GET")) {
            lastModified = this.getLastModified(req);
            if(lastModified == -1L) {
                this.doGet(req, resp);
            } else {
                long ifModifiedSince;
                try {
                    ifModifiedSince = req.getDateHeader("If-Modified-Since");
                } catch (IllegalArgumentException var9) {
                    ifModifiedSince = -1L;
                }

                if(ifModifiedSince < lastModified / 1000L * 1000L) {
                    this.maybeSetLastModified(resp, lastModified);
                    this.doGet(req, resp);
                } else {
                    resp.setStatus(304);
                }
            }
        } else if(method.equals("HEAD")) {
            lastModified = this.getLastModified(req);
            this.maybeSetLastModified(resp, lastModified);
            this.doHead(req, resp);
        } else if(method.equals("POST")) {
            this.doPost(req, resp);
        } else if(method.equals("PUT")) {
            this.doPut(req, resp);
        } else if(method.equals("DELETE")) {
            this.doDelete(req, resp);
        } else if(method.equals("OPTIONS")) {
            this.doOptions(req, resp);
        } else if(method.equals("TRACE")) {
            this.doTrace(req, resp);
        } else {
            String errMsg = lStrings.getString("http.method_not_implemented");
            Object[] errArgs = new Object[]{method};
            errMsg = MessageFormat.format(errMsg, errArgs);
            resp.sendError(501, errMsg);
        }

    }

Ⅵ、根据请求的不同,service()会调用不同的方法,假设请求对应doGet()方法:

import javax.servlet.http.*;
import java.io.*;
import java.util.Date;

public class Ch1Servlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        PrintWriter out = response.getWriter();
        Date today = new Date();
        out.println("<html>" +
                "<body>" +
                "<h1 align=center>Hello Servlet</h1>"
                + "</br>" + today + "</body>" + "</html>"
        );
    }
}

Ⅶ、doGet()方法生成动态页面,并把它写入response里。

Ⅷ、线程结束,容器把response对象转换为一个HTTP响应,然后清理不再用的对象。

 

【Head First Servlets and JSP】笔记1

标签:stat   out   生命周期   tps   this   pre   and   hello   对象   

原文地址:http://www.cnblogs.com/xkxf/p/6846969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!