初学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里就可以去测试了。