一、中文处理
在通过Servlet获取中文参数 的章节中知道,可以通过
request.setCharacterEncoding("UTF-8"); //获取中文的参数
response.setContentType("text/html; charset=UTF-8"); //返回中文的参数
正确获取UTF-8编码的中文,但是如果有很多servlet都需要获取中文,那么就必须在每个Servlet中增加这段代码。
有一个简便的办法,那就是通过Filter过滤器进行中文处理 ,那么所有的Servlet都不需要单独处理了。
1.创建一个 EncodingFilter ,设置如下代码
package filter;
import ...
public class EncodingFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
2.配置web.xml
测试前,记得把HeroAddServlet中的request.setCharacterEncoding(“UTF-8”);注释掉
========================================================
========================================================
二、登录验证
在Servlet中进行登陆验证的局限性
在用户是否登陆的验证中,我们可以通过在HeroListServlet中增加对session的判断代码来做到登陆验证。如图绿色部分
但是按照这样的做法,所有的Servlet都要加上一样的代码,就会显得比较累赘。
与通过Filter处理中文问题一样,也可以通过Filter一次性解决所有的登陆验证问题
1.创建一个AuthFilter 类
首先判断是否是访问的login.html和loginHero,因为这两个页面就是在还没有登陆之前就需要访问的
从Session中获取userName,如果没有,就表示不曾登陆过,跳转到登陆页面。
2.配置web.xml
PS:因为这个过滤器的存在,在登陆之前所有的资源都不能访问。 所以在login.jsp上如果有图片,js和css,也不能够正常显示和工作。
所以要在过滤器里放行