项目五阶段准备
Filter全局编码
- 需求
- 用户登录功能,将请求方式修改为post,会有请求参数中文乱码问题,可以使用Filter过滤器来统一解决。
- 代码实现
public class EncodingFilter implements Filter {
private String encoding ;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("encoding");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
}
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.atguigu.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
登录状态校验
- 需求
- 把项目中一些功能保护起来,没有登录不允许访问,比如:购物车功能、订单功能、图书管理功能等等。
- 代码实现
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
//校验登录状态
Object existUser = request.getSession().getAttribute(BookstoreConstant.SESSION_KEY_USER);
if (existUser == null) {
//没有登录 , 跳转到login.html
try {
response.sendRedirect(request.getContextPath() + "/user?method=toLoginPage");
} catch (IOException e) {
e.printStackTrace();
}
} else {
//有登录,直接放行
chain.doFilter(request, response);
}
}
}
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.atguigu.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/protected/*</url-pattern>
</filter-mapping>
**注意事项**
- LoginFilter只过滤受保护的资源("/protected/*"),否则会有死循环。
订单模型