Servlet简介
- 在Java中,Servlet就是一个接口,用来处理Servlet容器发送来的请求和响应的业务逻辑;
- 在Tomcat中,Servlet运行在Servlet容器中,由容器管理Servlet的一生。
Servlet基础
-
Tomcat是一个web服务器和Servlet容器的结合体。Tomcat剖析参考逝宇、这篇文章。
-
web服务器的作用:将某个主机上的资源映射为一个URL供外界访问。
-
容器这样处理请求:容器接收web服务器发送来的请求;容器“看出”请求指向一个servlet,容器创建两个对象request、response;容器匹配到对应的servlet,为此请求分配一个线程,并创建请求和响应对象传递给此servlet;容器调用servlet的service方法,根据请求的不同类型,service()方法会调用doGet()或doPost()方法;doGet()或doPost()方法根据请求将响应内容填入到响应对象,此期间容器一直保留有响应对象的一个引用;线程结束,容器把响应对象转换为一个Http响应,把它发回给请求方,然后删除请求和响应对象。
-
每一次请求都会创建一个线程,每一个线程都会分配一个方法栈,这样保证每次执行doGet()和doPost()方法都在一个单独的方法栈中。
-
Servlet的任务是得到一个请求,再发回一个响应。
-
Servlet的生命周期:
-
ServletConfig
- 每个Servlet都有一个ServletConfig对象
- 用于向Servlet传递部署时信息(例:读取配置文件web.xml中配置的初始化属性的值)
<servlet> <init-param> <param-name></param-name> <param-value></param-value> </init-parm> </servlet>
this.getServletConfig().getInitParam(String name);
- 用于访问ServletContext
-
ServletContext
- 每个Web应用都有一个ServletContext
-
<web-app> <context-param> <param-name></param-name> <param-value></param-value> </context-param> </web-app>
this.getServletContext().getInitParam(String name);
- 其他基础知识可参考ImportNew这篇文章
- 更多可以参考这个知乎问题。
Servlet使用
- 覆盖servlet的doGet()、doPost()方法
- request对象可增加属性
request.setAttribute();
- Servlet调用JSP:
-
//为JSP实例化一个请求分派器 RequestDispatcher view=request.getRequestDispatcher("xxx.jsp"); //使用请求分派器要求容器准备好JSP,并向JSP发送请求和响应 view.forward(request,response);
-
- request对象可获取的信息:
- GET是幂等的,POST不是幂等的
- response的输出可以选择字符或者字节:
-
//输出字符 PrintWriter writer=response.getWriter(); writer.println("");
-
//输出字节 ServletOutputStream out=response.getOutputStream(); out.write(aByteArray);
-
- 下载jar的servlet代码:
- 常用MIME类型(
response.setContentType("MIME类型")
):
推荐书籍
- Head First Servlets and JSP
- 重点为Servlet,JSP可不用着重学习,做了解即可。