2016-03-09 69 views
4

我在Windows操作系統上。 使用Tomcat 8. IDE - Netbeans的8 JDK1.8.0_05將servlet映射到希伯來語(UTF-8)URL模式

我試圖要指定特定的servlet希伯來語URL模式。 (我已經通過設置@webservlet註釋的Urlpattern屬性並通過放置在web.xml文件中嘗試過)。

希伯來語映射不起作用。 我檢查Tomcat運行時的映射(通過使用JConsole的MBeans選項卡),並且希伯來語URL顯示爲亂碼(特別是問號)。

我曾嘗試:

  • 添加-J-指定-Dfile.encoding = UTF-8 netbeans.conf文件。
  • 將窗口語言環境更改爲希伯來語。
  • 在模式中使用URLEncoded版本的URL(這在JConsole中也顯示爲亂碼符號)。
  • 也嘗試在其地址欄中輸入其編碼形式的URL(例如:localhost:8080/test /%D7%A2%D7%91)。
  • 檢查記事本中的Servlet文件的編碼,它們保存爲UTF-8(在此列表中進行第一次更改後)。
  • 我對所有的URL模式過濾器(即:「/ *」),設置要求UTF-8字符編碼(也試過Apache的SetCharacterEncodingFilter

我如何能映射任何建議到一個希伯來語(UTF-8)的URL與Tomcat,NetBeans,Java,Windows安裝程序?

謝謝。

+0

嘗試配置Tomcat來了解UTF8(Defautl我認爲字符集= ISO-8859-1)http://stackoverflow.com/questions/138948/how-to-get- utf-8-working-in-java-webapps – simar

+0

也可以嘗試爲tomcat配置JVM。在startup.bat中設置-J-Dfile.encoding = UTF-8 – simar

回答

-1

遵循以下步驟:

  1. 寫字符集過濾器將控制所有的請求和響應:
    參考:https://github.com/edendramis/freemarker-example/blob/master/src/main/java/com/edendramis/config/CharsetFilter.java

    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(){} 
    }` 
    
  2. 添加此過濾器到web.xml

    <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> 
    
  3. 寫一些HTML代碼例如:

<?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' />

  • 使用以下在servlet:

    request.setCharacterEncoding("UTF-8"); 
    response.setContentType("text/html; charset=UTF-8"); 
    response.setCharacterEncoding("UTF-8"); 
    
  • 爲了得到字符串:
    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);

  • 網址:

    String str = "$ome UTF-8 text £900"; 
    String url = "http://your-domain.com/url?p=" + URLEncoder.encode(str, "UTF-8"); 
    

    乾杯!

    +0

    我編輯了問題。我也嘗試過(我已經有一個設置)設置一個過濾器來設置「HttpServletRequest」的字符編碼。 – theyuv

    +0

    您是否嘗試了其他列出的步驟? – Ghayel

    +0

    其餘部分處理顯示內容的字符編碼。沒有?不是URL。我的UTF-8內容顯示正常(包括查詢字符串)。 – theyuv

    0

    您需要配置您的應用程序服務器以在utf-8中編碼請求參數。由於您使用Tomcat,因此您的conf/server.xml文件中將設置URIEncoding="UTF-8"。下面是它應該是什麼樣子:

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

    在Tomcat 8中URIEncoding默認爲UTF-8 – theyuv

    +0

    如果服務器配置爲「嚴格servlet合規性」,則連接器的URIEncoding屬性的默認值爲「ISO-8859-1」,與之相同在老版本的Tomcat中。我猜測情況並非如此。仍然可能要確保org.apache.catalina.STRICT_SERVLET_COMPLIANCE系統屬性未設置爲true。 – mousa