随笔 - 5  文章 - 4  trackbacks - 0

留言簿

文章分类(2)

文章档案(7)

搜索

  •  

最新评论

12月23日
----------------
解决字符问题

解决字符问题主要是程序中要用到的字符保持统一的字符编码,现在以utf-8为例子


jsp中:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/MyTestServletApp/codingServlet" method="post">
<div>
姓名
<input type="text" name="name" value="utf中文字符">
</div>
<div>
密码
<input type="text" name="pass" value="hellokitty">
</div>
<input type="submit" value="提交" >

</form>
</body>
</html>

 

servlet中:

package testcharactercoding;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class for Servlet: codingServlet
 *
 */
public class codingServlet extends javax.servlet.http.HttpServlet implements
  javax.servlet.Servlet {
 /*
  * (non-Java-doc)
  *
  * @see javax.servlet.http.HttpServlet#HttpServlet()
  */
 public codingServlet() {
  super();
 }

 /*
  * (non-Java-doc)
  *
  * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
  *      HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
 }

 /*
  * (non-Java-doc)
  *
  * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
  *      HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub

  /* 用于请求和响应的字符编码的设置,一定要在请求前进行设置 */
  request.setCharacterEncoding("UTF-8");
  response.setContentType("text/html;charset=UTF-8");
     response.setCharacterEncoding("UTF-8");
  
  String nameValue = (String) request.getParameter("name");
  String passValue = (String) request.getParameter("pass");

  /*
   * 或者这样转换
   * try {
   nameValue = new String(nameValue.getBytes("ISO8859_1"),"UTF-8");
  } catch (UnsupportedEncodingException ex) {
   ex.printStackTrace();
  }*/

  PrintWriter out = response.getWriter();

  out.println("<html>");
  
  System.out.println(nameValue);
  out.println(nameValue);
  System.out.println(passValue);
  out.println(passValue);
  out.println("<br>测试结束!");
  out.print("</html>");
 }
}

也可以通过创建一个 filter来转换
映射 /*

package filter;

import java.io.IOException;

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.*;

public class CharCodingFilter implements Filter {

 public void init(FilterConfig arg0) throws ServletException {
  // TODO 自动生成方法存根
  
     System.out.println("CharCodingFilter init!");
 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  // TODO 自动生成方法存根
  
 request.setCharacterEncoding("UTF-8");
 response.setContentType("text/html;charset=UTF-8");
     response.setCharacterEncoding("UTF-8");
     
 /*// 是否能通过这样  去除ie缓存
        HttpServletResponse httpRes = (HttpServletResponse)response;
     httpRes.setHeader("Pragma","No-cache");
     httpRes.setHeader("Cache-Control","no-cache");
     httpRes.setDateHeader("Expires", 0);*/
     
 chain.doFilter(request,response);
 }

 public void destroy() {
  // TODO 自动生成方法存根

  System.out.println("CharCodingFilter destroy!");
 }

}

 

在web应用程序中处理异常
-------------------------
        <servlet>
  <description></description>
  <display-name>ThrowError</display-name>
  <servlet-name>ThrowError</servlet-name>
  <servlet-class>erroexception.ThrowError</servlet-class>
 </servlet>
 <servlet>
  <description></description>
  <display-name>ServletExceptionErro</display-name>
  <servlet-name>ServletExceptionErro</servlet-name>
  <servlet-class>
   erroexception.ServletExceptionErro
  </servlet-class>
 </servlet>
 <servlet>
  <description></description>
  <display-name>Error404</display-name>
  <servlet-name>Error404</servlet-name>
  <servlet-class>erroexception.Error404</servlet-class>
 </servlet>
       
 
 <error-page>
  <error-code>404</error-code>
  <location>/Error404</location>
 </error-page>
 <error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/ErrorGen</location>
 </error-page>
 <error-page>
  <exception-type>javax.servlet.ServletException</exception-type>
  <location>/ServletExceptionErro</location>
 </error-page>

//抛出的ServletException异常,如果没有该异常的处理,则会被 ErrorGen 进行处理

 

ErrorGen.java //在tomcat调试下,该文件的大小应该大于512k

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Throwable throwable = (Throwable)request.getAttribute("javax.servlet.error.excepion");
  PrintWriter out = response.getWriter();
  out.println("message:"+(String)request.getAttribute("javax.servlet.error.message"));
  out.println("<br>request_uri:"+(String)request.getAttribute("javax.servlet.error.request_uri"));
  out.println("<br>status_code:"+((Integer)request.getAttribute("javax.servlet.error.status_code")).toString());
  out.println("<br>servlet_name:"+(String)request.getAttribute("javax.servlet.error.servlet_name"));
     out.println("<br>512k 512k 512k 512k 512k 512k 512k 512k 512k 512k 512k 512k 512k ");
}

posted on 2006-12-24 02:38 googlor 阅读(519) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: