Struts2学习——Hello Struts

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

你可能感兴趣的:(apache,jsp,xml,Web,struts)