Struts2 入门实例

来源:互联网 发布:网络硬盘录像机的设置 编辑:程序博客网 时间:2024/05/23 20:27
一、最简登录 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;//用户daopublic 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 整合开发技术详解

0 0
原创粉丝点击