Struts2的简单示例

1. 下载和安装Struts2,在http://struts.apache.org/下载Struts2最新版本。

Struts2的目录结构如下:

apps:该目录包含了基于Struts2的示例应用;

docs:该目录包含了Struts2Struts2的相关文档;

lib:该目录包含了Struts2框架的核心类库以及Struts2的第三方插件类库;

src:该目录包含了Struts2框架的全部源代码。


2. 新建一个web项目Struts2Demo,将lib目录下的commons-fileupload-1.3.jar、commons-io-2.0.1.jar、commons-lang3-3.1.jar、freemarker-2.3.19.jar、javassist-3.11.0.GA.jar、ognl-3.0.6.jar、struts2-core-2.3.15.1.jar和xwork-core-2.3.15.1.jar复制到项目的WEB-INF/lib目录下。


3. 编辑配置文件web.xml,配置Struts2的核心Filter:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- 定义Struts2的核心Filter -->
	<filter>
	<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
	</filter>
	<!-- 让Struts2的核心Filter拦截所有请求 -->
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
</web-app>

4. 为Struts2Demo应用增加一个简单的用户注册处理流程,编写注册页面register.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Register</title>
</head>
<body>
	<form action="registerAction" method="post">
		<fieldset>
		<table>
			<tr>
				<td>用户名:</td>
				<td><input type="text" name="user.username"/></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password" name="user.password"/></td>
			</tr>
			<tr>
				<td>性别:</td>
				<td>
					<input type="radio" name="user.sex" value="male" checked="checked"/>男
					<input type="radio" name="user.sex" value="female"/>女
				</td>
			</tr>
			<tr>
				<td>邮箱:</td>
				<td>
					<input type="text" name="user.email"/>
				</td>
			</tr>
		 	<tr>
				<td><input type="submit" value="登录" /></td>
				<td> </td>
			</tr>
		</table>
		</fieldset>
	</form>
</body>
</html>

5. 编写User实体:

package com.huey.entity;

/**
 * User实体
 * @version 2013-08-17
 * @author huey2672
 *
 */
public class User {

	private String username;
	private String password;
	private String sex;
	private String email;
	
	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 getSex() {
		return sex;
	}
	
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	public String getEmail() {
		return email;
	}
	
	public void setEmail(String email) {
		this.email = email;
	}
	
	public User() {
	}

	public User(String username, String password, String sex, String email) {
		this.username = username;
		this.password = password;
		this.sex = sex;
		this.email = email;
	}
	
	@Override
	public int hashCode() {
		return username.toLowerCase().hashCode();
	}
	
	/**
	 * 用户名相同即表示同一用户,且用户名不区分大小写
	 */
	@Override
	public boolean equals(Object otherObject) {
		if (this == otherObject)return true;
		if (otherObject == null) return false;
		if (getClass() != otherObject.getClass()) return false;
		User other = (User)otherObject;
		return username.equalsIgnoreCase(other.getUsername());
	}
}

6. 编写User服务,简单地模拟用户注册流程:

package com.huey.service;

import java.util.ArrayList;
import java.util.List;

import com.huey.entity.User;

/**
 * User服务,提供用户注册的方法
 * @version 2013-08-17
 * @author huey2672
 *
 */
public class UserService {

	private List<User> existedUsers = new ArrayList<User>();
	
	public UserService() {
		// 已经存在的用户
		existedUsers.add(new User("huey", "123", "male", "huey@163.com"));
		existedUsers.add(new User("sugar", "456", "female", "sugar@163.com"));
	}
	
	/**
	 * 注册用户
	 * @param newUser 新注册的用户信息 
	 * @return boolean表示注册成功,false表示注册失败
	 */
	public boolean doRegister(User newUser) {
		for (User existedUser : existedUsers) {
			if (newUser.equals(existedUser)) {
				System.out.println("该用户名已存在,不能注册!");
				return false;
			}
		}
		existedUsers.add(newUser);
		System.out.println("该用户名还未被注册,可以使用!");
		return true;
	}
}

7. 定义处理用户请求的Action类:

package com.huey.action;

import com.huey.entity.User;
import com.huey.service.UserService;

/**
 * 处理用户注册请求的Action类
 * @version 2013-08-17
 * @author huey2672
 *
 * Action类只是一个普通的Java类,只需为其属性提供getter和setter方法,
 * 并且提供一个无参的返回类型为String的方法,以处理用户请求。
 * 
 * Action类可以实现com.opensymphony.xwork2.Action接口,
 * 或是继承com.opensymphony.xwork2.ActionSupport基类以简化Action的开发。
 */
public class RegisterAction {
	
	// user属性,并为其提供getter和setter方法
	private User user;
	private UserService userService = new UserService();
	
	public User getUser() {
		return user;
	}
	
	public void setUser(User user) {
		this.user = user;
	}

	/**
	 * 注册请求的处理方法
	 * @return	success 表示注册成功
	 * 			fail 表示注册失败
	 * 			error 表示出现错误
	 * @throws Exception
	 */
	public String doRegister() throws Exception {
		if (user == null) return "error";
		if (userService.doRegister(user)) return "success";
		return "fail";
	}
	
}

8. 编写Struts2配置的配置文件struts.xml,将该文件直接放在src目录下即可,当Eclipse生成、部署Web项目时,会自动将src路径下除*.java外的所有文件都复制到Web应用的WEB-INF\classes路径下。struts.xml主要作用就是配置Action和请求之间的对应关系,并配置逻辑视图与物理视图之间的映射。除此之外,struts.xml文件还有一些其他的功能,例如Bean配置、配置常量、导入其他配置文件等。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!-- 所有的Action定义都放在package下,所有的package都要继承struts-default -->
	<package name="register" extends="struts-default">
		<!-- 定义Action,并为其制定名字,对应的处理类和处理方法,
			  如果处理类没有指定的话,默认是ActionSupport,
		            如理方法没有指定的话,默认是execute方法。 -->
		<action name="registerAction" class="com.huey.action.RegisterAction" 
		method="doRegister">
			<!-- 定义逻辑视图与物理视图之间的映射 -->
			<result name="success">welcome.jsp</result>
			<result name="fail">register.jsp</result>
			<result name="error">error.jsp</result>
		</action>
	</package>
</struts>

9. 编写其他视图资源welcome.jsp、error.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome</title>
</head>
<body>
	Welcome, <s:property value="user.username" />!
	Your email is <s:property value="user.email" />.
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error</title>
</head>
<body>
	Error!
</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值