java - 在远程服务器中抓取的 Hibernate 输出汉字

标签 java linux hibernate spring-mvc tomcat7

我在 springmvc 中创建了一个应用程序界面并使用@Pathvariable 来接受用户的输入,这是我的@Controller 代码片段:

@RequestMapping(value = "/getFirst/{var}", method = RequestMethod.GET)
public @ResponseBody String getFirst(@PathVariable String var){
    String fr = "select * from Food f where f.resname like '%" + var + "%'";
    List<Site> siteList = siteService.findBySQL(fr);
    Site first = siteList.get(0);
    return first.getSrc();
}

在这里,我将我的应用程序部署到本地 tomcat 服务器并输入 url http://localhost:8080/springmvc/getFirst/鸡排 并正常得到结果。

但是当我将应用程序部署到远程 tomcat 服务器并键入相同的参数 http://xxx.xx.xx.xxx:8080/springmvc/getFirst/鸡排 并得到以下异常:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
java.util.ArrayList.rangeCheck(ArrayList.java:635)
java.util.ArrayList.get(ArrayList.java:411)
cn.crabime.StudentController.getFirst(StudentController.java:99)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
cn.crabime.filter.FoodFilter.doFilter(FoodFilter.java:22)

首先,我认为可能是汉字编码的问题,但我已经定义了一个FoodFilter来拦截输入的url,发现汉字已经被编码了。

其次,我以为是hibernate在处理汉字问题,但是可以看到本地服务器正常,应该不是。但我印象最深的地方,在使用本地服务器时,IntelliJ idea 正常输出hibernate生成的sql语句,汉字没有抓取,但是在远程服务器上是这样的:

    当前用户请求的url为http://139.129.229.46:8080/springmvc/getFirst/%E9%B8%A1%E6%8E%92
last slice is :鸡排
Hibernate: select * from Food f where f.resname like '%鸡æ%'

但我不知道为什么?

最佳答案

好的,这个问题自己解决了,here is an article about tomcat dealing with chinese character garbled issue .只是因为tomcat默认的字符编码是iso-8859-1,这样的编码方式会导致汉字乱码,所以到远程tomcat服务器的conf文件夹中修改这样的片段:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
            maxThreads="2000"
            minSpareThreads="100"
            maxSpareThreads="1000"
            acceptCount="1000"
            URIEncoding="UTF-8" />

注意:URIEncoding必须指定为'UTF-8'。

关于java - 在远程服务器中抓取的 Hibernate 输出汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39785668/

相关文章:

c - 监控 CPU 温度增量 T 内核模块

linux - 低功耗蓝牙 : Passive Scan - but do not loop forever?

linux - 检查包更新后文件是否会更改

java - NonUniqueObjectException - 具有相同标识符值的不同对象已与 session 关联

java - 事件监听器 hibernate 5

java - Hibernate 单向@ManyToMany

java - Google 服务位置 API Android Studio

java - Maven 额外源通配符

java - Android使用java代码从drawable加载图像

Java,写自己的字符串拆分方法