//判断session是否是新的 boolean isNew = session.isNew();
4. ServletContext接口
ServletContext接口的使用和JPS的内置对象
application非常相似。application对象其实就是ServletContext接口的一个实例,不过实例化过程是自动的,无需自定义
在Servlet中application中必须通过HttpServlet接口中的getServletContext()方法获得。
HttpSession接口和ServletContext接口的实例:
// 设置编码
response.setContentType(\); // 新建输出对象,是结果输出
PrintWriter out = response.getWriter();
// 接受请求参数
String username = request.getParameter(\); String password = request.getParameter(\);
//建立session
HttpSession session = request.getSession(); session.setAttribute(\, username);
//建立application
ServletContext application= getServletContext();
public void service(HttpServletRequest request, HttpServletResponse
throws ServletException, IOException {
response)
}
application.setAttribute(\, password);
out.println(session.getAttribute(\)); out.println(application.getAttribute(\)); out.println(\你好这里是service方法\); out.flush(); out.close();
Filter开发
Filter的中文名为过滤器的意思,借助filter我们可以
实现以下功能:
过滤非法文字和信息 设置统一字符编码 对用户进行登录验证 改变图片文件格式 对相应做压缩处理
对XML的输出使用XSLT来进行转换
在Servlet2.3之后,如果要添加Filter,只需在web.xml
中配置Filter相关设置。可以方便的为web项目添加新的filter或修改现有的Filter,而不需要修改现有的servlet,JSP和现有的静态页面代码。
Filter和Servlet类似,也是java中的一个类,所以添
加方式和普通的java类相同。自定义的Filter必须实现Filter接口。还必须实现Filter中的init()方法,doFilter()
方法和destroy()方法。其中init()方法和destroy()方法分别是初始化和销毁时调用。doFilter()方法负责过滤所有的处理代码都放在该方法中,doFilter()方法接受三个参数,分别是request,response,chain。其中request,response用来传递给下一个Filter或者JSP和servlet, chain则通过doFilter()方法来调用下一个Filter,获得调用原始的JPS,servlet等其他内容。 Demo:
package cn.filter;
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;
public class FirstFilter implements Filter {
public void init(FilterConfig arg0) throws ServletException { public void doFilter(ServletRequest request, ServletResponse }
FilterChain chain) throws IOException, ServletException {
response,
System.out.println(\执行过滤!\); //调用下一个filter或原始内容
chain.doFilter(request, response);
public void destroy() {
System.out.println(\销毁方法!\); }
}
System.out.println(\初始化方法!\); }
若想执行在web.xml里配置是少不了的,在web.xml中
添加
Filter和Servlet相似也具有生命周期,Filter从生成到销
毁必须经过如下几个步骤:
1.生成Filter并通过init()方法来进行初始化。
2.过滤用户请求,调用doFilter()方法。
3.调用destroy()方法进行销毁,并通过垃圾收集器进行收集清理。 常用的Filter 1.非法文字过滤器
首先通过Filter类中的doFilter()方法的request参
数来获得用户的输入。然后对输入的文字进行判断和处理 ,如替换非法文字,提示输入的是非法文字,要求重新输入等。最后通chain的doFilter方法来调用下一个Filter,获得原始的jsp或servlet等其他内容。
一个完整的DEMO Filter文件:
package cn.servlet;
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.http.HttpServletRequest;
public class FirstFilter implements Filter {
//如果字符串不为空
if(username != null){
//如果不含非法文字z,调用下一个filter或原始内容 if(username.indexOf(\
//调用下一个filter或原始内容
chain.doFilter(request, response); /*
* request.getRequestDispatcher(\取得一个 * RequestDispatcher,一个请求分发器对象,它的方法
public void doFilter(ServletRequest request, ServletResponse
FilterChain chain) throws IOException, ServletException {
response,
System.out.println(\执行过滤!\
//接受要过滤的字符串
String username = null;
username = request.getParameter(\public void destroy() {
System.out.println(\销毁方法!\}
} else {