博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化
阅读量:7230 次
发布时间:2019-06-29

本文共 18991 字,大约阅读时间需要 63 分钟。

  其实学习框架,就是为了可以很好的很快的完成我们的需求,而学习struts2只是为了替代之前用的servlet这一层,框架使开发更加简单,所以作为一个小菜鸟,特别感谢那些超级无敌变态开发的框架供我们使用,当然说那些使超级无敌变态并不是说他们很变态,是他们的思想太强大了。

  言归正传,这次使用的拦截器是struts2框架的核心之处,希望学习struts2框架的小伙伴重视起来哦。一起共勉。


 1:第一步依旧是导包哦,使用别人的框架,第一步,就记住导入自己使用的核心包即可。

2:配置web.xml过滤器,这些都是死东西,记住会写即可。

1 
2
3
struts2_login20170307
4
5
index.html
6
index.htm
7
index.jsp
8
default.html
9
default.htm
10
default.jsp
11
12 13
14
15
16
struts2
17
18
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
19
20
21
22
struts2
23
24
/*
25
26

3:第三步,想要登陆就必须设计号数据表,当然你首先要设计好数据库。字段如下所示:

4:设计好数据表之后就可以创建实体类User.java,源码如下所示:

1 package com.bie.po; 2  3 import java.io.Serializable; 4  5 /**  6 * @author BieHongLi  7 * @version 创建时间:2017年3月5日 上午9:40:09  8 *  9 */10 public class User implements Serializable{11 12     private static final long serialVersionUID = 1L;13     private Integer id;14     private String name;15     private String password;16     private String email;17     private String phone;18     public Integer getId() {19         return id;20     }21     public void setId(Integer id) {22         this.id = id;23     }24     public String getName() {25         return name;26     }27     public void setName(String name) {28         this.name = name;29     }30     public String getPassword() {31         return password;32     }33     public void setPassword(String password) {34         this.password = password;35     }36     public String getEmail() {37         return email;38     }39     public void setEmail(String email) {40         this.email = email;41     }42     public String getPhone() {43         return phone;44     }45     public void setPhone(String phone) {46         this.phone = phone;47     }48     @Override49     public String toString() {50         return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone51                 + "]";52     }53     54     55 }

5:完成了实体类,就可以如以前学习的那样,写dao层,service层,当然servlet层被action层替换了。这里先写dao层吧,首先创建工具类BaseDao.java,源码如下所示:

package com.bie.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ResourceBundle;/** * @author BieHongLi * @version 创建时间:2017年3月5日 上午9:32:14 * 数据交互层dao层*/public class BaseDao {    private static String driver="com.mysql.jdbc.Driver";    private static String url="jdbc:mysql:///test";    private static String user="root";    private static String password="123456";        /***     * 连接数据库的方法     * @return     * @throws ClassNotFoundException     * @throws SQLException     */    public static Connection getCon() throws ClassNotFoundException, SQLException{        Class.forName(driver);//加载数据库驱动        System.out.println("测试加载数据库成功");        Connection con=DriverManager.getConnection(url, user, password);        System.out.println("测试数据库链接成功");        return con;    }        /***     * 关闭数据库的方法     * @param con     * @param ps     * @param rs     */    public static void close(Connection con,PreparedStatement ps,ResultSet rs){        if(rs!=null){
//关闭资源,避免出现异常 try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(ps!=null){ try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /*** * 同意增删改的方法 * @param sql * @param arr * @return */ public static boolean addUpdateDelete(String sql,Object[] arr){ Connection con=null; PreparedStatement ps=null; try { con=BaseDao.getCon();//第一步 :连接数据库的操作 ps=con.prepareStatement(sql);//第二步:预编译 //第三步:设置值 if(arr!=null && arr.length!=0){ for(int i=0;i
0){ return true; }else{ return false; } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public static void main(String[] args) { try { BaseDao.getCon(); System.out.println("测试数据库链接成功"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

6:建议再创建一个工具类,过滤编码的UTFFilter.java

1 package com.bie.dao; 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 import javax.servlet.annotation.WebFilter;12 import javax.servlet.http.HttpServletRequest;13 14 /** 15 * @author BieHongLi 16 * @version 创建时间:2017年2月21日 上午11:08:49 17 * 18 */19 @WebFilter("/*")20 public class UTFFilter implements Filter{21 22     @Override23     public void destroy() {24         // TODO Auto-generated method stub25         26     }27 28     @Override29     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 30             FilterChain filterChain)throws IOException, ServletException {31         //将servletRequest转发为HttpServletRequest32         HttpServletRequest request=(HttpServletRequest)servletRequest;33         request.setCharacterEncoding("utf-8");34         filterChain.doFilter(servletRequest, servletResponse);35     }36 37     @Override38     public void init(FilterConfig arg0) throws ServletException {39         // TODO Auto-generated method stub40         41     }42     43 44 }

7:接着写service层的接口和实现类;

1 package com.bie.dao; 2  3 import java.util.List; 4  5 import com.bie.po.User; 6  7 /**  8 * @author BieHongLi  9 * @version 创建时间:2017年3月5日 上午9:39:21 10 * 11 */12 public interface UserDao {13 14     /***15      * 登陆的方法16      * @param user17      * @return18      */19     public User selectLogin(User user);20     21     /***22      * 用户查询的方法23      * @param sql24      * @param arr25      * @return26      */27     public List
selectUser(String sql,Object[] arr);28 }
1 package com.bie.dao.impl;  2   3 import java.sql.Connection;  4 import java.sql.PreparedStatement;  5 import java.sql.ResultSet;  6 import java.sql.SQLException;  7 import java.util.ArrayList;  8 import java.util.List;  9  10 import com.bie.dao.BaseDao; 11 import com.bie.dao.UserDao; 12 import com.bie.po.User; 13  14 /**  15 * @author BieHongLi  16 * @version 创建时间:2017年3月5日 上午9:39:35  17 *  18 */ 19 public class UserDaoImpl implements UserDao{ 20  21     @Override 22     public User selectLogin(User user) { 23         Connection con=null; 24         PreparedStatement ps=null; 25         ResultSet rs=null; 26         try { 27             con=BaseDao.getCon();//1:获取数据库的连接 28             //2:书写sql语句 29             String sql="select * from user where name=? and password=? "; 30             ps=con.prepareStatement(sql);//3:预编译 31             //4:设置值 32             ps.setString(1, user.getName()); 33             ps.setString(2, user.getPassword()); 34             rs=ps.executeQuery();//5:执行sql语句 35             User users; 36             if(rs.next()){ 37                 users=new User(); 38                 //从数据库中获取值设置到实体类的setter方法中 39                 users.setId(rs.getInt("id")); 40                 users.setName(rs.getString("name")); 41                 users.setPassword(rs.getString("password")); 42                 users.setEmail(rs.getString("email")); 43                 users.setPhone(rs.getString("phone")); 44                 //user.setIsAdmin(rs.getString("isAdmin")); 45                  46                 //return user; 47             } 48         } catch (ClassNotFoundException e) { 49             e.printStackTrace(); 50         } catch (SQLException e) { 51             e.printStackTrace(); 52         }finally{ 53             //关闭资源,避免出现异常 54             BaseDao.close(con, ps, rs); 55         } 56         return user; 57     } 58  59     @Override 60     public List
selectUser(String sql, Object[] arr) { 61 Connection con=null; 62 PreparedStatement ps=null; 63 ResultSet rs=null; 64 try { 65 con=BaseDao.getCon();//第一步连接数据库 66 ps=con.prepareStatement(sql);//第二步:预编译 67 if(arr!=null){ 68 for(int i=0;i
list=new ArrayList
(); 75 while(rs.next()){ 76 User user=new User(); 77 user.setId(rs.getInt("id")); 78 user.setName(rs.getString("name")); 79 user.setPassword(rs.getString("password")); 80 user.setEmail(rs.getString("email")); 81 user.setPhone(rs.getString("phone")); 82 83 //System.out.println(user);//测试数据 84 list.add(user); 85 } 86 return list; 87 } catch (ClassNotFoundException e) { 88 e.printStackTrace(); 89 } catch (SQLException e) { 90 e.printStackTrace(); 91 }finally{ 92 //关闭资源,避免出现异常 93 BaseDao.close(con, ps, rs); 94 } 95 96 return null; 97 } 98 99 100 }

8:接着写service层的接口和实现类,接口UserService.java和实现类UserServiceImpl.java;

1 package com.bie.service; 2  3 import java.util.List; 4  5 import com.bie.po.User; 6  7 /**  8 * @author BieHongLi  9 * @version 创建时间:2017年2月23日 下午1:58:59 10 * 11 */12 public interface UserService {13 14     /***15      * 用户查询的信息16      * @param user17      * @return18      */19     public List
selectUser(User user);20 21 /***22 * 用户登陆的功能23 * @param user24 * @return25 */26 public User login(User user);27 }
1 package com.bie.service.impl; 2  3 import java.util.ArrayList; 4 import java.util.List; 5  6 import com.bie.dao.UserDao; 7 import com.bie.dao.impl.UserDaoImpl; 8 import com.bie.po.User; 9 import com.bie.service.UserService;10 11 /** 12 * @author BieHongLi 13 * @version 创建时间:2017年2月23日 下午1:59:36 14 * 15 */16 public class UserServiceImpl implements UserService{17 18     private UserDao dao=new UserDaoImpl();19     20     @Override21     public List
selectUser(User user) {22 //sql语句23 //String sql="select * from user ";24 StringBuilder sql=new StringBuilder("select * from user where 1=1 ");25 List
list=new ArrayList();26 if(user!=null){27 //按照姓名查询28 if(user.getName()!=null && !user.getName().equals("")){29 sql.append(" and name = ? ");30 list.add(user.getName());31 }32 //按照email查询33 if(user.getEmail()!=null && !user.getEmail().equals("")){34 sql.append(" and email = ? ");35 list.add(user.getEmail());36 }37 38 }39 return dao.selectUser(sql.toString(), list.toArray());40 }41 42 43 @Override44 public User login(User user) {45 if(user!=null && user.getName()!=null && user.getPassword()!=null){46 return dao.selectLogin(user);47 }48 return null;49 }50 51 52 }

9:开始写登陆页面login.jsp页面和用户信息显示list.jsp页面

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3  4  5  6 
7 登陆的页面 8 9 10 11
12 账号:
13 密码:
14
15 16
17 18
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3 <%@ taglib prefix="s" uri="/struts-tags"%> 4  5  6  7 
8 信息列表展示的页面 9 10 11 12
22
13
14
15
16
17
18
19
20 21
23
26
29
32
35
38
39 40 41 42
编号 姓名 密码 邮件 电话
24
25
27
28
30
31
33
34
36
37
43 44 45

10:登陆页面点击登陆就到了struts.xml页面,struts.xml页面会到action页面,所以现在写struts.xml页面的源码;

1 
2 5 6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 21
22
23
error.jsp
24
25 26
27
31
35 36 37
38
login.jsp
39 40
41
user_list
42 43
44
list.jsp
45
46
47

11:struts.xml页面的action会和UserAction.java的方法进行匹配,所以现在写UserAction.java,然后就可以完成登陆功能;

1 package com.bie.action; 2  3 import java.util.List; 4  5 import com.bie.po.User; 6 import com.bie.service.UserService; 7 import com.bie.service.impl.UserServiceImpl; 8 import com.opensymphony.xwork2.ActionContext; 9 import com.opensymphony.xwork2.ActionSupport;10 11 /** 12 * @author BieHongLi 13 * @version 创建时间:2017年3月7日 上午10:31:34 14 * 15 */16 public class UserAction extends ActionSupport{17 18     private static final long serialVersionUID = 1L;19     //----------1:封装请求数据------------20     private User user;21     public User getUser() {22         return user;23     }24     public void setUser(User user) {25         this.user = user;26     }27     //-----------2:调用service方法------------28     private UserService service=new UserServiceImpl();29     30     //-----------3:登陆的action方法----------------------31     public String login() throws Exception {32         try {33             User userInfo=service.login(user);34             //判断,如果为空,返回失败input35             if(userInfo==null){36                 //登录失败37                 return "input";38             }39             //如果登陆成功,数据保存到session中40             ActionContext.getContext().getSession().put("userInfo", "userInfo");41             42             return "loginSuccess";43         } catch (Exception e) {44             return "ERROR";45         }46     }47     48     //-----------4:列表,处理显示数据的方法-------------49     public String list(){50         try {51             //查询全部52             List
list=service.selectUser(user);53 //保存到request中54 ActionContext.getContext().getContextMap().put("listUser", list);55 56 return "list";57 } catch (Exception e) {58 return "ERROR";59 }60 }61 62 }

12:最后就再创建一个包interceptor包,这里面写过滤器,这是过滤器的核心,也是struts2的核心技术,所以需要重点掌握哦;源码如下所示:(注意:UserCheckInterceptor会和struts.xml的过滤器配置进行交互,最后完成拦截器的功能)

1 package com.bie.interceptor; 2  3 import com.opensymphony.xwork2.ActionContext; 4 import com.opensymphony.xwork2.ActionInvocation; 5 import com.opensymphony.xwork2.ActionProxy; 6 import com.opensymphony.xwork2.interceptor.AbstractInterceptor; 7  8 /**  9 * @author BieHongLi 10 * @version 创建时间:2017年3月7日 下午1:28:00 11 * 拦截业务处理方法12 */13 public class UserCheckInterceptor extends AbstractInterceptor{14 15     16     private static final long serialVersionUID = 1L;17     18     //步骤:1:首先拿到当前执行的方法名,2:然后进行判断 ,只要当前方法名不是login,就需要进行验证19     @Override20     public String intercept(ActionInvocation invocation) throws Exception {21         //获取ActionContext对象22         ActionContext ac=invocation.getInvocationContext();23         //获取action对象的代理对象24         ActionProxy proxy=invocation.getProxy();25         //获取当前执行的方法名26         String methodName=proxy.getMethod();27         //判断是否登陆28         if(!"login".equals(methodName)){29             //先获取当前登陆的用户30             Object obj=ac.getSession().get("userInfo");31             if(obj == null){32                 //当前用户没有登陆33                 return "input";34             }else{35                 //当前用户有登陆36                 return invocation.invoke();37             }38         }else{39             //当前用户正在登陆40             return invocation.invoke();41         }42     }43 44     45 }

演示效果如下所示:

革命尚未成功,拦截器我都学会了,努力!!!

13:Struts2的国际化:

第一,创建配置文件中文msg.properties文件,配置如下:

username=\u8D26\u53F7password=\u5BC6\u7801submit=\u63D0\u4EA4title=\u6807\u9898

 第二,创建配置文件英文msg_en_US.properties文件,配置如下所示:

username=UserNamepassword=Passwordsubmit=OnSubmittitle=Title

然后找到default.properties搜索i18n:找到struts.custom.i18n.resources复制到配置文件上:

error.jsp
login.jsp
admin_list
/WEB-INF/list.jsp

然后去jsp页面开始使用struts2的国际化,使用如<s:text name="title"></s:text>:

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3 <%@ taglib prefix="s" uri="/struts-tags"%> 4  5  6  7 
8
9 <s:text name="title"></s:text>10 11 12 13
14 账号:
15 密码:
16
17 18
19 20 21

 

 

 

 

 

 

转载地址:http://mtdfm.baihongyu.com/

你可能感兴趣的文章
Delphi listview 点击列头排序
查看>>
android preference page
查看>>
mysql索引挑选
查看>>
关于冰岛足球的段子
查看>>
在 Windows 中安装 Laravel 5.1.X
查看>>
TeamViewer 9发布-在Linux下安装运行
查看>>
Centos7 Gitea安装教程 - 一款易搭建,运行快的Git服务器
查看>>
CentOS minimal 网络配置
查看>>
Nginx架构
查看>>
为什么结构体中的数组不能用const int变量指定大小?
查看>>
模板特化疑问
查看>>
ruby多线程理解
查看>>
享用甜点时要不要来杯咖啡?Java 与树莓派 (Raspberry PI)
查看>>
精通Oracle 10g Pl/SQL编程
查看>>
邱怡轩:R中大规模矩阵的SVD与矩阵补全
查看>>
C++ Primer习题集(第5版)
查看>>
centos7 mysql 5.7 yum安装
查看>>
JSOUP简单应用
查看>>
Mysql,SqlServer,Oracle主键自动增长的设置
查看>>
开源 java CMS - FreeCMS2.3会员登录
查看>>