Struts2登录系统实战

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Struts2是一个MVC框架,本例演示了如何使用Struts2实现用户登录功能。通过Action类、配置文件、拦截器和结果,开发者可以理解Struts2的核心概念和登录流程。本项目包含数据库脚本和源代码,可用于实际开发中。

1. Struts2框架简介

Struts2是一个基于MVC设计模式的Web应用程序框架,它提供了用于构建健壮、可扩展和可维护的Web应用程序的强大功能。Struts2框架的主要优点包括:

  • 基于MVC设计模式: Struts2采用MVC设计模式,将应用程序的业务逻辑、表示层和控制层分离,从而提高了代码的可维护性和可重用性。
  • 强大的标签库: Struts2提供了一个丰富的标签库,用于简化JSP页面的开发,并提高代码的可读性和可维护性。
  • 灵活的配置: Struts2通过struts.xml配置文件提供灵活的配置,允许开发人员根据应用程序的特定需求定制框架的行为。

2.1 Action类的基本结构

Action类是Struts2框架中处理用户请求和生成响应的核心组件。它的基本结构如下:

public class MyAction {

    // Action类的属性
    private String message;

    // Action方法
    public String execute() {
        // 业务逻辑
        this.message = "Hello World!";
        return SUCCESS;
    }

    // Action类的getter和setter方法
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

参数说明:

  • execute() 方法:这是Action类中的默认方法,当用户请求该Action时,Struts2框架会自动调用该方法。
  • SUCCESS :这是一个常量,表示Action方法执行成功。

代码逻辑分析:

  1. execute() 方法首先执行业务逻辑,在本例中是将 message 属性设置为 "Hello World!"
  2. 然后,该方法返回 "SUCCESS" ,表示该Action方法执行成功。
  3. Struts2框架将根据 struts.xml 配置文件中配置的 result 元素,将该Action方法的执行结果返回给用户。

扩展性说明:

Action类可以根据需要定义任意数量的属性和方法。属性通常用于存储Action处理过程中需要的数据,而方法用于执行业务逻辑。

2.1.1 Action类的包结构

Action类通常被放置在 com.company.struts2.action 这样的包结构中。这有助于将Action类与其他类型的类(如POJO、DAO)区分开来,并保持代码的组织性。

2.1.2 Action类的命名约定

Action类的命名通常遵循以下约定:

  • Action 结尾
  • 以业务逻辑或功能命名
  • 避免使用通用名称,如 BaseAction DefaultAction

例如:

public class UserAction {
    // ...
}

public class LoginAction {
    // ...
}

3. 配置文件设计与实现

3.1 struts.xml配置文件概述

Struts2框架的核心配置文件是struts.xml,它定义了应用程序的请求处理流程和组件配置。struts.xml配置文件通常位于项目的src/main/resources目录下。

配置文件结构

struts.xml配置文件由一系列 <package> 元素组成,每个 <package> 元素定义了一组相关的Action类和配置。 <package> 元素包含以下子元素:

  • <action> :定义一个Action类及其映射的请求路径。
  • <result> :定义一个Action方法执行后的结果,包括视图页面或重定向URL。
  • <interceptor> :定义一个拦截器,用于拦截Action方法的执行并执行特定的操作。

配置文件示例

以下是一个简单的struts.xml配置文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
  <package name="default" namespace="/">
    <action name="hello" class="com.example.HelloAction">
      <result name="success">/hello.jsp</result>
    </action>
  </package>
</struts>

3.2 Action配置

<action> 元素定义了一个Action类及其映射的请求路径。 <action> 元素具有以下属性:

  • name :Action类的名称。
  • class :Action类的完全限定类名。
  • method :要调用的Action方法的名称(可选)。
  • path :请求路径,用于将请求映射到Action类(可选)。

Action配置示例

以下是一个Action配置示例:

<action name="hello" class="com.example.HelloAction">
  <result name="success">/hello.jsp</result>
</action>

此配置将请求路径 /hello 映射到 com.example.HelloAction 类。当用户请求 /hello 时,框架将调用 HelloAction 类的默认方法( execute() 方法)。

3.3 Result配置

<result> 元素定义了一个Action方法执行后的结果。 <result> 元素具有以下属性:

  • name :结果的名称。
  • type :结果的类型,例如 dispatcher (转发到视图页面)或 redirect (重定向到URL)。
  • location :结果的位置,例如视图页面的路径或重定向的URL。

Result配置示例

以下是一个Result配置示例:

<result name="success">/hello.jsp</result>

此配置定义了一个名为 success 的结果,它将转发到 /hello.jsp 视图页面。

3.4 Interceptor配置

<interceptor> 元素定义了一个拦截器,用于拦截Action方法的执行并执行特定的操作。 <interceptor> 元素具有以下属性:

  • name :拦截器的名称。
  • class :拦截器的完全限定类名。
  • params :拦截器的参数(可选)。

Interceptor配置示例

以下是一个Interceptor配置示例:

<interceptor name="logging" class="com.example.LoggingInterceptor">
  <param name="logFileName">log.txt</param>
</interceptor>

此配置定义了一个名为 logging 的拦截器,它将使用 com.example.LoggingInterceptor 类进行日志记录。拦截器将使用 logFileName 参数指定日志文件的名称。

4. 拦截器设计与实现

4.1 拦截器的概念和作用

拦截器是一种在 Action 方法执行前后进行拦截处理的机制,它可以用来实现各种功能,例如:

  • 权限控制:检查用户是否有访问特定 Action 的权限。
  • 日志记录:记录 Action 的执行信息,便于调试和分析。
  • 性能监控:统计 Action 的执行时间,发现性能瓶颈。
  • 事务管理:在 Action 方法执行前后开启和关闭事务。

4.2 拦截器的生命周期

拦截器在 Action 方法执行前后执行,其生命周期包括以下几个阶段:

  1. 初始化阶段: 拦截器被创建并初始化,可以进行一些初始化操作,例如加载配置文件。
  2. 前置拦截阶段: 在 Action 方法执行之前执行,可以进行一些前置处理,例如权限检查。
  3. Action 方法执行阶段: Action 方法执行。
  4. 后置拦截阶段: 在 Action 方法执行之后执行,可以进行一些后置处理,例如日志记录。
  5. 销毁阶段: 拦截器被销毁,可以进行一些清理操作,例如关闭数据库连接。

4.3 常用拦截器的实现

Struts2 提供了一些常用的拦截器,可以满足大多数需求,包括:

  • defaultStack: 默认拦截器栈,包含了权限检查、日志记录、异常处理等功能。
  • annotationDriven: 基于注解的拦截器,可以简化拦截器的配置。
  • chain: 链式拦截器,可以将多个拦截器串联起来执行。
  • exception: 异常处理拦截器,可以捕获 Action 方法抛出的异常并进行处理。

4.4 自定义拦截器的开发

除了使用 Struts2 提供的常用拦截器之外,还可以开发自定义拦截器来满足特定需求。自定义拦截器的开发步骤如下:

  1. 创建拦截器类: 继承 Struts2 的 Interceptor 接口,并实现其方法。
  2. 配置拦截器: struts.xml 配置文件中配置拦截器,指定其拦截规则和参数。
  3. 使用拦截器: 在 Action 类中使用 @InterceptorRef 注解引用自定义拦截器。
public class MyInterceptor implements Interceptor {

    @Override
    public void init() {
        // 初始化操作
    }

    @Override
    public String intercept(Invocation invocation) throws Exception {
        // 前置拦截处理
        String result = invocation.invoke();
        // 后置拦截处理
        return result;
    }

    @Override
    public void destroy() {
        // 销毁操作
    }
}
<struts>
    <package name="default" extends="struts-default">
        <interceptors>
            <interceptor name="myInterceptor" class="com.example.MyInterceptor">
                <param name="param1" value="value1" />
            </interceptor>
        </interceptors>
        <action name="myAction" class="com.example.MyAction">
            <interceptor-ref name="myInterceptor" />
        </action>
    </package>
</struts>

5. 结果设计与实现

5.1 Result的概念和作用

Result是Struts2框架中用于将Action处理结果呈现给用户的组件。它可以将Action处理结果转换为各种格式,如HTML、JSON、XML等,并通过不同的方式(如重定向、转发)将结果呈现给用户。

5.2 常用Result类型的实现

Struts2框架提供了多种内置的Result类型,以满足不同的需求。以下是几个常用的Result类型:

  • DispatcherResult: 将Action处理结果转发到另一个Action。
  • FreemarkerResult: 将Action处理结果渲染为Freemarker模板。
  • JsonResult: 将Action处理结果转换为JSON格式。
  • RedirectResult: 将Action处理结果重定向到另一个URL。
  • StreamResult: 将Action处理结果作为流输出。
  • VelocityResult: 将Action处理结果渲染为Velocity模板。

5.3 自定义Result类型的开发

除了内置的Result类型外,用户还可以自定义Result类型以满足特定的需求。自定义Result类型需要实现 com.opensymphony.xwork2.Result 接口。

public class MyCustomResult implements Result {

    @Override
    public void execute(Invocation invocation) throws Exception {
        // 自定义结果处理逻辑
    }
}

在struts.xml配置文件中,可以使用 result-type 属性指定自定义Result类型:

<result name="myCustomResult" type="com.example.MyCustomResult" />

代码示例

以下是一个使用DispatcherResult的代码示例:

public class MyAction {

    public String execute() {
        // Action处理逻辑
        return "success";
    }
}
<struts.xml>
    <action name="myAction" class="com.example.MyAction">
        <result name="success" type="dispatcher">
            <param name="location">/success.jsp</param>
        </result>
    </action>
</struts.xml>

当Action处理完成后,DispatcherResult会将处理结果转发到 /success.jsp 页面。

逻辑分析

DispatcherResult的 execute() 方法会将Action处理结果转发到指定的URL。 location 参数指定要转发的URL。

参数说明

  • location :要转发的URL。

6. 数据库脚本设计与实现

6.1 数据库表结构设计

数据库表结构设计是数据库设计的基础,它决定了数据的存储方式和访问效率。在设计数据库表结构时,需要考虑以下原则:

  • 实体化原则: 将现实世界的实体抽象为数据库表。
  • 原子性原则: 表中的每一行都代表一个不可分割的实体。
  • 规范化原则: 消除数据冗余,确保数据的完整性和一致性。

6.2 SQL语句的编写和执行

SQL(结构化查询语言)是用于与数据库交互的语言。通过编写和执行SQL语句,可以对数据库中的数据进行查询、插入、更新和删除等操作。

查询语句

SELECT * FROM users WHERE name = 'John Doe';

插入语句

INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane.doe@example.com');

更新语句

UPDATE users SET name = 'John Smith' WHERE id = 1;

删除语句

DELETE FROM users WHERE id = 2;

6.3 数据库连接池的配置和使用

数据库连接池是一种管理数据库连接的机制,它可以提高数据库访问的性能和效率。连接池通过预先创建和维护一定数量的数据库连接,避免了每次访问数据库时都需要重新建立连接的开销。

在Struts2中,可以使用以下代码配置数据库连接池:

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
    <property name="username" value="root" />
    <property name="password" value="password" />
    <property name="initialSize" value="5" />
    <property name="maxTotal" value="10" />
</bean>

配置完成后,可以通过以下代码获取数据库连接:

Connection conn = dataSource.getConnection();

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Struts2是一个MVC框架,本例演示了如何使用Struts2实现用户登录功能。通过Action类、配置文件、拦截器和结果,开发者可以理解Struts2的核心概念和登录流程。本项目包含数据库脚本和源代码,可用于实际开发中。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值