将servlet映射到希伯来语(UTF-8)URL模式

时间:2016-03-09 13:28:32

标签: java tomcat servlets netbeans utf-8

我在Windows操作系统上。 使用tomcat 8。 IDE - Netbeans 8。 JDK1.8.0_05

我正在尝试为某些servlet指定希伯来语url模式。 (我已经通过设置Urlpattern注释的@webservlet属性并放入web.xml文件来尝试了这两种方法。

希伯来语映射不起作用。 我检查Tomcat运行时的映射是什么样的(通过使用JConsole的MBeans选项卡),希伯来语url显示为乱码(特别是问号)。

我试过了:

  • 将-J-Dfile.encoding = UTF-8添加到netbeans.conf文件中。
  • 将Windows区域设置更改为希伯来语。
  • 在模式中使用URLE编码的url版本(在JConsole中也显示为乱码符号)。
  • 还尝试将其编码形式的URL输入地址栏(例如:localhost:8080 / test /%D7%A2%D7%91)。
  • 检查记事本中Servlet文件的编码,它们保存为UTF-8(在此列表中描述的第一次更改之后)。
  • 我对所有url模式(即:“/ *”)都有一个过滤器,它将请求的字符编码设置为UTF-8(也尝试了Apache的SetCharacterEncodingFilter

有关如何使用tomcat,netbeans,java,windows setup映射到希伯来语(UTF-8)网址的任何建议?

感谢。

2 个答案:

答案 0 :(得分:0)

您需要配置应用程序服务器以在utf-8中编码请求参数。由于您使用的是Tomcat,因此可以在conf / server.xml文件中设置URIEncoding="UTF-8"。这是它应该是什么样子:

<Connector port="8080" maxHttpHeaderSize="8192"
 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
 .......
 URIEncoding="UTF-8"
/>

答案 1 :(得分:-1)

请按照以下步骤操作:

  1. 编写一个Charset过滤器,用于控制所有请求和响应:
    参考:https://github.com/edendramis/freemarker-example/blob/master/src/main/java/com/edendramis/config/CharsetFilter.java

    if(amendments == '1') {
       ...
    } else if (amendments == '2') {
       ...
    }
    
  2. 将此过滤器添加到web.xml

     package charsetFilter.classes;
    
     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;
    
    public class CharsetFilter implements Filter{
        private String encoding;
    
        public void init(FilterConfig config) throws ServletException{
                encoding = config.getInitParameter("requestEncoding");
                if( encoding==null ) encoding="UTF-8";
        }
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain       next)
        throws IOException, ServletException{
            // Respect the client-specified character encoding
            // (see HTTP specification section 3.4.1)
                if(null == request.getCharacterEncoding())
                request.setCharacterEncoding(encoding);
                /**
            * Set the default response content type and encoding
            */
            response.setContentType("text/html; charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
                next.doFilter(request, response);
        }
    
            public void destroy(){}
    }`
    
  3. 写一些HTML代码,例如:

  4. <filter> <filter-name>CharsetFilter</filter-name> <filter-class>charsetFilter.classes.CharsetFilter</filter-class> <init-param> <param-name>requestEncoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharsetFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

    1. 在servlet中使用以下内容:

      <?xml version="1.0" encoding="UTF-8"?>
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
              <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
                 <head>
                     <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
    2. 获取字符串:
      request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); response.setCharacterEncoding("UTF-8");

    3. 对于网址:

      String input = new String(request.getParameter("foo").getBytes("iso-8859-1"), "utf-8");
      String input = URLDecoder.decode(request.getParameter("keyWord"), "UTF-8");
      System.out.println(input);

      干杯!!