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 阅读(526)
评论(0) 编辑 收藏