因为我的开发软件是eclipse所以在开发时遇到了特别多的问题下面是eclipse中从创建参数和过滤器的方式
/*** Servlet Filter implementation class EncodingFilter*/
@WebFilter(description = "全站乱码过滤器", urlPatterns = { "/*" },
initParams = { @WebInitParam(name ="encode", value = "UTF-8")
})
public class EncodingFilter implements Filter {private FilterConfig config=null;private String encode=null;/*** Default constructor. */public EncodingFilter() {// TODO Auto-generated constructor stub}/*** @see Filter#destroy()*/public void destroy() {// TODO Auto-generated method stub}/*** @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub// place your code here//处理get请求的乱码response.setContentType("text/html;charset="+encode);//处理post请求乱码//request.setCharacterEncoding(encode);// pass the request along the filter chainchain.doFilter(new MyHttpServletRequest((HttpServletRequest)request), response);}/*** @see Filter#init(FilterConfig)*/public void init(FilterConfig fConfig) throws ServletException {// TODO Auto-generated method stubthis.config=fConfig;//获取参数看参数是哪一个然后把他设置给新的编码方式encode=config.getInitParameter(encode)==null?"utf-8":config.getInitParameter(encode);}//装饰:写一个类实现被装饰的一个接口在构造方法传入被装饰者,不想改造的方法调用原有的方法,想改造//的自己来写逻辑class MyHttpServletRequest extends HttpServletRequestWrapper{private HttpServletRequest request=null;private boolean isNotEncode=true;public MyHttpServletRequest(HttpServletRequest request) {super(request);// TODO Auto-generated constructor stubthis.request=request;}@Overridepublic String getParameter(String name) {// TODO Auto-generated method stubreturn getParameterValues(name)==null?null:getParameterValues(name)[0];}@Overridepublic Map<String, String[]> getParameterMap() {// TODO Auto-generated method stubtry {//post提交处理方式if (request.getMethod().equalsIgnoreCase("post")) {request.setCharacterEncoding(encode);return request.getParameterMap();}else if (request.getMethod().equalsIgnoreCase("get")) {//get处理方式Map<String, String[]> map=request.getParameterMap();if (isNotEncode) {for(Map.Entry<String, String[]> entry:map.entrySet()){String[] vsString=entry.getValue();for(int i=0;i<vsString.length;i++){vsString[i]=new String(vsString[i].getBytes("iso8859-1"),encode);}}isNotEncode=false;}return map;}else{return super.getParameterMap();}} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();throw new RuntimeException();}}@Overridepublic String[] getParameterValues(String name) {// TODO Auto-generated method stubreturn getParameterMap().get(name);} }
}