初学Struts2在这里写一个简单的客户端表单提交用户名密码来登陆的例子。
创建struts2项目步骤:
1.导入Structs2的核心包。
2.修改web.xml添加Filer配置。
3.编写DAO
4.编写Action
5.编写前台页面
6.创建struts.xml,必须放在src目录下。
1.导入必须的lib包
struts2-core-2.0.6.jar
freemarker-2.3.15
xwork-2.0.1.jar
ognl-2.6.11.jar
commons-fileupload-1.2.1.jar
commons-io1.3.2.jar
2.添加struts过滤器
找到WEB-INF里面的web.xml文件,添加struts2的过滤器,使得Struts2可以运行起来并过滤性的捕获客户端事件。
<!-- 定义Struts2的核心过滤器 --> <filter> <!-- 过滤器的名字 --> <filter-name>struts2</filter-name> <!-- 过滤器的实现类 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- /* 表示用struts2处理所有的Web请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3.编写DAO
这里没有用到暂时省略
4.编写Action
4.1 What is Action
Action是Struct2用来处理客户端请求事件的对象。在默认情况下Struts2对每个请求线程都使用独立的Action实例去执行的。在自己编写Action时,需要实现com.opensymphony.xwork2.Action 接口,但不实现接口也可以,只要去实现一个函数原型为public abstract String execute() throws Exception;的方法即可。(个人觉得还是实现Action接口看起来比较明白)
4.2 Struts2处理用户请求的三种方式
1. 直接在Action中定义属性接收用户提交信息。
2. 利用POJO访问(个人愚笨的理解为POJO就是一个最简化JavaBean)。将用户提交信息全部定义在POJO中而不是 Action中,这样实现Action与用户提交信息的解耦。
3. 使用ModelDriben模式接收用户使用。
4.3实现前两种处理请求的方式。
第一种方式处理:直接在Action中耦合客户端参数
package com.action1;
import com.opensymphony.xwork2.Action;
/**
* 验证登陆
*
* @author Luke Chen
* @date 2010-7-10
*/
public class LoginAction1 implements Action {
// 定义的数据成员的名称必须完全对应客户端提交的参数名
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 execute() throws Exception {
if (getUsername().equals("luke") && getPassword().equals("123456")) {
return "success1";
} else {
return "fail1";
}
}
}
第二种方式
第一步 建立对应用户提交参数的JavaBean
package com.action2;
/**
* 用户提交信息对应对象
*
* @author Luke Chen
* @date 2010-7-13
*/
public class User {
// 定义的数据成员的名称必须完全对应客户端提交的参数名
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;
}
}
第二步 在Action中使用Bean
package com.action2;
import com.opensymphony.xwork2.Action;
/**
* 验证登陆
*
* @author Luke Chen
* @date 2010-7-13
*/
public class LoginAction2 implements Action {
// 解耦了Action和属性的捆绑,如果客户端参数有了变动就直接修改User。
// 注意这里User不用new出来,struts2帮你处理好了创建User对象并接收客户端的参数。
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception {
if (user.getUsername().equals("luke") && user.getPassword().equals("654321")) {
return "success2";
} else {
return "fail2";
}
}
}
5.编写前台JSP页面
<%@ page language="java" import="java.util.*;" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<form action="Login1" method="post">
<table>
Login1
<!-- 用户名的表单域 -->
用户名
<input type="text" name="username" />
<!-- 密码的表单域 -->
密码
<input type="text" name="password" />
<input type="submit" value="登录" />
<input type="reset" value="重填" />
</table>
</form>
<form action="Login2" method="post">
<table>
Login2
<!-- 用户名的表单域 -->
用户名
<input type="text" name="user.username" />
<!-- 密码的表单域 -->
密码
<input type="text" name="user.password" />
<input type="submit" value="登录" />
<input type="reset" value="重填" />
</table>
</form>
</body>
</html>
6.创建struts.xml文件,struts.xml文件必须放在src下面
<?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 --> <struts> <!-- Action必须放在指定name的包空间下定义 --> <package name="mypackage1" extends="struts-default"> <!-- 处理Login事件的类com.action1.LoginAction1 --> <action name="Login1" class="com.action1.LoginAction1"> <!-- 处理结果和页面跳转之间映射关系 --> <!--LoginAction1的execute()方法返回"fail1"字符串 就跳到error.jsp页面 --> <result name="fail1">/error.jsp</result> <!--LoginAction1的execute()方法返回"success1"字符串 就跳到welcome.jsp页面 --> <result name="success1">/welcome.jsp</result> </action> </package> <package name="mypackage2" extends="struts-default"> <action name="Login2" class="com.action2.LoginAction2"> <result name="fail2">/error.jsp</result> <result name="success2">/welcome.jsp</result> </action> </package> </struts>
经过了上面的这些步骤,这个提交用户名和密码验证的小例子就算是完成了(直接写死用户名密码没有与数据库交互),接下来直接部署到tomcat里就可以去测试了。