6.Servlet、Filter过滤器以及监听器
Servlet与JSP的区别:
Servlet API常用的接口和类:
1.Servlet接口
Servlet的运行需要Servlet容器的支持,Servlet容器通过调用Servlet对象提供了标准的API接口对请求进行处理。
public void init(ServletConfig config) 初始化工作
public void service(ServletRequest request, ServletResponse reponse) 处理客户端请求
public void destroy() 当Servlet对象从Servlet容器移除时,释放资源
public ServletConfig getServletConfig() 用于获取Servlet对象的配置信息,返回ServletConfig对象
public String getServletInfo() 返回有关Servlet的信息,如作者版本等
2.ServletConfig接口
3.HttpServletRequest接口
4.HttpServletResponse接口
5.GenericServlet类
6.HttpServlet类
Servlet创建:
之后在src目录下创建包,然后创建Servlet类

创建Servlet有两种方法:
1.创建一个普通的java类,使其继承HttpServlet类,然后再手动配置web.xml文件(位置见上图)注册Servlet对象。
Servlet配置:
声明Servlet对象:
<servlet>
<servlet-name>MyServlet</servlet-name> //指定Servlet名称,可自定义
<servlet-class>ServletSrc.AddServlet</servlet-class> //指定Servlet对象的完整位置,包含Servlet对象的包名和类名
</servlet>
映射Servlet:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name> //与上面的Servlet name对应,不可随意命名
<url-pattern>/MyServlet</url-pattern> //用于映射访问URL(反映在网页地址栏中)
</servlet-mapping>
Servlet过滤器
Filter接口:
FilterConfig接口:
FilterChain接口:
Filter创建
<filter> //规则和Servlet一致
<filter-name>MyFilter</filter-name>
<filter-class>FilterSrc.CharactorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/MyFilter</url-pattern>
</filter-mapping>
也可以使用自动生成的@WebFilter().
Filter实例:
1.过滤敏感字符
WordFilter.java
package com; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; @WebFilter(filterName="/CharactorFilter",value = {"/*"},initParams= {@WebInitParam(name="encoding",value="UTF-8")} )
public class WordFilter implements Filter {
// 非法字符数组
private String words[];
// 字符编码
private String encoding;
// 实现Filter接口init()方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 获取字符编码
encoding = filterConfig.getInitParameter("encoding");
// 初始化非法字符数组
words = new String[]{"糟糕","混蛋"};
}
// 实现Filter接口doFilter()方法
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 判断字符编码是否有效
if (encoding != null) {
// 设置request字符编码
request.setCharacterEncoding(encoding);
// 将request转换为重写后的Request对象
request = new Request((HttpServletRequest) request);
// 设置response字符编码
response.setContentType("text/html; charset="+encoding);
}
chain.doFilter(request, response);
}
// 实现Filter接口destroy()方法
@Override
public void destroy() {
this.words = null;
this.encoding = null;
}
/**
* 内部类重写HttpServletRequestWrapper*/
class Request extends HttpServletRequestWrapper{
// 构造方法
public Request(HttpServletRequest request) {
super(request);
}
// 重写getParameter()方法
@Override
public String getParameter(String name) {
// 返回过滤后的参数值
return filter(super.getRequest().getParameter(name));
}
// 重写getParameterValues()方法
@Override
public String[] getParameterValues(String name) {
// 获取所有参数值
String[] values = super.getRequest().getParameterValues(name);
// 通过循环对所有参数值进行过滤
for (int i = 0; i < values.length; i++) {
values[i] = filter(values[i]);
}
// 返回过滤后的参数值
return values;
}
}
/**
* 过滤非法字符
* @param param 参数值
* @return 过滤后的参数值
*/
public String filter(String param){
try {
// 判断非法字符是否被初始化
if(words != null && words.length > 0){
// 循环替换非法字符
for (int i = 0; i < words.length; i++) {
// 判断是否包含非法字符
if(param.indexOf(words[i]) != -1){
// 将非法字符替换为"****"
param = param.replaceAll(words[i], "****");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return param;
}
}
AddServlet.java
package com; import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class AddServlet
*/
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public AddServlet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();
String string = request.getParameter("string");
out.print("输入成功123<br>"+string);
out.flush();
out.close();
doGet(request, response);
} }
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="GB2312">
<title>非法字符过滤</title>
</head>
<body>
<h2>非法字符过滤</h2>
<form action="AddServlet" method="post">
<input type="text" name="string">
<input type="submit" value="提交">
</form>
</body>
</html>
效果:

Servlet监听器
监听器的作用是监听web容器的有效时间,利用Listener接口监听在容器中的某个执行程序,并且根据其应用程序的需求做出适当的响应。
1.Servlet上下文监听
1.ServletContextListener接口
2.ServletAttributeListener接口
2.HTTP会话监听
1.HttpSessionListener接口
2.HttpSessionActivactionListener接口
3.HttpBindingListener接口
4.HttpSessionAttributeListener接口
3.Servlet请求监听
1.ServletRequestListener接口
2.ServletRequestAttributeListener接口
文件上传
6.Servlet、Filter过滤器以及监听器的更多相关文章
- 面试之servlet、过滤器、监听器
servlet.过滤器.监听器servlet是Java中WEB请求和响应的容器servlet的运行需要在类似tomcat容器中,一个 Web 应用对应一个 Context 容器,也就是 Servlet ...
- 动手学servlet(六) 过滤器和监听器
过滤器(Filter) 过滤器是在客户端和请求资源之间,起一个过滤的作用,举个例子,比如我们要请求admin文件夹下的index.jsp这个页面,那么我们可以用一个过滤器,判断登录用户是不是管理员 ...
- servlet,过滤器,监听器,拦截器的区别
一.目录 1.概念 2.生命周期 3.职责 4.执行过程 二.内容 概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性, 可以动态生成web页面它 ...
- 面试题:filter过滤器 listener 监听器 案例有点用
1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行 ...
- SpringBoot09 自定义servlet、注册自定义的servlet、过滤器、监听器、拦截器、切面、webmvcconfigureradapter过时问题
1 servlet简介 servlet是一种用于开发动态web资源的技术 参考博客:servlet基础知识 httpservlet详解 2 在springboot应用中添加servlet sp ...
- Servlet,过滤器和监听器的配置和使用
一.什么是Servlet Servlet使用Java语言实现的程序,运行于支持Java语言的Web服务器或者应用服务器中.Servlet先于JSP出现,提供和客户端动态交互的功能.Servlet可以处 ...
- SpringBoot自定义servlet、注册自定义的servlet、过滤器、监听器、拦截器、切面、webmvcconfigureradapter过时问题
[转]https://www.cnblogs.com/NeverCtrl-C/p/8191920.html 1 servlet简介 servlet是一种用于开发动态web资源的技术 参考博客:serv ...
- servlet、过滤器、监听器、拦截器之间的关系和区别
一.概念 1.什么是servlet servlet是一个接口.定义了一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destr ...
- Servlet Filter 过滤器
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源: 例如Jsp, Servlet, 静态图片文件或静态 ht ...
随机推荐
- git的常用指令(二) git add -A 、git add . 和 git add -u
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件. git add -u :他仅监控 ...
- exclipe怎么设置编码为UTF-8
如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace)的缺省字符编码是操作系统缺省的编码,简 ...
- QT获取屏幕分表率(PC、安卓)
QRect screenRect = QGuiApplication::primaryScreen()->geometry(); double devicePixelRatio = QGuiAp ...
- 数值或者电话号码被EXCEL转成了科学计数法,用XSSFCell 如何读取
public static Map<String, Integer> readXls() throws IOException { //用来获取每一个小号重复多次,被多少账号用了.来平均 ...
- 【ES6 】const命令
本质 const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动. 对于简单类型的数据(数值.字符串.布尔值),值就保存在变量指向的那个内存地址,因此等同于常量. ...
- shiro学习(五、springboot+shiro+mybatis+thymeleaf)
入门shiro(感觉成功了)首先感谢狂神,然后我就一本正经的复制代码了 项目结构 运行效果 数据库 <dependencies> <!-- thymeleaf-shiro整合包 -- ...
- 13 Django之中间件
一.什么是中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...
- Jquery 学习-菜鸟教程
jquery效果和元素选择 //元素选择 $(this).hide(); $("p.test") //隐藏所有class="test"的<p>元素 ...
- tensorboardX使用中 AttributeError: 'function' object has no attribute 'graph'
最近在使用tensorboardX可视化网络结构,因为tensorboardX并非pytorch原生的可视化工具,所以版本之间并不兼容 在使用的过程中会遇到,AttributeError: 'func ...
- DNS缓存失败怎么解决?
DNS的中文名是域名系统,是域名和IP地址相互映射的一个分布式数据库.有了DNS,我们上网时直接输入网站域名(即网址)即可,而不用输入网站的IP地址访问网站,对于用户来说比较方便记忆和访问. 每次当我 ...