基于Struts2框架的用户登录模块

Struts 基础应用——基于 Struts2 框架的用户登录模块 一,基础实验——Struts2 框架搭建 (一)实验目的 掌握 Struts2 应用的基本开发步骤和常规配置; 观察表单参数与 Action 属性的赋值关系

本文包含相关资料包-----> 点击直达获取<-------

Struts 基础应用——基于 Struts2 框架的用户登录模块

一、基础实验——Struts2 框架搭建

(一)实验目的

  1. 掌握 Struts2 应用的基本开发步骤和常规配置;
  2. 观察表单参数与 Action 属性的赋值关系,观察 Action 的 execute()方法及其返回值,并能正确应用;
  3. 观察配置文件 struts.xml 中的主要元素及属性,并能够正确应用;
  4. 理解 Stuts2 框架中 MVC 设计模式的体现,理解 Action,FilterDispatcher,struts.xml 的主要作用,并能够正确应用。

(二)基础知识与原理

  1. Struts2 是从 WebWork 框架上发展起来的 MVC 框架;
  2. FilterDispatcher 是 Struts2 中的核心控制器,客户端对服务器端的请求将被 FilterDispatcher 过滤;若请求需要调用某个 Action,则框架将根据配置文件 struts.xml,找到需要调用的 Action 类;
  3. Action 类是一个符合一定命名规范的 JavaSE 类,作为业务控制器使用;Action 中的 execute()方法用于调用 Model 层的业务逻辑类,并根据返回结果决定页面导航;
  4. 若 Action 类中需要使用表单提交的请求参数,那么必须在 Action 类中声明与 表单域的名字对应的变量,并为变量提供 getters/setters 方法;
  5. Action 类需要在 struts.xml 中进行配置才能使用;
  6. 编译运行基于 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 文件上传依赖包

(三)实验内容及步骤

  1. 登录 http://struts.apache.org/download.cgi 站点,下载 Struts2 的最新版(Full Distribution);
  2. IDEA 中新建工程
  3. 加入 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

/loginSuccess.jsp /loginFail.jsp ``` 10. 编辑 Web 应用的 web.xml 文件,增加 Struts2 核心 Filter 配置

```xml

struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* ```

  1. 部署到 Tomcat 服务器
  2. 修改 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.

```

```

(四)实验总结

  1. 在修改代码之前,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 标签

(一)实验目的

  1. 进一步熟悉 Struts2 应用的基本开发步骤和常规配置;
  2. 进一步熟悉 Action 及配置文件 struts.xml 的应用方法;
  3. 掌握 Struts2 标签的基本使用方法;
  4. 能熟练使用 Struts2 的常用标签,能参考 Struts2 标签的使用说明文档,对各类标签进行灵活应用;

(二)基本知识与原理

  1. 使用 Struts2 标签的形式来表达页面逻辑,可以尽量避免在视图中使用 Java 代码,让逻辑与显示分离,提高视图的可维护性;
  2. 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 包中;
  3. Struts2 标签的使用步骤和使用 JSTL 相同,只需在 JSP 页面中使用 taglib 指令引入标签库中 tld 文件的 uri,并指定前缀即可,例如:<%@ taglib prefix="s" uri="/struts-tags"%>;
  4. 根据 Struts2 标签的主要作用,可以将其分为:用于生成页面元素的 UI 标签、用于实现流程控制的控制类标签、用于控制数据的数据标签和用于支持 AJAX 的标签。

(三)实验内容及步骤

  1. 导入 struts2-dojo-plugin-2.3.37.jar 包到 lib 目录下,并加入依赖
  2. 新建 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 的国际化

(一)实验目的

  1. 进一步熟悉 Struts2 标签的基本使用方法;
  2. 能使用 Struts2 标签实现国际化;
  3. 了解配置文件 struts.properties 以及国际化资源文件的作用和基本使用方法。

(二)基本知识与原理

  1. 通过将不同语言版本的字符保存在属性文件中,Struts2 的国际化机制能够在不需要修改程序主体的前提下,实现不同语言版本的应用;
  2. 在 Web 应用中选择需要进行国际化的内容,不在页面中直接输出该信息,而是通过 Struts2 标签输出一个键值,该键值在不同语言环境下对应不同的字符串;如:: 代码中的“请输入用户名”是需要国际化的内容,将其以键值代替为 ;
  3. 需要进行国际化的内容以键值对(key=value)的形式写入 Struts2 的国际化资源文件中,如“login.account.lable=请输入用户名”;该资源文件名可以自定义,但后缀必须是 properties;资源文件应放在 Web 应用的类加载路径下;每一个语言版本需要创建一个资源文件;
  4. 通过 Struts2 的配置文件 struts.properties 来配置资源文件的基础名,若资源文件的基础名为 message,则 message_zh_CN.properties 是对应的中文资源文件,message_en_US.properties 是对应的美国英语资源文件;
  5. 浏览器将根据其默认的语言版本,自动调用相应语言的资源文件,从而在页面中展示不同的语言效果。

(三)实验内容及步骤

  1. 在 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

相关推荐

  • 基于Python制作的记忆翻牌小游戏

    基于 Python 制作的记忆翻牌小游戏 导语 昨天看到有留言竟然说我是月更博主,我明明更新地这么勤快(心虚,jpg),看吧,昨天刚更新过,今天又来更新了
    2024年05月14日
    5 1 1
  • 在线文档管理系统

    这是一个🔥🔥基于SpringBoot框架的在线文档管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1
  • 基于JAVA EE的失物招领系统

    基于JAVA EE的失物招领系统 摘 要 随着社会,经济和科学技术的不断进步发展,快节奏的生活方式让学生在校园生活中频繁出现丢失物品的状况,使学生遭受了经济和精神上的伤害
    2024年05月14日
    2 1 1
  • 基于python的贪吃蛇游戏

    基于python的贪吃蛇游戏 1,项目简介 本项目为贪吃蛇游戏及自动寻路算法的实现,本项目分为两个小部分, 1,1 贪吃蛇游戏 本项目实现了带有 UI 界面的贪吃蛇游戏
    2024年05月14日
    1 1 1
  • 大学生租房平台

    这是一个🔥🔥基于SpringBoot框架的大学生租房平台设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于Python实现的论坛帖子情感分析

    基于Python实现的论坛帖子情感分析 一,课程项目 Scuinfo文本分类分析 二,项目类容 爬取川大匿名社区SCUinfo在一段时间内的帖子
    2024年05月14日
    6 1 1
  • cnn lstm的关系识别之Python

    cnn lstm的关系识别 Neural Relation Extraction (NRE) with wechat API 中文采用自主的一些数据集
    2024年05月14日
    1 1 1
  • 作业管理系统

    这是一个🔥🔥基于SpringBoot框架的作业管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于SpringBoot框架的医护人员排班系统

    这是一份采用Java语言编写的🔥🔥SpringBoot框架为基础的医疗人员调度系统源代码🔥🔥,该项目运用了SpringBoot和Vue技术栈,开发工具为Idea或Eclipse
    2024年05月23日
    2 1 1
  • 基于SpringBoot框架的美容院管理系统

    这是一套采用Java语言,基于SpringBoot框架构建的美容院管理系统的源代码,项目中融入了Vue技术,开发工具为Idea或Eclipse,此高效实用的美容院管理方案
    2024年05月23日
    3 1 1

发表回复

登录后才能评论