Struts2 入门实例

一、最简登录 Demo:login.jsp——web.xml——struts.xml——LoginAction.java——struts.xml——index.jsp

1、下载 Struts2 框架:http://struts.apache.org/download.cgi 。目前最新版是 Struts 2.3.24。解压后找到 lib 文件夹,找到以下相关类库,待会复制到 Web 应用的 WEB-INF/lib 文件夹中。

 其中部分 jar 包的说明如下:

struts2-core-2.3.24.jar       // Struts 2 的核心库
xwork-core-2.3.24.jar         // WebWork 的核心库,需要它的支持
ognl-3.0.6.jar                     // OGNL 表达式语言,Struts 2 支持该 EL 表达式
freemarker-2.3.22.jar        // 表现层框架,定义了 Struts 2 的可视组件主题
commons-logging-1.1.3.jar     // 日志管理
commons-fileupload-1.3.1.jar // 文件上传与下载

2、打开 Eclipse,File——New——Dynamic Web Project,Project Name 输入 UserManage,Next,Next,勾选“Generate web.xml deployment descriptor”,Finish。

3、把第一步找到的 Struts 相关 jar 文件拷贝到 WebContent/WEB-INF/lib 下。

4、在 web.xml 文件中配置 Struts 2 的核心控制器,用来拦截客户端请求,并把请求转发到相应的 Action 类来处理。web.xml 在 WebContent/WEB-INF 目录下,一般用来配置欢迎页、servlet、filter等,当 Tomcat 部署应用程序时,会读取该 web.xml,该文件虽非必须,但当网站复杂时,该文件大有用处。

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <display-name>User Manage Project</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

5、在 WebContent 文件夹下创建视图页面 login.jsp。

<%@ page language="java"  pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>        <!—导入Struts 2标签库-->
<html>
<body>
    <div>
        <div>用户登录</div>
        <div>
            <s:form action="checkLogin" namespace="/login">
            <s:textfield name="username" label="登录名称" />
            <s:password name="password" label="登录密码" />
            <s:submit value=" 登 录 " />
            </s:form>
        </div>
    </div>
</body>
</html>

6、在 WebContent 文件夹下创建欢迎页面 index.jsp。

<%@ page language="java" pageEncoding="UTF-8"%>
<html>
    <body>
        <div>
            登录成功,欢迎您!
        </div>
    </body>
</html>

7、在 Java Resources 分类 src 目录下,New——Package,输入 action,然后在该 package 下,创建业务控制器 LoginAction。如果编辑器有提示”xxx cannot be resolved to a type“,那么 ctrl+shift+o 自动引用所使用的全部包。 

package action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
    private String username;
    private String password;
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username=username;
    }
    public String getPassword()
    {
        return password;
    }
    public void setPassword(String password)
    {
        this.password=password;
    }
    public String checkLogin()
    {
        if(this.username.equals("admin") && this.password.equals("123456"))
            return SUCCESS;
        else
            return LOGIN;
    }
}

 

8、在 struts.xml 文件中配置 LoginAction。struts.xml 在 Java Resources 分类 src 目录下:New——Other——XML——XML File,Next,File Name 输入 struts.xml。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <include file="struts-default.xml"/>
    <package name="struts2_login" extends="struts-default" namespace="/login">
        <action name="checkLogin" class="action.LoginAction" method="checkLogin">
            <result name="success">/index.jsp</result>
            <result name="login">/login.jsp</result>
        </action>
    </package>
</struts>

action 节点的 name 属性定义该 Action 的名称,class 定义这个 Action的实际实现类,method 表示checkLogin 这个 Action 由实际实现类 LoginAction 的 checkLogin() 方法来处理。

每个 Action 对指定了 result 元素,每个 result 元素都定义了一个逻辑视图,name 定义了 Action 返回的字符串。

9、项目右键 Run as——Run on Server,选择 Tomcat Server,Next,Finish。

 

访问 http://localhost:8081/UserManage/login.jsp

 

登录名称输入:admin,登录密码输入:123456,登录成功后会转向 index.jsp 页面。

 

二、进阶登录注册管理 Demo:连接数据库,拦截器,输入校验。在上面的版本上进行修改。

1、创建 Mysql 数据库。下面的 SQL 语句要一句一句执行。

CREATE DATABASE usermanagedb CHARACTER SET utf8 COLLATE utf8_general_ci;
USE usermanagedb;
CREATE TABLE users (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL,
    PASSWORD VARCHAR(20) NOT NULL,
    NAME VARCHAR(20) NOT NULL,
    nic VARCHAR(30) NOT NULL,
    sex CHAR(2) NOT NULL,
    age INT ,
    email VARCHAR(30),
    phone VARCHAR(20),
    selfshow VARCHAR(300)
)CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;

INSERT INTO users  VALUES(NULL,'Jacky','123456','吴宗宪','宪哥','',53,'24545454@qq.com','13587455478','台湾综艺本土天王');
INSERT INTO users  VALUES(NULL,'kangkang','123','康金荣','康康','',48,'658912347@qq.com','18935497452','天王接班人');

2、在 Java Resources 分类 src 目录下,New——Package,输入 database,然后在该 package 下,新建 DatabaseDAO.java 类,实现数据库功能的封装。并将 mysql-connector-java-5.0.3-bin.jar 文件拷贝到 lib 文件夹下。切记 URL 后面一定要加上”?characterEncoding=utf8“,不然会出现数据库中文乱码问题。

package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DatabaseDAO {
    private static Connection con;
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL ="jdbc:mysql://localhost:3306/usermanagedb?characterEncoding=utf8";
    private static final String NAME="root";
    private static final String PASSWORD="sa";
    // 类似单例模式 加载一次即可获取驱动
    static{
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {e.printStackTrace();}
    }
    //获取数据库连接
    public static Connection getConnection(){
        try {
            con=DriverManager.getConnection(URL, NAME, PASSWORD);
        } catch (SQLException e) {e.printStackTrace();}
        return con;
    }
    //关闭Connection
    public static void closeCon(Connection con){
            try {
                if(con!=null)
                con.close();
            } catch (SQLException e) {    e.printStackTrace();}
    }
     //关闭PreparedStatemen
    public static void closePt(PreparedStatement pt){
            try {
                if(pt!=null)
                pt.close();
            } catch (SQLException e) {    e.printStackTrace();}
    }
     //关闭ResultSet
    public static void closeRs(ResultSet rs){
            try {
                if(rs!=null)
                rs.close();
            } catch (SQLException e) {    e.printStackTrace();}
    }
}

在该类中,声明了连接数据库的驱动、URL、账号和密码。getConnection() 方法负责获取数据库连接。

3、src 目录下,New——Package,输入 vo,然后在该 package 下,新建 Users.java 类。

package vo;

public class Users {
    private int id;
    private String username;    //用户账号
    private String password;    //用户密码
    private String name;        //用户姓名
    private String nic;        //用户昵称
    private String sex;        //用户性别
    private int age;            //用户年龄
    private String email;        //用户email
    private String phone;        //用户电话
    private String selfshow;    //个人说明
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNic() {
        return nic;
    }
    public void setNic(String nic) {
        this.nic = nic;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getSelfshow() {
        return selfshow;
    }
    public void setSelfshow(String selfshow) {
        this.selfshow = selfshow;
    }    
}

4、src 目录下,New——Package,输入 dao,然后在该 package 下,新建 UsersDAO.java 类,定义用户操作数据库,如添加用户、查询全部用户和删除用户等方法。

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import database.DatabaseDAO;
import vo.Users;

//用户dao
public class UsersDAO {
    private Connection con;
    private PreparedStatement pt;
    private ResultSet rs;

    // 查找用户名是否存在
    public boolean findUsers(String username) {
        boolean flag = false;
        // 获取数据库连接
        con = DatabaseDAO.getConnection();
        try {
            pt = con.prepareStatement("select * from users where username=?");
            pt.setString(1, username);
            // 执行sql语句 获取结果集
            rs = pt.executeQuery();
            // 如果继续执行 表示用户名存在
            if (rs.next()) {
                flag = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            DatabaseDAO.closeRs(rs);
            DatabaseDAO.closePt(pt);
            DatabaseDAO.closeCon(con);
        }
        return flag;
    }

    // 用户注册
    public int save(Users users) {
        int i = 0;
        con = DatabaseDAO.getConnection();// 获取数据库连接
        try {
            pt = con.prepareStatement("insert into users(username,password,"
                    + "name,nic,sex,age,email,phone,selfshow)"
                    + " values(?,?,?,?,?,?,?,?,?)");
            // 设置参数
            pt.setString(1, users.getUsername());
            pt.setString(2, users.getPassword());
            pt.setString(3, users.getName());
            pt.setString(4, users.getNic());
            pt.setString(5, users.getSex());
            pt.setInt(6, users.getAge());
            pt.setString(7, users.getEmail());
            pt.setString(8, users.getPhone());
            pt.setString(9, users.getSelfshow());
            i = pt.executeUpdate();// 执行sql语句
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            DatabaseDAO.closePt(pt);
            DatabaseDAO.closeCon(con);
        }
        return i;
    }

    public boolean login(Users users) {
        boolean flag = false;
        con = DatabaseDAO.getConnection();
        try {
            pt = con
                    .prepareStatement("select * from users where username=? and password=?");
            // 设置参数
            pt.setString(1, users.getUsername());
            pt.setString(2, users.getPassword());
            // 获取结果集
            rs = pt.executeQuery();
            // 如果能往下继续执行,表示用户名和密码正确
            if (rs.next()) {
                flag = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接
            DatabaseDAO.closeRs(rs);
            DatabaseDAO.closePt(pt);
            DatabaseDAO.closeCon(con);
        }
        return flag;
    }

    public List findAllUsers() {
        // 获取一个list对象,来添加所有用户
        List list = new ArrayList();
        con = DatabaseDAO.getConnection();
        try {
            pt = con.prepareStatement("select * from users");
            rs = pt.executeQuery();
            while (rs.next()) {
                Users users = new Users();
                users.setId(rs.getInt(1));
                users.setUsername(rs.getString(2));
                users.setPassword(rs.getString(3));
                users.setName(rs.getString(4));
                users.setNic(rs.getString(5));
                users.setSex(rs.getString(6));
                users.setAge(rs.getInt(7));
                users.setEmail(rs.getString(8));
                users.setPhone(rs.getString(9));
                users.setSelfshow(rs.getString(10));
                // 把users对象添加到list
                list.add(users);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DatabaseDAO.closeRs(rs);
            DatabaseDAO.closePt(pt);
            DatabaseDAO.closeCon(con);
        }
        return list;
    }

    public Users selectInfo(String username) {
        Users users = new Users();
        con = DatabaseDAO.getConnection();
        try {
            pt = con.prepareStatement("select * from users where username=?");
            // 设置参数
            pt.setString(1, username);
            // 返回结果集
            rs = pt.executeQuery();
            if (rs.next()) {
                // 取出数据库的值
                users.setId(rs.getInt(1));
                users.setUsername(rs.getString(2));
                users.setPassword(rs.getString(3));
                users.setName(rs.getString(4));
                users.setNic(rs.getString(5));
                users.setSex(rs.getString(6));
                users.setAge(rs.getInt(7));
                users.setEmail(rs.getString(8));
                users.setPhone(rs.getString(9));
                users.setSelfshow(rs.getString(10));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库
            DatabaseDAO.closeRs(rs);
            DatabaseDAO.closePt(pt);
            DatabaseDAO.closeCon(con);
        }
        return users;
    }

    public int update(Users users) {
        int i = 0;
        con = DatabaseDAO.getConnection();
        try {
            pt = con.prepareStatement("update users set password=?,name=?,"
                    + "nic=?,sex=?,age=?,email=?,phone=?,selfshow=?"
                    + " where username=? and id=?");
            pt.setString(1, users.getPassword());
            pt.setString(2, users.getName());
            pt.setString(3, users.getNic());
            pt.setString(4, users.getSex());
            pt.setInt(5, users.getAge());
            pt.setString(6, users.getEmail());
            pt.setString(7, users.getPhone());
            pt.setString(8, users.getSelfshow());
            pt.setString(9, users.getUsername());
            pt.setInt(10, users.getId());
            i = pt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DatabaseDAO.closePt(pt);
            DatabaseDAO.closeCon(con);
        }
        return i;
    }

    // 删除用户
    public boolean deleteUser(int id) {
        boolean flag = false;
        con = DatabaseDAO.getConnection();
        try {
            pt = con.prepareStatement("delete from users where id=?");
            pt.setInt(1, id);
            int i = pt.executeUpdate();
            if (i > 0) {
                flag = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DatabaseDAO.closePt(pt);
            DatabaseDAO.closeCon(con);
        }

        return flag;
    }

    //查询新增用户,按id降序排列,前8位
    public List newUsers(){
        List list = new ArrayList();
        con = DatabaseDAO.getConnection();
        try {
            pt = con.prepareStatement("select * from users order by id desc limit 0,8");
            // 返回结果集
            rs = pt.executeQuery();
            if (rs.next()) {
                Users users = new Users();
                // 取出数据库的值
                users.setId(rs.getInt(1));
                users.setUsername(rs.getString(2));
                users.setPassword(rs.getString(3));
                users.setName(rs.getString(4));
                users.setNic(rs.getString(5));
                users.setSex(rs.getString(6));
                users.setAge(rs.getInt(7));
                users.setEmail(rs.getString(8));
                users.setPhone(rs.getString(9));
                users.setSelfshow(rs.getString(10));
                list.add(users);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库
            DatabaseDAO.closeRs(rs);
            DatabaseDAO.closePt(pt);
            DatabaseDAO.closeCon(con);
        }
        return list;
    }    
}

5、WebContent 文件夹下新建 register.jsp 文件,用户注册内容和数据表 users 表相对应。

 

<%@ page language="java" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title><s:text name="UserRegister" />
        </title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            </head>
    <BODY>
        <center><br/><br/><br/>
        <h3>
            <s:text name="UserRegister" />
        </h3>
        <div style="align:center;" >
            <s:form action="register" method="post">
                        <s:textfield name="username" key="UserName" />
                        <s:password name="password" key="PassWord" />
                        <s:textfield name="name" key="Name" />
                        <s:textfield name="nic" key="NickName" />
                        <s:textfield name="sex" key="Sex" />
                        <s:textfield name="age" key="Age" />
                        <s:textfield name="email" key="Email" />
                        <s:textfield name="phone" key="Phone" />
                        <s:textarea name="selfshow" key="brief.introduction" />        
                        <s:submit  key='Register'/>
            </s:form>
            </div>
        </center>
    </body>
</html>

 

在 struts 2 中,<s:form>表单标签在默认情况下已经使用 table 标签进行布局,每个表单标签将占用一个 <tr>。

6、src 目录下,New——Package,输入 action,然后在该 package 下,新建 RegisterAction.java。

package action;
import dao.UsersDAO;
import vo.Users;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport {
    private String username;    //用户账号
    private String password;    //用户密码
    private String name;        //用户姓名
    private String nic;        //用户昵称
    private String sex;        //用户性别
    private int age;            //用户年龄
    private String email;        //用户email
    private String phone;        //用户电话
    private String selfshow;    //个人说明
    private String tip;        //服务器提示的tip属性
    
    
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNic() {
        return nic;
    }
    public void setNic(String nic) {
        this.nic = nic;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getSelfshow() {
        return selfshow;
    }
    public void setSelfshow(String selfshow) {
        this.selfshow = selfshow;
    }
    public String getTip() {
        return tip;
    }
    public void setTip(String tip) {
        this.tip = tip;
    }

    public String register()throws Exception    {
        UsersDAO dao=new UsersDAO();//实例化用户DAO对象
        boolean flag=dao.findUsers(username); //查找用户是否存在
        //flag为true表示用户名存在
        if(flag){
            this.setTip(this.getText("username.exist"));
            return this.INPUT;
        }
        Users users=new Users();//实例化用户对象
        users.setUsername(username);
        users.setPassword(password);
        users.setName(name);
        users.setNic(nic);
        users.setSex(sex);
        users.setAge(age);
        users.setEmail(email);
        users.setPhone(phone);
        users.setSelfshow(selfshow);
        int i=dao.save(users); //将users对象传入save方法
        if(i>0) { //i大于0表示注册成功
             return this.SUCCESS;
        }else{
            this.setTip(this.getText("register.failed"));
            return this.INPUT;
        }    
    }
}

7、在包 action 下新建 RegisterAction-validation.xml 文件,该文件和 RegisterAction 类文件相对应,实现注册验证。

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
    <!-- 验证 username 属性 -->
    <field name="username">
        <!-- 指定 username 属性不能为空 -->
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="username.notnull"/>
        </field-validator>
        <!-- 指定 username 属性必须匹配正则表达式 -->
        <field-validator type="regex">
        <param name="expression"><![CDATA[(\w{4,25})]]></param>
        <message key="username.length"/>
        </field-validator>
    </field>
    <!-- 验证 password 属性 -->
    <field name="password">
        <!-- 指定 password 属性不能为空 -->
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="password.notnull"/>
        </field-validator>
        <!-- 指定 password 属性必须匹配正则表达式 -->
        <field-validator type="regex">
            <param name="expression"><![CDATA[(\w{4,25})]]></param>
            <message key="password.length"/>
        </field-validator>
    </field>
    <!-- 验证 name 属性 -->
    <field name="name">
        <!-- 指定 name 属性不能为空 -->
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="name.notnull"/>
        </field-validator>
    </field>
    <!-- 验证 nic 属性 -->
    <field name="nic">
        <!-- 指定 nic 属性不能为空 -->
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="nic.notnull"/>
        </field-validator>
        <!-- 指定 nic 属性必须匹配正则表达式 -->
        <field-validator type="regex">
            <param name="expression"><![CDATA[(\w{4,30})]]></param>
            <message key="nic.length"/>
        </field-validator>
    </field>
    <!-- 验证 sex 属性 -->
    <field name="sex">
        <!-- 指定 sex 属性不能为空 -->
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="sex.notnull"/>
        </field-validator>
    </field>
    <!-- 验证 age 属性 -->
    <field name="age">
        <field-validator type="int">
            <param name="min">18</param>
            <param name="max">50</param>
            <message key="age.length"/>
        </field-validator>
    </field>
</validators>

 8、添加 regsucc.jsp。

<%@ page language="java"  pageEncoding="GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><s:text name="register.succ"/></title>
  </head>
  <body>
      <center>
           <font size="3"><s:text name="register.success"/></font>
      </center>
  </body>
</html>

9、修改 struts.xml。

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.i18n.encoding" value="utf-8"/>
    <!--不受权限控制的Action请求配置-->
    <package name="users" extends="struts-default">
        <!-- 用户注册action -->
        <action name="register" class="action.RegisterAction" method="register">
            <result name="success">/regsucc.jsp</result>
            <result name="input">/register.jsp</result>
        </action>
    </package>    
</struts>

10.访问 http://localhost:8081/UserManage/register.jsp,如果在调试过程中出现问题,请检查 jar 文件版本是否不对。或者尝试重启 Eclipse。

11、新建 LoginAction.java。

package action;
import dao.UsersDAO;
import vo.Users;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
    private String username;    //用户名
    private String password;    //密码
    private String tip;        //服务器提示的tip属性
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getTip() {
        return tip;
    }
    public void setTip(String tip) {
        this.tip = tip;
    }
    public String login()throws Exception{
        Users users=new Users();
        users.setUsername(username);
        users.setPassword(password);
        UsersDAO dao=new UsersDAO();
        boolean flag=dao.login(users);
        //如果为true,登录通过
        if(flag){
            //将用户名存入session
            ActionContext.getContext().getSession().put("username", username);
            return SUCCESS;
        }else    {
            this.setTip(this.getText("login.failed"));//登录失败,返回首页
            return INPUT;
        }
    }    
}

12、新建 AuthorityInterceptor.java。

package util;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class AuthorityInterceptor extends AbstractInterceptor {
    //拦截Action处理的拦截方法 
    public String intercept(ActionInvocation invocation) throws Exception {
        // 取得请求相关的ActionContext实例
        ActionContext ctx=invocation.getInvocationContext();
        Map session=ctx.getSession(); 
        //取出名为username的session属性  
        String username=(String)session.get("username");
        //如果username为空,表示没有登录,则返回重新登录   
        if(username!=null){
            System.out.println("拦截通过!");
            return invocation.invoke();   
        }   
        System.out.println("登录拦截!");
        ctx.put("tip", "请先登录!");
        return Action.LOGIN;
    }
}

13、新建 FindAllUsersAction.java 。

package action;

import java.util.List;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import dao.UsersDAO;

public class FindAllUsersAction extends ActionSupport {
    private String type; // 参数表示从哪个页面提交过来

    public String findAllUsers() throws Exception {
        UsersDAO dao = new UsersDAO();
        List list = dao.findAllUsers();
        // 将list对象存放在ActionContext里
        ActionContext.getContext().put("list", list);
        if ("admin".equals(type)) {
            return this.INPUT; // 管理员查询
        } else {
            return this.SUCCESS;
        } // 用户查询
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }
}

14、新建 allusers.jsp。

<%@ page language="java" pageEncoding="gbk"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title><s:text name="find.allusers"/></title>
</head>
<body>
<center>
    <div style="align:center;width:900px;"  >
            <s:text name="find.allusers"/>
            <ul style="width:100%;margin-left:10px;">
                <li style="width:25%;border-top:1px solid gray;border-right:1px solid gray;border-bottom:1px solid gray;" class="category"> 
                    <s:text name="UserName"/></li>
                <li style="width:25%;border-top:1px solid gray;border-right:1px solid gray;border-bottom:1px solid gray;" class="category">
                    <s:text name="NickName"/></li>
                <li style="width:24%;border-top:1px solid gray;border-right:1px solid gray;border-bottom:1px solid gray;" class="category">
                    <s:text name="Name"/></li>
                <li style="width:25%;border-top:1px solid gray;border-bottom:1px solid gray;" class="category"><s:text name="look.detailed"/></li>
            </ul> 
        <s:iterator value="list">
            <ul style="width:100%;margin-left:10px;" onmouseover="this.className='highlight'" onmouseout="this.className=''">
                <li style="width:25%;border-right:1px solid gray;border-bottom:1px solid gray;" > 
                    <s:property value="username"/></li>
                <li style="width:25%;border-right:1px solid gray;border-bottom:1px solid gray;" >
                    <s:property value="nic"/></li>
                <li style="width:24%;border-right:1px solid gray;border-bottom:1px solid gray;" > 
                    <s:property value="name"/></li>
                <li style="width:25%;border-bottom:1px solid gray;" > <s:a             href="selectinfo.action?username=${username}&type=allusers"><s:text name="look.detailed"/></s:a>
                </li>
            </ul>    
        </s:iterator>
       </div>
      </center>
  </body>
  </html>

15、在 struts.xml 中配置 AuthorityInterceptor 拦截器。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.i18n.encoding" value="GBK"/>
    <!--不受权限控制的Action请求配置-->
    <package name="users" extends="struts-default">
        <!-- 用户注册action -->
        <action name="register" class="action.RegisterAction" method="register">
            <result name="success">/regsucc.jsp</result>
            <result name="input">/register.jsp</result>
        </action>
        <!-- 用户登录action -->
        <action name="login" class="action.LoginAction" method="login">
            <result name="success">/main.jsp</result>
            <result name="input">/index.jsp</result>
        </action>
    </package>
    <!--受权限控制的Action请求配置-->
    <package name="users-authority" extends="struts-default">
        <interceptors>   
            <!--定义一个名为authority的拦截器-->   
            <interceptor class="util.AuthorityInterceptor"  
                name="authority"/>   
            <!--定义一个包含权限检查的拦截器栈-->   
            <interceptor-stack name="mydefault">   
                <!--配置内建默认拦截器-->   
                <interceptor-ref name="defaultStack"/>   
                <!--配置自定义的拦截器-->   
                <interceptor-ref name="authority"/>   
            </interceptor-stack>
        </interceptors>   
        <default-interceptor-ref name="mydefault" />
        <!-- 查看所有用户 -->
        <action name="findalluser" class="action.FindAllUsersAction" method="findAllUsers">
            <result name="success">/allusers.jsp</result>
            <result name="input">/allusers.jsp</result>
        </action>
    </package>
</struts>

16、慢慢体会 Struts2 框架。

 

参考资料:

1. 蒲子明 许勇 王黎等编著. Struts 2+Hibernate+Spring 整合开发技术详解

转载于:https://www.cnblogs.com/NaughtyBaby/p/4716054.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值