Servlet
Servlet是Java Servlet的简称,Servlet可以看作是JavaEE中Web服务端开发的一个标准,主要功能在于交互式地浏览和生成数据,生成动态Web内容。可以看作Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层
Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
Servlet生命周期
- 实例化 - 通过classLoader加载类,然后实例化该对象,对于一个符合J2EE标准的服务器,一个servlet的类,只产生一个servlet对象(也可以设置每次请求都创建一个新对象)
- 初始化 - init()方法,init 方法被设计成只调用一次(init(servletcofig) servletconfig这个参数记录了Servlet的配置信息)
- 处理请求- Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端的请求,并把格式化的响应写回给客户端。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务
销毁- destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。
一个典型生命周期
第一个到达服务器的 HTTP 请求被委派到 Servlet 容器
- Servlet 容器在调用 service() 方法之前加载 Servlet 对象
Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法

Session使用
```java public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 如果不存在 session 会话,则创建一个 session 对象 HttpSession session = request.getSession(true); // 获取 session 创建时间 Date createTime = new Date(session.getCreationTime()); // 获取该网页的最后一次访问时间 Date lastAccessTime = new Date(session.getLastAccessedTime()); //设置日期输出的格式 SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String title = "Servlet Session 实例 - 菜鸟教程"; Integer visitCount = new Integer(0); String visitCountKey = new String("visitCount"); String userIDKey = new String("userID"); String userID = new String("Runoob"); if(session.getAttribute(visitCountKey) == null) { session.setAttribute(visitCountKey, new Integer(0)); }
// 检查网页上是否有新的访问者
if (session.isNew()){
title = "Servlet Session 实例 - 菜鸟教程";
session.setAttribute(userIDKey, userID);
} else {
visitCount = (Integer)session.getAttribute(visitCountKey);
visitCount = visitCount + 1;
userID = (String)session.getAttribute(userIDKey);
}
session.setAttribute(visitCountKey, visitCount);
}
<a name="n8D8Y"></a>
### Cookie使用<br />
```java
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie name = new Cookie("name",
URLEncoder.encode(request.getParameter("name"), "UTF-8")); // 中文转码
Cookie url = new Cookie("url",
request.getParameter("url"));
name.setMaxAge(60*60*24);
url.setMaxAge(60*60*24);
response.addCookie( name );
response.addCookie( url );
response.setContentType("text/html;charset=UTF-8");
}
Filter过滤器
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息,主要有以下功能:
- 在客户端的请求访问后端资源之前,拦截这些请求。
- 在服务器的响应发送回客户端之前,处理这些响应。
一般我们可以使用Filter实现以下功能
- 身份验证过滤器
- 数据的加密或者编码
-
生命周期
实例化与初始化 - 与servlet对象一样只会产生一个
- 执行过滤操作 - 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法
- 销毁
异常处理
ExceptionHandler,定义不同类型错误的默认返回
参考
https://github.com/hollischuang/Interview/blob/master/contents/4_JavaWeb.md
https://www.cnblogs.com/tengpan-cn/p/4908964.html
https://www.ibm.com/developerworks/cn/java/j-lo-servlet/
https://www.runoob.com/servlet/servlet-life-cycle.html
Destory被调用的时间
https://www.jianshu.com/p/ac09b3c52870
Tomcat
tomcat是一个servlet容器,可以把tomcat简单的认为一个用于处理连接请求,管理servlet的生命周期的进程。tomcat安装后的目录结构如下:
- bin: 动态连接库和管理tomcat的脚本文件
- conf: 服务器配置文件,最主要的就是service.xml,里面配置了服务器默认监听额端口号
- lib: 存放jar包
- log: 存放服务器log文件
- webapps: 存放网站文件包括静态文件与servlet文件
- work 存放JSP生成的Servlet源文件和字节码文件
Hello World
tomcat采用线程池的方式来并发处理请求,默认配置为:
- maxThreads:处理的最大并发请求数,默认值200
- minSpareThreads:最小线程数始终保持运行,默认值25
- maxConnections:在给定时间接受和处理的最大连接数,默认值10000
相关主题:
Jetty:https://www.ibm.com/developerworks/cn/web/wa-lo-jetty/?mhq=jetty
Jetty: https://www.ibm.com/developerworks/cn/java/j-lo-jetty/?mhq=jetty
tomcat配置: https://www.cnblogs.com/tengpan-cn/p/4693231.html
官方文档:https://tomcat.apache.org/tomcat-9.0-doc/index.html
https://www.cnblogs.com/GtShare/p/8033637.html
http://how2j.cn/k/tomcat/tomcat-tutorial/541.html
https://www.jianshu.com/p/2f4a2bca088c