IT Band of Brothers JavaWeb tutorials filter 3

Filter Case: character encoding filter

In JavaWeb program development, because the Web container used encoding format does not support Chinese character sets, so deal with the browser requests the Chinese data will be garbled phenomenon.

6fb06ba3acb54a0a94adecf884784aad.png

3 No character encoding filter


As can be seen from the figure, since the use of the Web container ISO-8859-1 encoding format, also used ISO-8859-1 encoding format in the Web service application processing, although the request submitted by the browser using the Chinese encoding format UTF-8, but after ISO-8859-1 encoding processing business, there will still be Chinese garbled phenomenon. The solution to this problem is very simple, re-enactment Chinese character set can be encoded in the business process. In the actual development process, if the Chinese character set encoding specified by each business process, the operation is too cumbersome, and easy to miss the character encoding settings in one business; if the character encoding to process through the filter, it is simple and can be done foolproof, as shown in FIG.

a52a29e13b1c462aab7485bab5e50c80.png

FIG 4 using character encoding filter


Character encoding filter is deployed in a Web application in the future, even if the encoding format Web container does not support Chinese, but every time the browser requests will be transcoded through the filter, so ,, you can completely avoid Chinese garbled produce.

The following case book information to add functionality to achieve, and create a character encoding filters, to avoid Chinese garbled phenomenon.

● Create a character encoding filter object whose name is CharactorFilter class. Javax.servlet.Filter class implements the interface, and set the request in the doFilter character encoding format () method. code show as below:

package com.xdl.filter;

import javax.servlet.*;

import java.io.IOException;

public class CharactorFilter implements Filter {

private String encoding = null;

@Override

    public void init(FilterConfig filterConfig) throws ServletException {

        encoding = filterConfig.getInitParameter("encoding");

    }

    @Override

    public void doFilter(ServletRequest request, ServletResponse response,

           FilterChain chain) throws IOException, ServletException {

        if(encoding != null){

            request.setCharacterEncoding("UTF-8");

            response.setContentType("text/html;charset=utf-8");

        }

        chain.doFilter(request,response);

    }

    @Override

    public void destroy() {

        encoding = null;

    }

}

CharactorFilter类是实例中的字符编码过滤器,它主要通过在doFilter()方法中,指定request与response两个参数的字符集encoding进行编码处理,使得目标资源的字符集支持中文。其中,encoding是CharactorFilter类定义的字符编码格式成员变量,该变量在过滤器的初始化方法init()中被赋值,它的值是通过FilterConfig对象读取配置文件中的初始化参数获取的。

在创建了过滤器对象之后,还需要对过滤器进行一定的配置才可以正常使用。过滤器CharactorFilter的配置代码如下:

<filter>

    <filter-name>CharactorFilter<.filter-name>

    <filter-class>com.xdl.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的类,该类继承HttpServlet,是处理添加图书信息请求的Servlet对象,代码如下:

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

public class AddServlet extends HttpServlet {

    @Override

    protected void service(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();

    }

}

AddServlet的类主要通过service()方法实现添加图书信息请求的处理,其处理方法是将获取的图书信息数据直接输出到页面中。

在编写了Servlet类后,还需要在web.xml文件中对Servlet进行配置,其配置代码如下:

<servlet>

        <servlet-name>AddServlet</servlet-name>

        <servlet-class>com.xdl.servlet.AddServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>AddServlet</servlet-name>

        <url-pattern>/AddServlet</url-pattern>

    </servlet-mapping>

●  创建名称为index.jsp的页面,它是程序中的主页,该页面主要用于放置添加图书信息的表单,其代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>添加图书信息</title>

</head>

<body>

<h1>添加图书信息</h1>

<form action="/AddServlet" method="post">

    图书编号:<input type="text" name="id"><br>

    图书名称:<input type="text" name="name"><br>

    图书作者:<input type="text" name="author"><br>

    Book Price: <input type = "text" name = "price"> <br>

    <input type="submit" value="提交">

    </form>

    </body>

</html>

After their completion index.jsp page, you can deploy the publisher, after the instance is running, will open the index.jsp page, shown in Figure 5.

ed3a0b069a244e969d299a921fc2d597.png

Figure 5 index.jsp


After adding the right book information, click the submit button, the effect shown in Figure 6.

40ef0cc123eb432c91b8bf189550759b.png

FIG 6 AddServlet generated HTML page


Guess you like

Origin blog.51cto.com/14311187/2403063