用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - jsp代码库

(jsp与servlet)解决乱码问题的方式

2015-07-29 作者: 锋客举报

[jsp]代码库

package fengke.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 解决乱码问题的方式
 * @author 锋客
 *
 */
public class Character extends HttpServlet {
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        response.setContentType("text/html");
        this.doPost(request, response);
    }
 
     
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         
        response.setContentType("text/html");
        /*1.采用设置字符集的方式
         * request.setCharacterEncoding("utf-8");
         */
        /*2.设置过滤器 ====CoreFilter.java
         *   配置web.xml
         */
        /*
         * 3.采用转码的方式
         * String s = new String(request.getParameter("c").getBytes("ISO8859-1"),"UTF-8"); 
         */
         
        String s = request.getParameter("c");
        System.out.println(s);
    }
 
     
}
===============================================
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
     
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  <!-- 解决乱码问题 -->
  <body>
    <table>
    <form action="Character" method="post" >
    <tr>
    <td><input type="text" name="c" value="中国"></td>
    <td><input type="submit" value="提交"></td>
    </tr>
    </form>
    </table>
  </body>
</html>
=========================================================
<?xml version="1.0" encoding="UTF-8"?>
<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">
  <display-name>Character</display-name>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>Character</servlet-name>
    <servlet-class>fengke.servlet.Character</servlet-class>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>Character</servlet-name>
    <url-pattern>/Character</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- 
  <filter> 
   <filter-name>encodingFilter</filter-name> 
      <filter-class>fengke.filter.CoreFilter</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> 
      -->
</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中指定
    }
 
}

[源代码打包下载]




网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...