1)过滤器

就是为请求与目标之间加一个或多个过滤器

自定义过滤器要实现Filter接口

下面是定义一个所有Servlet的请求中文不乱码

/**
* 用于servlet输出中文乱码的过滤
*/
@WebFilter("/CharsetFilter")
public class CharsetFilter implements Filter {
private String encode;
public CharsetFilter() {
// TODO Auto-generated constructor stub
}
public void destroy() {
// TODO Auto-generated method stub
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if(encode!="") {
response.setCharacterEncoding(encode);
response.setContentType("text/html;charset="+encode);
}
//FilterChain的作用是进入下一步过滤或直接到达请求目标
chain.doFilter(request, response);
} public void init(FilterConfig fConfig) throws ServletException {
//获取web.xml定义的参数
encode=(String)fConfig.getInitParameter("encode");
}
}

相关要在web.xml配置,与servlet配置差不多

	<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>crm.CharsetFilter</filter-class>
<!-- 定义一些初始参数 -->
<init-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<!-- /*是通配符的写法,也可指定为某一个servlet或jsp页进行过滤
如/index.jsp -->
<url-pattern>/*</url-pattern>
</filter-mapping>

2)监听器

可以监听web状态变化,web容器产生的相应事件

1.Servlet上下监听

有两个接口:

ServletContextListener接口:监听ServletContext的创建与删除

ServletAttributeListener接口:监听ServletContext属性的增加、删除、修改(application范围)

例子,ServletAtrributeListener使用

public class MyServletAttributeListener implements ServletContextAttributeListener {

    public MyServletAttributeListener() {
// TODO Auto-generated constructor stub
}
//有新属性加入时触发
public void attributeAdded(ServletContextAttributeEvent scae) {
// TODO Auto-generated method stub
ServletContext context= scae.getServletContext();
System.out.println("新增name:"+scae.getName()+"="+scae.getValue());
} public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("删除name:"+scae.getName()+"="+scae.getValue());
} public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.println("修改name:"+scae.getName()+"="+scae.getValue());
}
}

web.xml的配置

<listener>
<listener-class>crm.MyServletAttributeListener</listener-class>
</listener>

2.HTTP会话监听接口

HttpSessionListenner:监听会话的创建、销毁

HttpSessionActivationListener:监听HTTP会话的active\passivate

HttpBindingListener:当有对象加入移除session时触发,唯一一个不需要在web.xml配置,只要实例化即可启用

HttpSessionAttributeListener:设置session的Attribute时触发

3.Servlet请求监听

ServletRequestListener :ServletRequest的创建与变更

ServletRequestAttributeListener :ServletRequest的Attribute变化时

3)新增注释

像Servlet、Filter、Listener、WebInitParam等都要在web.xml配置,现在新增在类的实现方法,不需要再在web.xml配置

1. @WebServlet

只要在自定义的Servlet类上标注,如

@WebServlet(name="MyServlet",value= "/MyServlet", initParams= {@WebInitParam(name="weburl",value="http://www.x.com")})
public class MyServlet extends HttpServlet {
}

2. @WebFilter

3.WebListener

@WebListener("用于XXX")

4. @WebInitParam

5. @MultipartConfig

用于上传文件,用在Servlet类,且在@WebServlet注释之下

@WebServlet("/UpServlet")
@MultipartConfig(location="E:\\study\\java\\crm\\WebContent")
public class UpServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public UpServlet() {
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 {
PrintWriter out=response.getWriter();
String path=getServletContext().getRealPath("/");//获取服务器地址
Part p=request.getPart("file1");//获取用户选择的文件
if(p.getContentType().contains("image")) {
//仅处理图片的上传
ApplicationPart ap=(ApplicationPart)p;
String fnName=ap.getName();
p.write( "E:\\study\\java\\crm\\WebContent\\upload\\aa.jpg");
out.write("上传成功");
}
}
}

要指定multipart/form-data

<form action="/crm/UpServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file1" id="file1" />
<button type="submit">提交</button>
</form>

6)异步处理

Servlet和Filter可以异步

@WebFilter(filterName="CharsetFilter",asyncSupported=true)
或者
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>crm.CharsetFilter</filter-class>
<async-supported>true</async-supported>
</filter>

12.Java web--过滤器与监听器的更多相关文章

  1. java中过滤器、监听器、拦截器的区别

    1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的actio ...

  2. Java基础——过滤器和监听器

    什么是过滤器? Servlet过滤器和Servlet十分相似,但它具有拦截客户端请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要.对于开发人员而言,过滤器实际上就是在Web ...

  3. Java Web——过滤器

    <Java Web开发技术应用——过滤器> 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上.过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进 ...

  4. java Web三大组件--监听器

    监听器概述 监听器(Listener)是一种特殊的Servlet技术,它可以监听Web应用的上下文信息.Servlet请求信息和Servlet会话信息,即ServletContext.ServletR ...

  5. java web 过滤器跟拦截器的区别和使用

    注:文章整理自知乎大牛以及百度网友(电脑网络分类达人 吕明),特此感谢! 一.过滤器 1.什么是过滤器? 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上.过滤器可附加到一个 ...

  6. java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)

    转载地址:http://www.cnblogs.com/xdp-gacl/p/3952405.html 在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可 ...

  7. Web过滤器和监听器

    1.过滤器 1.1什么是过滤器 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servle ...

  8. java web过滤器防止未登录进入界面

    import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import ja ...

  9. JAVA WEB 过滤器(Filter)中向容器 Spring 注入 bean

    如果直接使用 @Autoware 获取 bean 会直接使该 bean 为 null,这是因为这种配置过滤器的方法无法在过滤器中使用 Spring bean,因为 Filter 比 bean 先加载, ...

随机推荐

  1. poj 3050 地图5位数问题 dfs算法

    题意:一个5*5地图上面,从任意位置上下左右跳五次,组成一个数.问:不重复的数有多少个? 思路:dfs 从任意位置跳5次,说明每个位置都需要遍历. 组成一个数:number*10+map[dx][dy ...

  2. 12864点阵液晶显示模块的原理和实例程序(HJ12864M-1)

    12864点阵液晶显示模块(LCM)就是由 128*64个液晶显示点组成的一个128列*64行的阵列.每个显示点对应一位二进制数,1表示亮,0表示灭.存储这些点阵信息的RAM称为显示数据存 储器.要显 ...

  3. Jquery+Ajax+asp.net+sqlserver-编写的通用邮件管理(源码)

    开始 邮件管理通常用在各个内部系统中,为了方便快捷的使用现有的代码开发一个邮件管理系统而诞生的. 准备条件 这是我的设计表结构,大家一看就懂了   --邮件接收表CREATE TABLE [dbo]. ...

  4. 大数据学习——akka自定义RPC

    实现 package cn.itcast.akka import akka.actor.{Actor, ActorSystem, Props} import akka.actor.Actor.Rece ...

  5. 九度oj 题目1356:孩子们的游戏(圆圈中最后剩下的数)

    题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...

  6. ssh 远程执行绝对路径命令mysqld_multi 报my_print_defaults不存在

    通过SSH直接执行远程命令(这种方式会使用Bash的non-interactive + non-login shell模式)找不到命令参考:http://ghoulich.xninja.org/201 ...

  7. classpath路径

    在项目被集成开发环境编译后,src目录下的东西会编译到WEB-INF/classes目录下,而WEB-INF/classes目录就是所谓的classpath. 将数据库连接配置dataSource.x ...

  8. 设计模式(八)组合模式 Composite

    组合模式: 允许你将对象组合成树形结构来表现“整体/部分”层次结构.组合能让客户以一致的方式处理个别对象以及对象组合. 组合模式适用于创建复杂的对象,这个对象包含某些个别的对象以及这些对象的组合. 从 ...

  9. webpack的像素转vw单位的loader插件

    安装: npm i px2vw-view-loader 配置: 按以下loader格式,添加进入webpack配置文件,实现从px转换成vw,适用于移动端项目 module: { rules: [{ ...

  10. kb-01-d<poj3279>--深搜变种,二进制优化;

    poj--3279 题意: 给n*m的矩阵,0 1组成,每次翻转一个格子可以将上下左右的五个节点翻转,求,把所有的格子翻转成0:输出每个个字的翻转次数:最少字数: 做法: 从上到下,第一行翻转的情况确 ...