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>

最新文章

  1. 【荐】如何正确理解PHP之include,include_once,require,require_once等包含作用域
  2. Python中获取异常(Exception)信息
  3. C++ redirect input
  4. 分析一个C语言程序生成的汇编代码-《Linux内核分析》Week1作业
  5. hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档
  6. 31、activity 四种工作模式
  7. OC-深浅复制
  8. Firebug 非常好用
  9. iOS集成ApplePay
  10. 查看centos系统位数和强制关闭yum
  11. ireport使用总结
  12. 剑指Offer 42. 和为S的两个数字 (其他)
  13. Qthread的使用方法
  14. python中global和nonlocal用法的详细说明
  15. v4l2功能列表大全【转】
  16. java搭建web从0-1(第一步:创建web工程)
  17. Timer与AlarmManager的差别
  18. CentOS7使用阿里源安装最新版Docker
  19. 不老的神器:安全扫描器Nmap渗透使用指南【转】
  20. [转]解读Unity中的CG编写Shader系列5——理论知识

热门文章

  1. usb hub 设备流程图
  2. 蓝牙nrf52832的架构和开发(转载)
  3. C++中重载、覆盖和隐藏的区别,以及适用场景
  4. 2019 study list
  5. python multiprocessing 源码分析
  6. 03_HibernateSessionFactory源码分析
  7. rocketmq源码分析2-broker的消息接收
  8. 零基础学 HTML5+CSS3 全彩版 明日科技 编著
  9. match_parent, wrap_content, 和 fill_parent 区别联系
  10. web结对项目