Java 在Struts 2中启动服务器时,如何在action类中获取UTF-8文本?
我正在使用Hibernate通过Struts2开发一个web应用程序 但我有一个问题,当我启动服务器并加载网站时,我的加载方法将被调用。但是,它不能加载UTF-8,而不是Java 在Struts 2中启动服务器时,如何在action类中获取UTF-8文本?,java,jsp,utf-8,struts2,character-encoding,Java,Jsp,Utf 8,Struts2,Character Encoding,我正在使用Hibernate通过Struts2开发一个web应用程序 但我有一个问题,当我启动服务器并加载网站时,我的加载方法将被调用。但是,它不能加载UTF-8,而不是“Phương”我得到“Phơng”,但在JSP页面中仍然显示“Phơng”。因此,当我执行SQL查询时,它是(从主题为'%PH??NG PHÁP GIÁO D?C TR?%'的帖子中),因此我无法查询我的数据库 我的动作课在这里 public class PostsAction extends ActionSupport {
“Phương”
我得到“Phơng”
,但在JSP页面中仍然显示“Phơng”
。因此,当我执行SQL查询时,它是(从主题为'%PH??NG PHÁP GIÁO D?C TR?%'
的帖子中),因此我无法查询我的数据库
我的动作课在这里
public class PostsAction extends ActionSupport {
private List<HomeTopic> homeTopics = new ArrayList<HomeTopic>();
public List<HomeTopic> getHomeTopics() {
return homeTopics;
}
public void setHomeTopics(List<HomeTopic> homeTopics) {
this.homeTopics = homeTopics;
}
public void callHomeTopics(){
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction trans = session.beginTransaction();
String[] list = {"NEW – TIN TỨC TRẺ","Khu Vui Chơi Cho Trẻ","PHƯƠNG PHÁP GIÁO DỤC TRẺ","KỸ NĂNG – KINH NGHIỆM","Phòng Bệnh","Tập Tô Màu"};
for (int i = 0; i < list.length; i++) {
getTopics(session, trans, list[i]);
}
trans.commit();
session.close();
}
public void getTopics(Session session, Transaction trans, String type) {
String hql = "from Posts WHERE topics like '%" + type + "%'";
System.out.println("HQL: " + hql);
Query query = session.createQuery(hql);
query.setMaxResults(3);
List<Posts> t = (ArrayList<Posts>) query.list();
HomeTopic h = new HomeTopic(type, t);
System.out.println("List topics: " + type + " " + t);
homeTopics.add(h);
session.flush();
}
公共类PostsAction扩展了ActionSupport{
private List homeTopics=new ArrayList();
公共列表getHomeTopics(){
返回主页主题;
}
public void setHomeTopics(列出homeTopics){
this.homeTopics=homeTopics;
}
public void callHomeTopics(){
Session Session=HibernateUtil.getSessionFactory().openSession();
Transaction=session.beginTransaction();
字符串[]列表={“新建–TIN TỨC TRẺ","胡维奇巧ẻ","PHƯNG PHÁP GIÁO DỤC TRẺ","KỸ NĂNG–KINH NGHIỆM”,“Phòng Bệ新罕布什尔州ậpôMáu“};
for(int i=0;i
HomeTopics.java类
public class HomeTopic {
private String nameTopic;
private List<Posts> postList;
public List<Posts> getPostList() {
return postList;
}
public void setPostList(List<Posts> postList) {
this.postList = postList;
}
public HomeTopic(String nameTopic, List<Posts> postList) {
this.nameTopic = nameTopic;
this.postList = postList;
}
public HomeTopic() {
}
@Override
public String toString() {
return "HomeTopic{" + "nameTopic=" + nameTopic + ", postList=" + postList + '}';
}
public String getNameTopic() {
return nameTopic;
}
public void setNameTopic(String nameTopic) {
this.nameTopic = nameTopic;
}
}
公共类HomeTopic{
私有字符串名称主题;
私有列表postList;
公共列表getPostList(){
返回postList;
}
公共void setPostList(列表postList){
this.postList=postList;
}
公共HomeTopic(字符串名称Topic、列表postList){
this.nameTopic=nameTopic;
this.postList=postList;
}
公共主页主题(){
}
@凌驾
公共字符串toString(){
返回“HomeTopic{“+”nameTopic=“+nameTopic+”,postList=“+postList+”}”;
}
公共字符串getNameTopic(){
返回名称主题;
}
public void setNameTopic(字符串nameTopic){
this.nameTopic=nameTopic;
}
}
当我编写main方法进行测试时,它仍然显示UTF-8。但每当我启动服务器并在浏览器中调用callHomeTopics()
方法时,文本将是“PH??NG PHÁp GIÁO D?C TR?”
但在JSP页面中仍然显示“Phương Pháp Giáo D”ục Trẻ"代码>。
除了我的HQL查询,一切正常。对法语字符使用相应的utf代码,而不是直接使用它们。 比如说
use é for é
希望这有助于在JSP中正确显示对应编码的字符。您应该使用JSP
页面
指令并使用编码指定内容类型
<%@ page contentType="text/html;charset=UTF-8" %>
这将使用UTF-8编码在页面上显示字符。由于您(为了测试目的,我想)硬编码您的值,而不是从数据库或网页读取它们,因此您需要确保用于在页面中插入它们的IDE在UTF-8
中工作
在Eclipse中,转到窗口->首选项->常规->工作区->文本文件编码->其他->UTF-8
在打印到控制台时,也需要查看正确的值
当您从JSP或数据库读取值时,请注意字符编码,并确保使用
byte[] utf8Bytes = myString.getBytes("UTF-8");
用于编码,以及
String myString = new String(utf8Bytes, "UTF-8")
用于解码
在jsp页面中仍然显示UTF-8!jsp是一个java服务器页面,而不是编辑器中显示的页面。您从数据库中获得正确的结果吗?您的意思是系统在IDE或服务器控制台中打印错误的字符吗?您的第一部分还可以,但代码错误得可怕,我无法否决。您的代码即使在你链接的页面上,这个变量也被称为roundTrip
。那么第一部分应该是+1,第二部分应该是-1:D说真的,我不明白你的意思:它们显然是两段不同的代码,不要被唯一的代码格式块:/Ok,我现在明白了……行中使用的代码(往返)并不少见,尽管它没有任何用处,所以我假设您也犯了同样的错误。我编辑了它以使其更清楚,现在它应该是+1:)是的,可能是我的错误,没有完全清楚;)谢谢