Servlet详解
1、Servlet是运行于支持Java的应用服务器中,用于交互式的浏览和修改数据,生成动态Web内容。
- 我们要自定义一个Servlet广义上必须实现Servlet接口
- Servlet接口有两个实现类,而HttpServlet又继承GenericServlet类,这两个类都是抽象类
- GenericServlet
- HttpServlet
- 我们一般创建JavaWeb项目都是基于Http协议,所以创建Servlet都是继承HttpServlet
2、Servlet工作模式
- 客户端发送请求至服务器
- 服务器启动并接受客户端发送的请求,调用对应的Servlet处理请求,并生成响应内容将其传给服务器
- 服务器将响应内容返回给客户端
3、Servlet的生命周期
1 | java复制代码 |
- 当Servlet第一次被请求时,服务器就会调用init()方法初始化一个Servlet对象,但是这个方法在后续的请求中不会再次被调用,仅仅只会调用一次。在调用这个方法时,Servlet容器会传入一个ServletConfig对象来对Servlet对象进行初始化。
- 每次客户端请求这个Servlet时,Servlet容器就会调用service()方法处理请求;在后续的请求中,Servlet容器就只会调用这个方法了。
- 当服务器关闭或者停止时,Servlet容器就会调用destroy()销毁这个Servlet。
- 每一个Servlet在容器中只会存在一个Servlet对象,是单例的
4、ServletContext对象
web容器在启动的时候,会为每一个web应用创建一个唯一的ServletContext对象,它代表了当前的web应用
共享数据
1 | java复制代码@Override |
1 | java复制代码@Override |
1 | xml复制代码<!-- 配置Servlet映射 --> |
获取初始化参数
1 | xml复制代码<!-- 自定义初始化参数 --> |
1 | java复制代码@Override |
请求转发
1 | java复制代码// 请求转发 |
读取资源文件
- 在java目录下新建资源文件
- 在resources目录下新建资源文件
都会被打包放到了同一目录下:classes,这个路径统称为 classpath: 路径
如果发现在java目录中的资源文件没有被打包放在classes目录下,需要在pom.xml中进行以下配置
1 | xml复制代码<build> |
1 | java复制代码@Override |
5、HttpServletResponse
web服务器在接收到客户端的http请求,针对这个请求,分别创建了一个代表请求的HttpServletRequest对象,一个代表响应的HttpServletResponse对象
- 如果要获取客户端请求的一些数据参数,使用HttpServletRequest
- 如果要响应一些数据给客户端,使用HttpServletResponse
1. 向浏览器发送数据
1 | java复制代码ServletOutputStream getOutputStream() throws IOException; |
2. 设置响应头
1 | java复制代码void setCharacterEncoding(String var1); |
3. 响应状态码
1 | java复制代码int SC_OK = 200; |
4. 下载文件
1 | java复制代码@Override |
5. 实现重定向
- URL地址栏会发生改变
1 | java复制代码@Override |
6、HttpServletRequest
HttpServletRequest代表客户端的请求,用户通过http协议访问服务器,HTTP服务器会将所有的请求信息封装到这个对象中。
1.获取前端传递的参数
1 | java复制代码// 获取指定名称的一个参数 |
7、请求和转发的区别
面试题:请你聊一聊转发和重定向的区别?
相同点:
- 页面都会实现跳转
不同点:
- 请求转发时,URL地址栏不会发生改变
- 请求重定向时,URL地址栏会发生改变
本文转载自: 掘金