字符编码过滤器以及Servlet实践

来源:互联网 发布:淘宝账号管理在哪 编辑:程序博客网 时间:2024/05/21 05:21

在JavaWeb程序开发中,由于Web容器内部所使用的编码格式并不支持中文字符集,web容器使用了ISO-8859-1的编码格式,所以会出现乱码,我们可以通过过滤器来处理字符编码。


CharactorFilter:

package com.home.web.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;/** *  * @description 字符编码过滤器 * @author fj * @createTime 2017年2月24日 */public class CharactorFilter implements Filter {    private String encoding = null;    @Override    public void destroy() {        encoding = null;    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        if (encoding != null) {            request.setCharacterEncoding(encoding);            response.setContentType("text/html;charset=" + encoding);        }        chain.doFilter(request, response);    }    @Override    public void init(FilterConfig filterConfig) throws ServletException {        encoding = filterConfig.getInitParameter("encoding");    }}

过滤器配置:

<filter><filter-name>CharactorFilter</filter-name><filter-class>com.home.web.filter.CharactorFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>CharactorFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

这里设置为应用于所有请求


AddServlet:

package com.home.web.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;/** * Servlet implementation class AddServlet */public class AddServlet extends HttpServlet {private static final long serialVersionUID = 1L;           /**     * @see HttpServlet#HttpServlet()     */    public AddServlet() {        super();    }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doPost(request, response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        PrintWriter out = response.getWriter();        // 获取页面参数        String id = request.getParameter("id");        String name = request.getParameter("name");        String author = request.getParameter("author");        String price = request.getParameter("price");        // 输出图书信息        out.print("<h2> 图书馆信息添加成功</h2><hr>");        out.print("图书编号:" + id + "<br>");        out.print("图书名称:" + name + "<br>");        out.print("作者:" + author + "<br>");        out.print("价格:" + price + "<br>");        out.flush();        out.close();}}

servlet配置:

<servlet><servlet-name>AddServlet</servlet-name><servlet-class>com.home.web.servlet.AddServlet</servlet-class></servlet><servlet-mapping><servlet-name>AddServlet</servlet-name><url-pattern>/AddServlet</url-pattern></servlet-mapping>

这里也可以使用注解配置,在AddServlet类前面加上@WebServlet("/AddServlet")注解


接下来就是页面了,建立一个index.jsp页面,用于添加图书信息:

<%@page import="java.net.URLDecoder"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>起始页</title></head><body><form action="AddServlet" method="post"><table align="center" border="1" width="350"><tr><td class="2" align="center" colspan="2"><h2>添加图书信息</h2></td></tr><tr><td align="right">图书编号:</td><td><input type="text" name="id"></td></tr><tr><td align="right">图书名称:</td><td><input type="text" name="name"></td></tr><tr><td align="right">作 者:</td><td><input type="text" name="author"></td></tr><tr><td align="right">价 格:</td><td><input type="text" name="price"></td></tr><tr><td class="2" align="center" colspan="2"><input type="submit"value="添   加"></td></tr></table></form></body></html>


0 0