Servlet总结
Servlet是什么
servlet是一个运行在服务器端的程序,用于接受前端的请求以及处理响应,Servlet包括Request、Response、Session、Context、Listener、Config、Filter。
生命周期
init() 只执行一次的初始化函数
doFilter(request,response,filterChain) 每次请求都会执行
destory() 只执行一次的销毁函数
Request请求对象
HttpServletRequest
@WebServlet("/xxx")
获取客户端的各种信息(ip、数据、请求头等)
getParamater(“name”); 获取前端提交的参数
getAttribute(“key”);获取存储到Request对象中的数据,转发的时候用到
setAttribute(“key”,“value”);存储到Request对象中的数据,转发的时候用到
getRequestURL()方法返回客户端发出请求时的完整URL。
getQueryString() 方法返回请求行中的参数部分。
getRemoteAddr()方法返回发出请求的客户机的IP地址。
getRemoteHost()方法返回发出请求的客户机的完整主机名。
getRemotePort()方法返回客户机所使用的网络端口号。
getLocalAddr()方法返回WEB服务器的IP地址。
getLocalName()方法返回WEB服务器的主机名。
getHeader(“key”)方法:获取请求头的信息
转发
req.getRequestDispatcher("/url").forward(req,resp);
req.getPart(“name”)获取前端提交的文件,form表单需要enctype=“multipart/form-data”、@MultipartConfig
Session存储对象
getSession() 如果获取不到就返回null
getSession(boolean) 如果获取不到就创建新的对象
session.setAttribute(“key”,“value”); 存
session.setAttribute(“key”,“newvalue”); 更新
session.removeAttribute(“key”); 删除
Response响应对象
HttpServletResponse
setHeader(String name,String value) 将给出的名字和值设置响应的头部
setHeader(“refresh”,“5;url=http://aaa.com”) 自动跳转
setHeader(“content-disposition”,“attachment;filename=xx.xx”);
setError(int sc) 能控制页面是否正常访问
setStatus(int sc) 仅仅改变状态码而已,给当前响应设置状态码,如:setStatus(200)
context.getMimeType(filename) 获取响应的MIME类型
setContentType(String ContentType) 设置响应的MIME类型,setContentType(“text/html”)
setCharaceterEncoding(String arg) 设置响应的字符集编码,如:setCharaceterEncoding(“utf8”)
重定向:
sendRedirect(“htpp://aaa.com”)
Context上下文对象
可以在任何地方直接调用getServletContext()获取对象,代表整个应用程序,一般可用于存储公共数据
context.getMimeType(filename) 获取响应的MIME类型
Listener监听器
@WebListener
1、 ServletContextListener 监听整个应用程序(启动|销毁)
2、 ServletContextAttributeListener 监听整个应用(属性)程序(增加|修改|删除)
3、 ServletRequestListener 监听每一次请求对象(启动|销毁)
4、 ServletRequestAttributeListener 监听每一次请求对象(属性)(增加|修改|删除)
5、 HttpSessionListener 监听Session(启动|销毁)
6、 HttpSessionAttributeListener 监听Session(属性)(增加|修改|删除)
Filter过滤器
Filter过滤Servlet
@WebFilter("/*")
生命周期
init() 只执行一次的初始化函数
doFilter(request,response,filterChain) 每次请求都会执行
destory() 只执行一次的销毁函数
字符集编码过滤器
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf8");
servletResponse.setCharacterEncoding("utf8");
跨域请求过滤器
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 允许的源头,请求这的ip,多个都好隔开
response.setHeader("Access-Control-Allow-Origin", "*");
// 允许的请求方法,多种方法都好隔开
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
// 允许的请求头字段,多个都好隔开
response.setHeader("Access-Control-Allow-Headers", "*");
// 用来指定本次预检请求的有效期,单位为秒,在此期间不用再发出另一条预检请求
response.setHeader("Access-Control-Max-Age", "3600");
// 是否允许后续请求携带认证信息(cookies),该值只能是true,否则不返回
response.setHeader("Access-Control-Allow-Credentials", "true");
filterChain.doFilter(servletRequest, response); // 特性: