Struts1.x 中处理乱码及通过标签显示数据

时间:2022-10-14 22:02:13

1、通过filter解决乱码问题

   网页的请求到达之前,先要经过filter的处理;   

   提取数据出现乱码:request.setCharacterEncoding("UTF-8");

   返回数据出现乱码:response.setCharacterEncoding("UTF-8");

在Eclipse中创建过滤器两种方式:注解和xml

1)通过注解创建过滤器:

首先右键new一个filter,取名为 EncodingFilter,点击next,然后看到的如下图,配置url 为 /*

Struts1.x 中处理乱码及通过标签显示数据

Struts1.x 中处理乱码及通过标签显示数据

点击finish。

代码如下

 1 package util;
2
3 import java.io.IOException;
4 import javax.servlet.DispatcherType;
5 import javax.servlet.Filter;
6 import javax.servlet.FilterChain;
7 import javax.servlet.FilterConfig;
8 import javax.servlet.ServletException;
9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.annotation.WebFilter;
12
13 @WebFilter(dispatcherTypes = {
14 DispatcherType.REQUEST,
15 DispatcherType.FORWARD,
16 DispatcherType.INCLUDE,
17 DispatcherType.ERROR
18 }
19 , urlPatterns = { "/*" })
20 public class EncodingFilter implements Filter {
21
22 public void destroy() {}
23
24 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
25 request.setCharacterEncoding("UTF-8");
26 response.setCharacterEncoding("UTF-8");
27 chain.doFilter(request, response);//这句话也不能少
28 }
29
30 public void init(FilterConfig fConfig) throws ServletException {}
31
32 }
chain.doFilter(request, response); 表示执行完当前过滤器的操作之后,继续执行这条链条上的下一个过滤器,当然下一个过滤器也是有 doFilter() 这个方法的,直到执行完这一链条上的所有过滤器为止,记住当前过滤器只是链条上的一环。
OK,熟悉责任链模式的朋友应该知道是啥意思了。

2) 通过xml 配置方式
java 代码:

 1 package util;
2
3 import java.io.IOException;
4
5 import javax.servlet.Filter;
6 import javax.servlet.FilterChain;
7 import javax.servlet.FilterConfig;
8 import javax.servlet.ServletException;
9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11
12 public class EncodingFilter implements Filter {
13
14 public void destroy() {}
15
16 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
17 request.setCharacterEncoding("UTF-8");
18 response.setCharacterEncoding("UTF-8");
19 chain.doFilter(request, response);
20 }
21
22 public void init(FilterConfig fConfig) throws ServletException {}
23
24 }

web.xml中的配置

1   <filter>
2 <filter-name>EncodingFilter</filter-name>
3 <filter-class>util.EncodingFilter</filter-class>
4 </filter>
5 <filter-mapping>
6 <filter-name>EncodingFilter</filter-name>
7 <url-pattern>/*</url-pattern>
8 </filter-mapping>

OK.

2、通过标签显示数据(例子:userlist.jsp中显示所有用户)

  首先编写DAO代码

 1 /**
2 * 获取所有用户的信息
3 * @return 所有用户
4 */
5 public ArrayList<User> getUsers(){
6 ArrayList<User> users = new ArrayList<User>();
7 String sql = "select id,username,pwd from users";
8 Connection conn = DBLib.getConn();
9 try {
10 PreparedStatement pstmt = conn.prepareStatement(sql);
11 ResultSet set = pstmt.executeQuery();
12 while(set.next()){
13 User user = new User();
14 user.setId(set.getInt("id"));
15 user.setUserName(set.getString("username"));
16 user.setPwd(set.getString("pwd"));
17 users.add(user);
18 }
19 set.close();
20 pstmt.close();
21 } catch (SQLException e) {
22 e.printStackTrace();
23 } finally{
24 try {
25 conn.close();
26 } catch (SQLException e) {
27 e.printStackTrace();
28 }
29 }
30 return users;
31 }

  页面通过struts标签进行迭代输出:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8" import="dao.*" %>
3 <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
4 <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
6 <html>
7 <head>
8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
9 <title>Insert title here</title>
10 </head>
11 <body>
12 用户列表
13 <%
14 pageContext.setAttribute("list", new UserDAO().getUsers());
15 %>
16 <br/>
17 <br/>
18 <table>
19 <logic:iterate id="user" name="list">
20 <tr>
21 <td><bean:write name="user" property="userName"/></td>
22 <td><bean:write name="user" property="pwd"/></td>
23 </tr>
24 </logic:iterate>
25 </table>
26 <a href="main.jsp">返回主页面</a>
27 </body>
28 </html>

用到了logic标签进行迭代,bean标签进行打印。很多标签不熟,不知道,因为很多,到时候要用了再问度老师或古老师。

下面有个参考链接:http://www.cnblogs.com/go-onxp/archive/2012/09/18/2690157.html

  bean:用来创建bean、访问bean和访问bean的属性

  html:用来创建Struts输入表单;

  logic:用来进行逻辑判断、集合迭代和流程控制;

  nested:建立在前三个标签库的基础上,具有前三个标签库的所有功能,只是允许标签间的嵌套;

  tiles:用来创建tiles样式的页面。

  一般用bean和logic就够了。

代码链接:http://pan.baidu.com/s/1miTuwze 提取码:kpa5