乱码问题
- 使用springmvc中自带的过滤器,但是不能解决get乱码
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<!--/*中的*是重点-->
<url-pattern>/*</url-pattern>
</filter-mapping>
- 自定义过滤器
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String method = req.getMethod().toUpperCase();
if ("POST".equals(method)) {
req.setCharacterEncoding("utf-8");
chain.doFilter(req, res);
} else if ("GET".equals(method)) {
chain.doFilter(new HttpServletRequestWrapper(req) {
@Override
public String getParameter(String name) {
String newValue = null;
String oldValue = super.getParameter(name);
if (oldValue != null) {
try {
newValue = new String(oldValue.getBytes("ISO8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return newValue;
}
@Override
public String[] getParameterValues(String name) {
String[] oldValues = super.getParameterValues(name);
String[] newValues = new String[oldValues.length];
if (!ArrayUtils.isEmpty(oldValues)) {
for (int i = 0; i < oldValues.length; i++) {
try {
newValues[i] =
new String(oldValues[i].getBytes("ISO8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
return newValues;
}
}, res);
}
}
异常处理
- 自定义异常处理类
实现接口:HandlerExceptionResolver
实现resolverException方法
@Component
public class MyExceptionResolver implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
System.out.println("进入了异常处理类");
System.out.println(o);
System.out.println(o.getClass());
System.out.println("错误信息:"+e.getMessage());
//页面跳转,跳转到错误页
ModelAndView mv=new ModelAndView();
mv.setViewName("error");
mv.addObject("errMsg", e.getMessage());
return mv;
}
}
springmvc-servlet.xml配置
<!--简单异常处理类配置-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!--
key:匹配的异常类型
value:逻辑视图名
-->
<prop key="java.lang.Exception">error</prop>
<!--<prop key="java.lang.NullPointerException">error</prop>-->
</props>
</property>
</bean>
- 使用springmvc中提供的简单异常处理类
SimpleMappingExceptionReslover 在xml中将其创建对象
需要在xml中进行启动配置
在错误页面可以使用jsp内置对象exception来显示错误信息,exception使用需要在page指令中添加isErrorPage=“true”