Struts 基础应用——基于 Struts2 框架的用户登录模块
一、基础实验——Struts2 框架搭建
(一)实验目的
- 掌握 Struts2 应用的基本开发步骤和常规配置;
- 观察表单参数与 Action 属性的赋值关系,观察 Action 的 execute()方法及其返回值,并能正确应用;
- 观察配置文件 struts.xml 中的主要元素及属性,并能够正确应用;
- 理解 Stuts2 框架中 MVC 设计模式的体现,理解 Action,FilterDispatcher,struts.xml 的主要作用,并能够正确应用。
(二)基础知识与原理
- Struts2 是从 WebWork 框架上发展起来的 MVC 框架;
- FilterDispatcher 是 Struts2 中的核心控制器,客户端对服务器端的请求将被 FilterDispatcher 过滤;若请求需要调用某个 Action,则框架将根据配置文件 struts.xml,找到需要调用的 Action 类;
- Action 类是一个符合一定命名规范的 JavaSE 类,作为业务控制器使用;Action 中的 execute()方法用于调用 Model 层的业务逻辑类,并根据返回结果决定页面导航;
- 若 Action 类中需要使用表单提交的请求参数,那么必须在 Action 类中声明与 表单域的名字对应的变量,并为变量提供 getters/setters 方法;
- Action 类需要在 struts.xml 中进行配置才能使用;
- 编译运行基于 Struts2 框架的 Web 工程,需要导入 struts2 的 8 个核心 jar 包:
文件名 | 说明 |
---|---|
struts2-core-2.3.15.1.jar | Struts 2 框架的核心类库 |
xwork-core-2.3.15.1.jar | XWork 类库,Struts 2 的构建基础 |
Ognl-3.0.6.jar | Struts 2 使用的一种表达式语言类库 |
freemarker-2.3.19.jar | Struts 2 的标签模板使用类库 |
javassist-3.11.0.GA.jar | 代码生成工具包 |
commons-lang3-3.1.jar | Apache 语言包,是 java.lang 包的扩展 |
commons-io-2.0.1.jar | Apache IO 包 |
commons-fileupload-1.3.jar | Struts 2 文件上传依赖包 |
(三)实验内容及步骤
- 登录 http://struts.apache.org/download.cgi 站点,下载 Struts2 的最新版(Full Distribution);
- IDEA 中新建工程
- 加入 Struts2 相关依赖或导入 jar 包
xml
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.37</version>
</dependency>
4. 新建 login.jsp 页面,作为用户登录的视图。
```jsp
``` 5. 新建 loginSuccess.jsp 和 loginFail.jsp 页面分别作为登录成功或登录失败的视图。 6. 新建 bean 包,创建 UserBean.java,用于记录登录用户信息:
```java package com.example.struts_prij1.bean;
public class UserBean { private String account; private String password;
public UserBean() {
}
public UserBean(String account, String password) {
this.account = account;
this.password = password;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
``` 7. 新建 service 包,并创建 UserService.java,用于实现登录逻辑
```java package com.example.struts_prij1.service;
import com.example.struts_prij1.bean.UserBean;
public class UserService { public boolean login(UserBean loginUser){ if(loginUser.getAccount().equals(loginUser.getPassword())){ return true; } return false; } }
``` 8. 创建 action 包,并创建 UserAction.java,调用登录逻辑,并根据登录结果不同而返回不同内容
```java package com.example.struts_prij1.action;
import com.example.struts_prij1.bean.UserBean; import com.example.struts_prij1.service.UserService;
public class UserAction { private UserBean loginUser; public UserBean getLoginUser(){ return loginUser; } public void setLoginUser(UserBean loginUser){ this.loginUser = loginUser; } public String execute(){ UserService userService = new UserService(); if(userService.login(loginUser)){ return "success"; } return "fail"; } } ``` 9. 在 src 目录中创建 struts.xml 文件,用于配置 Action 并设置页面导航
```xml
```xml
- 部署到 Tomcat 服务器
-
修改 login.jsp 代码
```jsp <%-- Created by IntelliJ IDEA. User: YIYI Date: 2021/9/27 Time: 10:22 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags"%>
登录 ``` 13. 运行结果 14.
```
```
(四)实验总结
- 在修改代码之前,login.jsp 的代码很显然是不正确的,需要将 HTML 标签改为 Struts2 的标签
jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
2. 由于 struts 2.3 版本和 2.5 版本发生了较大变化,一开始安装了 2.5 版本,struts.xml 文件配置错误,出现了 404 错误;
3. Action 属性赋值关系:
JSP 中的 name 属性的值对应 Action 类中数据对象名,若数据对象的数据成员为对象则使用如下格式 例子:loginUser.name.first
Action 类中 execute 方法的返回值为字符串,在 struts.xml 中为该返回值配置映射; 4. 根据容器配置,服务器将请求转到 FilterDispatcher 进行处理,进入 Struts2 流程; 5. struts 框架会在 struts.xml 配置文件中查找对应的 action 类,初始化该 action,执行 set 方法,再执行 execute 方法; 6. 框架根据 execute 方法返回的字符串和配置文件信息进行匹配,进而返回结果页面。 7. Action 具有很好的代码复用性,无需与 Servlet API 耦合,同时返回的字符串作为处理结果,使得结果处理更加灵活。
```xml
<package name="strutsBean" extends="struts-default">
<action name="login" class="d8b_38b4_b4bb961 com.example.action.UserAction">
<result name="success">/loginSuccess.jsp</result>
<result name="fail">/loginFail.jsp</result>
</action>
</package>
```
二、提高实验——Struts2 标签
(一)实验目的
- 进一步熟悉 Struts2 应用的基本开发步骤和常规配置;
- 进一步熟悉 Action 及配置文件 struts.xml 的应用方法;
- 掌握 Struts2 标签的基本使用方法;
- 能熟练使用 Struts2 的常用标签,能参考 Struts2 标签的使用说明文档,对各类标签进行灵活应用;
(二)基本知识与原理
- 使用 Struts2 标签的形式来表达页面逻辑,可以尽量避免在视图中使用 Java 代码,让逻辑与显示分离,提高视图的可维护性;
- Struts2 标签库的主要 tld 文件为 struts-tags.tld,在 struts2-core-2.3.15.1.jar 包中,另一个与 AJAX 相关的标签库 tld 文件为 struts-dojo-tags.tld,在 struts2-dojo-plugin-2.3.15.1.jar 包中;
- Struts2 标签的使用步骤和使用 JSTL 相同,只需在 JSP 页面中使用 taglib 指令引入标签库中 tld 文件的 uri,并指定前缀即可,例如:<%@ taglib prefix="s" uri="/struts-tags"%>;
- 根据 Struts2 标签的主要作用,可以将其分为:用于生成页面元素的 UI 标签、用于实现流程控制的控制类标签、用于控制数据的数据标签和用于支持 AJAX 的标签。
(三)实验内容及步骤
- 导入 struts2-dojo-plugin-2.3.37.jar 包到 lib 目录下,并加入依赖
- 新建 register.jsp 页面作为用户注册的视图,页面使用 Struts2 的 UI 标签来生成表单元素,包括用户名、密码、确认密码、真实姓名、性别、生日、联系地址、联系电话和电子邮箱:
```jsp
<%--
Created by IntelliJ IDEA.
User: yiyi
Date: 2021/9/27
Time: 14:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
``` 3. 新建 regFail.jsp 页面,作为注册失败的试图,显示“注册失败” 4. 新建 regSuccess.jsp 页面,作为注册成功试图,使用 Struts2 的数据标签和控制标签来生成注册成功的信息,并将登录用户信息保存在会话范围内。
```jsp
<%--
Created by IntelliJ IDEA.
User: yiyi
Date: 2021/9/27
Time: 14:37
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
``` 5. 修改 UserBean 类
``` package com.example.bean;
public class UserBean { private String account=""; private String password=""; private String repassword=""; private String name=""; private String sex=""; private String birthday=""; private String address=""; private String phone=""; private String email=""; public String getAccount() { return account; }
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
} ``` 6. 修改 UserService.java,增加用户注册逻辑,为简化注册逻辑,健注册成功的条件设置为:用户名、密码和确认密码相同,而且不为空字符串;
java
public boolean register(UserBean registerUser){
if(registerUser.getAccount().equals(registerUser.getPassword()) && registerUser.getPassword().equals(registerUser.getRepassword()) && !registerUser.getAccount().equals("")){
return true;
}
return false;
}
7. 修改 UserAction.java 中的 execute()方法,用于调用注册逻辑,并根据注册结果返回不同内容
java
public String execute(){
UserService userService = new UserService();
if(userService.register(loginUser)){
return "success";
}
return "fail";
}
8. 修改 struts.xml 文件,对用户注册进行配置并设置页面导航
xml
<action name="register" class="e5b_54dd_dd53af0 com.example.action.UserAction">
<result name="success">/regSuccess.jsp</result>
<result name="fail">/regFail.jsp</result>
</action>
9. 重新部署到 Tomcat 服务器,运行。
(四)实验总结
本次实验未出现 BUG,但修改原 execute 的方法不是合乎常理的操作,应该要再创建一个 Action 来处理注册业务,而不能捡芝麻丢西瓜。
三、拓展实验——Struts2 的国际化
(一)实验目的
- 进一步熟悉 Struts2 标签的基本使用方法;
- 能使用 Struts2 标签实现国际化;
- 了解配置文件 struts.properties 以及国际化资源文件的作用和基本使用方法。
(二)基本知识与原理
- 通过将不同语言版本的字符保存在属性文件中,Struts2 的国际化机制能够在不需要修改程序主体的前提下,实现不同语言版本的应用;
-
在 Web 应用中选择需要进行国际化的内容,不在页面中直接输出该信息,而是通过 Struts2 标签输出一个键值,该键值在不同语言环境下对应不同的字符串;如::
- 需要进行国际化的内容以键值对(key=value)的形式写入 Struts2 的国际化资源文件中,如“login.account.lable=请输入用户名”;该资源文件名可以自定义,但后缀必须是 properties;资源文件应放在 Web 应用的类加载路径下;每一个语言版本需要创建一个资源文件;
- 通过 Struts2 的配置文件 struts.properties 来配置资源文件的基础名,若资源文件的基础名为 message,则 message_zh_CN.properties 是对应的中文资源文件,message_en_US.properties 是对应的美国英语资源文件;
- 浏览器将根据其默认的语言版本,自动调用相应语言的资源文件,从而在页面中展示不同的语言效果。
(三)实验内容及步骤
- 在 src 目录下创建一个 cn.edu.zjut.local 包,把所有的资源文件放置其中,如:message_zh_CN.properties、message_en_US.properties 等;
properties
#message_en_US.properties
login.account.lable=Please input your account
login.password.lable=Please input your password
login.submit.button=submit
properties
#message_zh_CN.properties
login.account.lable=请输入用户名
login.password.lable=请输入密码
login.submit.button=登录
2. 对资源文件进行重新编码,避免乱码问题;
properties
#message_zh_CN.properties
login.account.lable=请输入用户名
login.password.lable=请输入密码
login.submit.button=登录
3. src 目录中创建 struts.properties 文件,通过它加载资源文件:
properties
struts.custom.i18n.resources=cn.edu.zjut.local.message
struts.i18n.encoding=GBK
4. 修改 login.jsp、loginSucess.jsp 和 loginFail.jsp 页面,通过 Struts2 标签实现国际化;
```jsp
<s:textfield name="loginUser.account" key="login.account.lable"/>
<s:password name="loginUser.password" key="login.password.lable"/>
<s:submit name="submit" key="login.submit.button"/>
``` 5. 重新部署到 Tomcat 服务器 6. 设置浏览器首选语言选项,访问 login.jsp 页面,观察并记录运行结果;
中文时访问
修改浏览器语言为英语
英文时访问
7. 修改用户注册模块
```properties #message_en_US.properties login.account.lable=Please input your account login.password.lable=Please input your password login.submit.button=submit
register.account.lable=Please input your account register.password.lable=Please input your password register.repassword.lable=Please input your password again register.sex.lable=Please input your sex register.birthday.lable=Please input your birthday register.address.lable=Please input your address register.phone.lable=Please input your phone register.email.lable=Please input your email register.submit.button=Sign up register.reset.button=Reset ```
```properties #message_zh_CN.properties login.account.lable=请输入用户名 login.password.lable=请输入密码 login.submit.button=登录
register.account.lable=请输入用户名 register.password.lable=请输入密码 register.repassword.lable=请再次输入密码 register.sex.lable=请输入性别 register.birthday.lable=请输入生日 register.address.lable=请输入联系地址 register.phone.lable=请输入手机号 register.email.lable=请输入电子邮箱 register.submit.button=注册 register.reset.button=重置 ```
创建 UserRegisterAction.java 类处理注册业务
```java package com.example.action;
import com.example.bean.UserBean; import com.example.service.UserService;
public class UserRegisterAction { private UserBean loginUser; public UserBean getLoginUser(){ return loginUser; } public void setLoginUser(UserBean loginUser){ this.loginUser = loginUser; } public String execute(){ UserService userService = new UserService(); if(userService.register(loginUser)){ return "success"; } return "fail"; } } ```
修改 struts2.xml 配置
```xml
<package name="strutsBean" extends="struts-default">
<action name="login" > <result name="success">/loginSuccess.jsp</result> <result name="fail">/loginFail.jsp</result> </action> <action name="register" > <result name="success">/regSuccess.jsp</result> <result name="fail">/regFail.jsp</result> </action> </package>
```
运行结果
(四)实验总结
通过 struts2 标签进行国际化能够使得一个网站多出一个 properties 资源文件即可完成不同语言的页面,而且各语言之间无耦合,修改非常方便。
通过本次实验,熟悉了 struts2 进行国际化的方式以及对 struts2 框架有了进一步的理解。
参考文献
- 基于SSH2的CRM系统的开发(西安工程大学·李久鑫)
- 基于SSH2的CRM系统的开发(西安工程大学·李久鑫)
- 基于MVC的Struts框架的应用研究(武汉理工大学·叶长春)
- 基于Struts和Hibernate的人事管理系统的分析与设计(南京理工大学·陈卫琴)
- 基于SSH多层框架Web应用系统的研究与设计(沈阳工业大学·慕德胜)
- 低保管理系统二期工程医疗救助子系统的设计与实现(山东大学·王晓黎)
- 基于Struts+Spring+Hibernate架构的综合积分系统的研究与实现(西南交通大学·鲁霞)
- 基于SSH2的CRM系统的开发(西安工程大学·李久鑫)
- 基于SSH2的CRM系统的开发(西安工程大学·李久鑫)
- 基于Struts与设计模式的网上购书系统(浙江大学·杨振超)
- 基于Struts+Spring+Hibernate架构的综合积分系统的研究与实现(西南交通大学·鲁霞)
- 基于SSH2的CRM系统的开发(西安工程大学·李久鑫)
- 基于Struts框架的应用系统的研究与开发(吉林大学·王斐)
- 基于Struts框架的J2EE Web应用的研究和实现(武汉大学·刘奕)
- 基于MVC的Struts框架的应用研究(武汉理工大学·叶长春)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码导航 ,原文地址:https://bishedaima.com/yuanma/35974.html