1 package fengke.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 /** 11 * 解决乱码问题的方式 12 * @author 锋客 13 * 14 */ 15 public class Character extends HttpServlet { 16 17 public void doGet(HttpServletRequest request, HttpServletResponse response) 18 throws ServletException, IOException { 19 20 response.setContentType("text/html"); 21 this.doPost(request, response); 22 } 23 24 25 public void doPost(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 28 response.setContentType("text/html"); 29 /*1.采用设置字符集的方式 30 * request.setCharacterEncoding("utf-8"); 31 */ 32 /*2.设置过滤器 ====CoreFilter.java 33 * 配置web.xml 34 */ 35 /* 36 * 3.采用转码的方式 37 * String s = new String(request.getParameter("c").getBytes("ISO8859-1"),"UTF-8"); 38 */ 39 40 String s = request.getParameter("c"); 41 System.out.println(s); 42 } 43 44 45 }
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 6 %> 7 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 9 <html> 10 <head> 11 <base href="<%=basePath%>"> 12 13 <title>My JSP 'index.jsp' starting page</title> 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 </head> 23 <!-- 解决乱码问题 --> 24 <body> 25 <table> 26 <form action="Character" method="post" > 27 <tr> 28 <td><input type="text" name="c" value="中国"></td> 29 <td><input type="submit" value="提交"></td> 30 </tr> 31 </form> 32 </table> 33 </body> 34 </html>
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>Character</display-name> 4 <servlet> 5 <description>This is the description of my J2EE component</description> 6 <display-name>This is the display name of my J2EE component</display-name> 7 <servlet-name>Character</servlet-name> 8 <servlet-class>fengke.servlet.Character</servlet-class> 9 </servlet> 10 11 <servlet-mapping> 12 <servlet-name>Character</servlet-name> 13 <url-pattern>/Character</url-pattern> 14 </servlet-mapping> 15 <welcome-file-list> 16 <welcome-file>index.html</welcome-file> 17 <welcome-file>index.htm</welcome-file> 18 <welcome-file>index.jsp</welcome-file> 19 <welcome-file>default.html</welcome-file> 20 <welcome-file>default.htm</welcome-file> 21 <welcome-file>default.jsp</welcome-file> 22 </welcome-file-list> 23 <!-- 24 <filter> 25 <filter-name>encodingFilter</filter-name> 26 <filter-class>fengke.filter.CoreFilter</filter-class> 27 <init-param> 28 <param-name>encoding</param-name> 29 <param-value>utf-8</param-value> 30 </init-param> 31 </filter> 32 33 <filter-mapping> 34 <filter-name>encodingFilter</filter-name> 35 <url-pattern>/*</url-pattern> 36 </filter-mapping> 37 --> 38 </web-app>
package fengke.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; 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; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; //过滤器处理表单传到servlet的乱码问题 public class CoreFilter implements Filter{ //自写一个request换掉原来的request,重写里面的getParemeter方法,可以设置编码 class MyRequest extends HttpServletRequestWrapper{ @Override public String getParameter(String param) { String value = null; try { //post super.setCharacterEncoding(encoding);//把编码转换为encoding value = super.getParameter(param); if(super.getMethod().equalsIgnoreCase("GET")){ if(value!=null){ value = new String(value.getBytes("iso8859-1"),encoding); } } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return value; } public MyRequest(HttpServletRequest request) { super(request); } } protected String encoding=null; public void destroy() { //销毁 // TODO Auto-generated method stub this.encoding=null; } //对编码问题进行转换 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub response.setContentType("text/html;charset="+encoding); //过滤未登录用户 HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; String path=req.getServletPath(); String param=req.getQueryString(); if(path!=null){ path=path+"?"+param;//全请求路径 } if(path.endsWith("myAddress")||path.endsWith("myJingDong")||path.indexOf("myShouCang")!=-1||path.endsWith("updateUser")||path.indexOf("showOrder")!=-1||path.indexOf("showValidOrder")!=-1||path.indexOf("showCancelOrder")!=-1||path.indexOf("fillOrder")!=-1){ HttpSession session = req.getSession(); String userName = (String) session.getAttribute("username"); if(userName == null){ session.setAttribute("url", path.replaceFirst("/", "")); System.out.println(session.getAttribute("url")); resp.sendRedirect("user.do?op=loginAction"); return; } } //把过滤器给下一个过滤器或资源处理器 chain.doFilter(new MyRequest((HttpServletRequest) request), response); } public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub this.encoding=filterConfig.getInitParameter("encoding");//encoding在web.xml中指定 } }