Servlet接口方法
Servlet接口方法
public void init(ServletConfig servletConfig);
创建实例的时候的时候初始化
public ServletConfig getServletConfig();
获取servlet的配置,不管
public void service(ServletRequest servletRequest, ServletResponse servletResponse);
方法实际存放地,对应相应的url
public String getServletInfo();
获取servlet的实现的作者之类,不管
public void destroy();
销毁实例时,启动
Servlet生命周期
- 被创建:执行init方法,只执行一次
- 默认访问这个servlet时创建,并放到实例池
- 可改创建时机
- 提供服务:执行service方法,访问一次调用一次
- 被销毁:执行destory方法,只执行一次
- 只有服务器正常关闭时,执行
- 在servlet销毁之前执行,一般用于释放资源
注册Servlet
XML配置法
一个servlet里面配置name对应的类(全类名)
一个servlet-mapping匹配name对应的url
<servlet>
<servlet-name>demo01</servlet-name>
<servlet-class>org.example.demo.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo01</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
注解法
@WebServlet(....)
public class t01 implements Servlet{
......
}
// 直接添加注解,在注解中填入必要信息,之后就能使用了
对servlet的封装抽象类HttpServlet
public class HelloServlet extends HttpServlet {
直接继承它就行,还提供了各种封装好的方法,直接重写就ok了
}
ServletRequest
// 封装了请求的数据
ServletResponse
// 封装相应消息
cookie
用于存放一些数值
相当于客户端保存客户的所有信息
Session
保持会话使用的技术,基于cookie
相当于服务端保持信息,客户端只保存如id之类的,能唯一确定客户身份之类的,其他详情由服务器保存
ServletContext
作用域是整个应用,可以用于数据共享
Servlet的三大域
requset域==>HttpServletRequest
一次请求内有效
session域==>HttpSession
一次会话有效,(会话:关闭浏览器或关闭服务器)
application域==>ServletContext
在服务器开启期间,所有的访问都能访问到该内容
文件上传和下载
文件上传
前端事项
- method必须为post
- enctype必须为multipart/form-data,这样才支持文件上传
- input的type设置为file,这样就可以选择文件了
- 设置name属性,给一个参数名方便后端Part类获取对应文件
<form action="up" method="post" enctype="multipart/form-data"> <input type="file" name="filename"> <input type="submit"> </form>
后端事项
关键对象Part类,可以实现上下传
- 必须有注解@MultipartConfig
- 通过Part pt = req.getPart("filename");获取对应的对象
- 之后就可以通过Part提供的方法进行处理文件
@MultipartConfig @WebServlet("/up") public class up extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); Part pt = req.getPart("filename"); System.out.println(pt.getSubmittedFileName()); pt.write("/"+pt.getSubmittedFileName()); // 可以是绝对地址或相对地址 // 但相对地址,相对是tomcat文件的地址,不是java文件的地址 } }
文件下载
前端准备
使用download属性会自动下载,或浏览器的特性识别不了也会自动下载
download="如果指定文件名如c.jpg,那么下载的时候就会下载成这个,没有指定就是对应的文件名"
<a download src="down/a.png"></a>
后端准备
先在webapp目录下(因为jsp在该目录下,方便相对路径书写),创建一个文件夹down,里面就可以存放静态的一些资源,之后在tomcat部署就可以直接访问对应的资源
代码下载
思路就是后端获取对应的文件名,然后再服务器的文件中找,然后返回去
通过java的文件操作,通过输入流将文件放到response的输出流中
注意response的相应格式之类的要作一些修改
过滤器
在Servlet响应前,先对请求做一个处理
实现Filter接口
过滤器可以写多个,可能按文件名的字符序依次进行,然后依次返回
@WebFilter("/demo")// 表明要拦截的url
public class fliter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 预处理
System.out.println("预处理");
// 放行
filterChain.doFilter(servletRequest, servletResponse);
// 后处理
System.out.println("后处理");
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
监听器
监听三大域的动作,如创建,销毁之类的
如监听session的创建和销毁,可以监听在线人数
@WebListener// 添加此注解使其生效 👇这个 ,你想监听谁,就实现哪个接口就行
public class Listener implements HttpSessionListener {
@Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSessionListener.super.sessionDestroyed(se);
}
@Override
public void sessionCreated(HttpSessionEvent se) {
HttpSessionListener.super.sessionCreated(se);
}
}