通过上一部分内容的学习,我们已经能完全看懂简单的Struts程序,并且知道通过增加Action来增加业务功能的实现,通过struts.xml实现路由映射,并通过JavaBean来传递数据。
本着应用就是最好的复习,我们用来做一个基于Struts的登录功能。在本案例中我们将运用所学习到的知识,尽量把Model、View以及Controller都明确划分出来。
执行过程示意图
因此,我们需要完成以下任务:
1.userLogin.jsp:为用户提供一个登录入口页面;
2.web.xml:引入Struts框架jar,并声明一个Struts的拦截器;
3.struts.xml:定义一个Struts框架的配置文件,用于配置实现URL与Action之间的路由映射。
4.User.java:实现一个Model,用于作为通信过程中传递参数的载体;
5.UserLoginAction.java:实现一个Action,用于处理用户登录验证的请求;
6.success.jsp:用户登录成功后,跳转的页面;
7.error.jsp:用户登录失败后,跳转的页面。
1.userLogin.jsp
userLogin.jsp:为用户提供一个登录入口页面,用户在此页面填写用户名username和密码password,并以表单形式POST到loginAction中处理;
pageEncoding="UTF-8"%>
用户登录页面用户名:
密    码:
2.web.xml
为了使用Struts框架,需要在项目的Web.xml中配置一个Struts拦截器,用于拦截用户的所有请求。
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
userLogin.jsp
3.struts.xml
请求被Struts拦截器获取后,需要到struts.xml中寻找路由映射,从URL地址映射为Action业务处理类。
在项目的Java Resources—>src文件夹下,新建struts.xml。代码如下:
/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
/success.jsp
/error.jsp
4.User.java
在处理业务之前,为了实现JSP页面与Action之前的数据传输,需要先定义一个JavaBean实体类,作为传输参数的载体。
根据上一部分所学习可知,Struts框架建议使用包来管理Action,因此我们需要现在src下新建一个名为cn.demo.domain,用于存放所有JavaBean实体类。然后,在该包下新建User.java实体类。代码如下:
package cn.demo.domain;
public class User {
private String username;
private String password;
// username的getter和setter方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
// password的getter和setter方法
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
5.UserLoginAction.java
Action业务处理类通过继承ActionSupport实现请求的获取响应,并包含一个User对象,用于存储JSP页面请求发送过来的参数对象。
根据上一部分所学习可知,Struts框架建议使用包来管理Action,因此我们需要现在src下新建一个名为cn.demo.action的包,用于存放所有Action业务处理类。然后,在该包下新建继承于ActionSupport的UserLoginAction类。
(注意:
要继承ActionSupport父类,就需要引入命名空间:
import com.opensymphony.xwork2.ActionSupport;
要调用ActionContext上下文对象,就需要引入命名空间:
import com.opensymphony.xwork2.ActionContext;
要调用自定义实体类User,就需要引入命名空间:
import cn.demo.domain.User;
)*
代码如下:
package cn.demo.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import cn.demo.domain.User;
public class UserLoginAction extends ActionSupport {
//1.定义User属性
private User user;
// 2.user属性的getter和setter方法
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
//3.重写父类的execute()方法
public String execute() throws Exception {
//获取Context对象
ActionContext context = ActionContext.getContext();
if ("itcast".equals(user.getUsername())
&& "123".equals(user.getPassword())) {
//将用户名和密码放入session中
context.getSession().put("username", user.getUsername());
context.getSession().put("password", user.getPassword());
return SUCCESS;
} else {
context.getSession().put("error", "用户登录失败!");
return ERROR;
}
}
}
6.success.jsp
若登录验证成功,则路由跳转到成功页面;
pageEncoding="UTF-8"%>
用户登录成功页面登录成功!
您的用户名是
7.error.jsp
若登录验证失败,则路由跳转到失败页面。
pageEncoding="UTF-8"%>
用户登录失败页面${error}
跑起来,看看效果如何:
默认访问用户登录页面
验证成功后跳转到success
The End~
作者: 肖sir@ZHBIT
2018 年 09月 27日