基于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="t87_ed60_6085d85 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="u6a_7604_0491a09 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://m.bishedaima.com/yuanma/35974.html

相关推荐

  • Python分析中国大陆各直辖市及各省省会的平均工资与平均房价

    Python分析中国大陆各直辖市及各省省会的平均工资与平均房价 研究目的 近期网络上关于“躺平”的争论很多,但可以看出支持“躺平”的多是以90后为主的年轻人
    2024年05月14日
    4 1 1
  • python + dlib 进行人脸识别

    python人脸识别 人脸识别的主要算法 其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异,一般在0,6 以下都可以被认为是同一张脸 人脸识别的主要步骤 1 获得人脸图片 2 将人脸图片转为128D的矩阵(这个也就是人脸特征的一种数字化表现) 3 保存人脸128D的特征到文件中 4 获取其他人脸转为128D特征通过欧式距离算法与我们保存的特征对比
    2024年05月14日
    2 1 1
  • JSP实现基于Lucene框架的实时全文检索系统

    JSP实现基于Lucene框架的实时全文检索系统 摘 要 全文检索技术是现代信息检索的核心技术,它能够根据数据资料的内容而不是外在特征来进行信息检索
    2024年05月14日
    3 1 1
  • 基于SpringBoot框架的周边游旅游平台

    这是一套采用🔥🔥SpringBoot为核心的短途旅行平台源代码,主要编程语言为Java,并结合了SpringBoot和Vue,js技术栈,开发工具可以选择Idea或Eclipse
    2024年05月23日
    5 1 2
  • 基于SSM框架的快递管理系统源码

    使用SSM框架(SpringMVC + Spring + MyBatis)开发快递管理系统是当前互联网技术领域的一个重要研究方向,随着电子商务的兴起和快递业务的不断扩大
    2024年05月07日
    6 1 1
  • JAVA Web 中文乱码问题

    JAVA Web 中文乱码问题 本人初学,如有问题欢迎指正 教材《Java Web程序设计(第3版)》主编:郭克华,第8章 JSP内置对象(2)P129-P131 所示代码 : java //获得书名 String book=request
    2024年05月14日
    5 1 1
  • Pythonweb之工资管理系统

    软件工程课程设计实验报告 一,项目开发 引言 编写目的 为了保证项目团队按时保质地完成项目目标,便于项目团队成员更好地了解项目情况,使项目工作开展的各个过程合理有序
    2024年05月14日
    26 1 8
  • SSH体育场馆预定网站源码(javaee+mysql)

    SSH体育场馆预定网站源码(javaee+mysql) 基于SSH框架(spring+struts2+hibernate+mysql)实现的体育场馆预定管理系统是当今数字化社会的必然需求之一
    2024年05月07日
    4 1 2
  • 基于.net的超市收银系统源码

    在当前数字化时代,超市已成为人们日常购物的主要场所之一,为了提高超市收银效率和管理水平,研发一款高效稳定的超市收银系统具有重要意义,本研究旨在基于,net技术开发一款超市收银系统
    2024年05月07日
    3 1 1
  • 基于Python实现简历智能推荐算法

    摘 要 目前,越来越多不同特点的应聘者和越来越细化的岗位之间,存在巨大的信息不对称,因此高效,准确的将合适的人推荐到合适的岗位,有很大的实际意义,本文针对这一工程实践问题
    2024年05月14日
    4 1 1

发表回复

登录后才能评论