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..jar // Struts 2 的核心库
xwork-core-2.3..jar // WebWork 的核心库,需要它的支持
ognl-3.0..jar // OGNL 表达式语言,Struts 2 支持该 EL 表达式
freemarker-2.3..jar // 表现层框架,定义了 Struts 2 的可视组件主题
commons-logging-1.1..jar // 日志管理
commons-fileupload-1.3..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','','吴宗宪','宪哥','男',53,'24545454@qq.com','','台湾综艺本土天王');
INSERT INTO users VALUES(NULL,'kangkang','','康金荣','康康','男',48,'658912347@qq.com','','天王接班人');
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 整合开发技术详解
Struts2 入门实例的更多相关文章
- struts2入门实例
引言: 接触.net有3.4年的时间了,一直想学习java,中间因为种种原因耽搁下来.本人学习java的目的,一是多条出路,二是和.net平台互相印证,毕竟只用一门语言,无论是在框架还是在眼界方面都会 ...
- struts入门实例
入门实例 1 .下载struts-2.3.16.3-all .不摆了.看哈就会下载了. 2 . 解压 后 找到 apps 文件夹. 3. 打开后将 struts2-blank.war ...
- Struts2入门到放弃
写在前面------------------------------------------------------------------------- 本文章主要从三个方面来学习Struts2框架 ...
- SpringMVC 框架系列之初识与入门实例
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.SpringMVC 概述 (1). MVC:Model-View-Control Contr ...
- SpringMVC系列之(一) 入门实例
Spring MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也 ...
- Struts2 入门
一.Struts2入门案例 ①引入jar包 ②在src下创建struts.xml配置文件 <?xml version="1.0" encoding="UTF-8&q ...
- React 入门实例教程(转载)
本人转载自: React 入门实例教程
- Vue.js2.0从入门到放弃---入门实例
最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊,由于网上那些教程都是Vue.js 1.x版本的,现在用 ...
- wxPython中文教程入门实例
这篇文章主要为大家分享下python编程中有关wxPython的中文教程,分享一些wxPython入门实例,有需要的朋友参考下 wxPython中文教程入门实例 wx.Window 是一个基类 ...
随机推荐
- Apache Spark 2.0三种API的传说:RDD、DataFrame和Dataset
Apache Spark吸引广大社区开发者的一个重要原因是:Apache Spark提供极其简单.易用的APIs,支持跨多种语言(比如:Scala.Java.Python和R)来操作大数据. 本文主要 ...
- 在firefox安装Selenium IDE
1.打开地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/: 2.点击Add to Firefox: 3.打开Firefox ...
- kettle中的karaf设置
Spoon.sh设置-Dpentaho.karaf.root.copy.dest.folder=$PENTAHO_KARAF_ROOT -Dpentaho.karaf.root.transient=f ...
- WebStorm keyboard shortcuts
ctrl + D 向下复制 下面是Webstorm的一些常用快捷键: shift + enter: 另起一行 ctrl + alt + L: 格式化代码 control + E: 光标跳到行尾 it ...
- SQLAlchemy-Utils,提供choice功能
SQLAlchemy操作数据库建表时,无法像Django一样提供choice方法,我们开头导入SQLAlchemy-Utils来为我们提供这个功能 pip3 install sqlalchemy-ut ...
- SQL Server创建事务——锁
参考地址:http://www.cnblogs.com/knowledgesea/p/3714417.html 事务定义: 事务是作为单个逻辑单元执行的一系列操作,它是一个不可分割的工作逻辑单元.它包 ...
- android系统和ios系统是如何实现推送的,ios为什么没有后台推送
ios系统为什么没有后台推送? iOS 为了真正地为用户体验负责,不允许应用在后台活动.有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用). ...
- ElasticSearch recovery过程源码分析
[ES版本] 5.5.0 [分析过程] 找到Recovery有6种状态 public class RecoveryState implements ToXContent, Streamable { p ...
- JMeter插件管理器
JMeter插件管理器 来自官网:https://jmeter-plugins.org/wiki/PluginsManager/ JMeter插件管理器的想法很简单:不是手动安装各种插件,而是通过漂亮 ...
- Ubuntu16 安装Jira
参见:https://segmentfault.com/a/1190000008194333 https://www.ilanni.com/?p=12119烂泥:jira7.3/7.2安装.中文及破解 ...