Java进阶:Struts多模块的技巧

Java进阶: Struts多模块的技巧

简介

在今天的互联网中,Web 应用开发已经成为技术人员的必备技能。Struts 多模块则是其中的一个重要技能。本文将详细讲述如何在 Struts 中使用多模块,并提供两个示例供读者参考。

概述

Struts 是一个基于 MVC 模式,面向 Web 开发的框架。在使用 Struts 进行 Web 应用开发时,我们通常需要考虑到多个模块之间的调用关系。为了解决这个问题,就需要使用 Struts 多模块技巧。

配置多模块

在 Struts 中使用多模块需要进行如下配置:

1. 在 struts.xml 中添加模块

在 struts.xml 中添加相应的模块:

<struts>
    <package name="default">
        <action name="index" class="com.example.IndexAction">
            <result name="success">/index.jsp</result>
        </action>
    </package>

    <package name="admin" extends="default">
        <action name="login" class="com.example.admin.LoginAction">
            <result name="success">/admin/index.jsp</result>
        </action>
    </package>
</struts>

上面的配置定义了两个模块:default 和 admin。其中,admin 模块继承 default 模块,可以使用 default 模块中定义的 action 和 result。

2. 配置模块拦截器

在 struts.xml 中添加拦截器,配置拦截器栈:

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="default">
        <default-interceptor-ref name="defaultStack" />
        <action name="index" class="com.example.IndexAction">
            <result name="success">/index.jsp</result>
        </action>
    </package>

    <package name="admin" extends="default">
        <default-interceptor-ref name="adminStack" />
        <action name="login" class="com.example.admin.LoginAction">
            <result name="success">/admin/index.jsp</result>
        </action>
    </package>

    <interceptors>
        <interceptor-stack name="adminStack">
            <interceptor-ref name="exception"/>
            <interceptor-ref name="alias"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="params">
                <param name="excludeParams">dojo\..*</param>
            </interceptor-ref>
            <interceptor-ref name="servletConfig"/>
            <interceptor-ref name="prepare"/>
            <interceptor-ref name="chain"/>
            <interceptor-ref name="debugging"/>
            <interceptor-ref name="scopedModelDriven"/>
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="checkbox"/>
            <interceptor-ref name="staticParams"/>
            <interceptor-ref name="actionMappingParams"/>
            <interceptor-ref name="params">
                <param name="excludeParams">^dojo\..*|^struts\..*|^method\..*|^action:*</param>
            </interceptor-ref>
        </interceptor-stack>
    </interceptors>
</struts>

上面的配置中定义了两个拦截器栈:defaultStack 和 adminStack。
其中,defaultStack 是默认拦截器栈,用于 default 模块。
adminStack 是针对 admin 模块的拦截器栈。

3. 拆分模块配置文件

将 moduleConfig.xml 拆分为多个文件,更新 struts.xml 配置文件:

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <include file="admin-struts.xml"/>

    <package name="default">
        <default-interceptor-ref name="defaultStack" />
        <action name="index" class="com.example.IndexAction">
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>

在上面的配置中,我们使用了 <include> 元素,将 admin-struts.xml
文件包含在 struts.xml 中。

示例一:简单示例

以登录功能为例,讲解如何使用 Struts 多模块实现:

1. index.jsp

<html>
<head>
    <title>登录系统</title>
</head>
<body>
    <form action="<s:url action='admin/login'/>" method="post">
        用户名:<input type="text" name="username" /><br />
        密码:<input type="password" name="password" /><br />
        <input type="submit" value="登录" />
    </form>
</body>
</html>

2. admin-struts.xml

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

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="admin" extends="default">
        <default-interceptor-ref name="adminStack" />
        <action name="login" class="com.example.admin.LoginAction">
            <result name="success">/admin/index.jsp</result>
        </action>
    </package>

    <interceptors>
        <interceptor-stack name="adminStack">
            <interceptor-ref name="exception"/>
            <interceptor-ref name="alias"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="params">
                <param name="excludeParams">dojo\..*</param>
            </interceptor-ref>
            <interceptor-ref name="servletConfig"/>
            <interceptor-ref name="prepare"/>
            <interceptor-ref name="chain"/>
            <interceptor-ref name="debugging"/>
            <interceptor-ref name="scopedModelDriven"/>
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="checkbox"/>
            <interceptor-ref name="staticParams"/>
            <interceptor-ref name="actionMappingParams"/>
            <interceptor-ref name="params">
                <param name="excludeParams">^dojo\..*|^struts\..*|^method\..*|^action:*</param>
            </interceptor-ref>
        </interceptor-stack>
    </interceptors>
</struts>

3. LoginAction.java

package com.example.admin;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

    private String username;
    private String password;

    public String execute() throws Exception {
        if("admin".equals(username) && "admin".equals(password)) {
            return SUCCESS;
        }
        return ERROR;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

示例二:高级示例

以上传文件功能为例,讲解如何使用 Struts 多模块实现:

1. index.jsp

<html>
<head>
    <title>上传文件</title>
</head>
<body>
    <form action="<s:url action='file/upload'/>" enctype="multipart/form-data" method="post">
        选择文件:<input type="file" name="file" /><br />
        <input type="submit" value="上传" />
    </form>
</body>
</html>

2. file-struts.xml

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

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="file" extends="default">
        <default-interceptor-ref name="fileStack" />
        <action name="upload" class="com.example.file.UploadAction">
            <result name="success">/file/index.jsp</result>
        </action>
    </package>

    <interceptors>
        <interceptor-stack name="fileStack">
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="basicStack"/>
        </interceptor-stack>
    </interceptors>
</struts>

3. UploadAction.java

package com.example.file;

import java.io.File;

import org.apache.commons.io.FileUtils;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {

    private File file;
    private String fileContentType;
    private String fileFileName;

    public String execute() throws Exception {
        String filePath = "C:/upload";
        File dir = new File(filePath);
        if(!dir.exists()) {
            dir.mkdirs();
        }
        FileUtils.copyFile(file, new File(dir, fileFileName));
        return SUCCESS;
    }

    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public String getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
}

总结

以上是 Struts 多模块的技巧攻略。使用 Struts 多模块可以更方便地管理 Web 项目,并且提高开发效率。读者可以根据上述两个示例进行实践和学习。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java进阶:Struts多模块的技巧 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 教你怎么用Java操作Redis

    下面为你详细讲解如何使用Java操作Redis: 1. 前置条件 在使用Java操作Redis之前,你需要确保已经完成以下步骤: 在本地或者服务器上安装Redis并启动。 在Java项目中引入Redis的Java客户端依赖包,例如Jedis或Lettuce。 2. 连接Redis 在Java中连接Redis的方式很简单,只需要创建一个Redis客户端对象,设…

    Java 2023年5月26日
    00
  • Spring Boot 2.x基础教程之配置元数据的应用

    让我来详细介绍一下“Spring Boot 2.x基础教程之配置元数据的应用”的完整攻略。 什么是配置元数据 首先,我们需要了解一下什么是配置元数据。在Spring Boot中,配置元数据用于描述Spring应用程序的结构和配置。这些元数据包括应用程序的配置信息,例如应用程序的名称、端口号、日志文件路径等。通常,可以使用application.propert…

    Java 2023年5月19日
    00
  • spring scheduled单线程和多线程使用过程中的大坑

    介绍 在使用Spring框架的Scheduled定时任务功能时,我们可以通过配置ThreadPoolTaskExecutor来实现多线程执行定时任务。但是在使用过程中,可能会遇到一些坑,比如在多线程执行过程中,由于任务执行的时间过长,而ThreadPoolTaskExecutor线程池中可用线程数量过少,可能造成任务阻塞,从而导致已经执行的任务无法被及时释放…

    Java 2023年5月19日
    00
  • Springboot安全框架整合SpringSecurity实现方式

    Spring Boot 安全框架整合 Spring Security 实现方式 Spring Boot 是基于 Spring 框架的快速开发框架,而 Spring Security 是 Spring 生态中的安全框架,提供了安全认证、授权等功能。本文将介绍如何在 Spring Boot 中整合 Spring Security 实现安全认证和授权。 Sprin…

    Java 2023年5月20日
    00
  • java Long类型转为json后数据损失精度的处理方式

    标准的JSON格式对于整型数字的最大范围支持是64位的有符号数字的取值范围,而在Java中Long类型是一个64位的有符号整数,因此在转换为JSON格式时,理论上不会存在数据范围限制和数据精度丢失的问题。但是在Java程序中经常会使用第三方JSON组件将Java对象转换为JSON格式的字符串进行传输和存储。此时需要注意JSON组件的一些特殊处理和配置,避免数…

    Java 2023年5月26日
    00
  • Java如果通过jdbc操作连接oracle数据库

    以下是Java通过JDBC连接Oracle数据库的完整攻略,包括代码示例和详细步骤: 一、准备工作 1. 下载Oracle JDBC驱动 首先,我们需要下载Oracle官方的JDBC驱动。我们可以在Oracle官网上下载,或者通过与Oracle数据库的连接成功时给出的链接下载安装。在这里我们以”ojdbc8.jar”为例。 2. 配置Java环境变量 将”o…

    Java 2023年5月19日
    00
  • Java 注解学习笔记

    下面我来为您详细讲解“Java 注解学习笔记”的完整攻略。 什么是Java注解? Java注解(Annotation),也叫元数据(metadata),为我们在代码中添加信息提供了一种形式化的方法,使我们可以在运行时和编译时进行代码分析。它可以用于向编译器、虚拟机和其他工具提供元数据。 Java注解使用@注解名的方式表达,例如@Override是Java内置…

    Java 2023年5月26日
    00
  • java数据库开发之JDBC的完整封装兼容多种数据库

    Java作为一种流行的编程语言,在数据库开发中也日益受到重视。它提供了一种被广泛使用的面向关系型数据库开发的API — JDBC。JDBC提供了一种标准的接口,使得Java开发人员可以使用Java语言轻松地操作各种关系型数据库。 然而,使用标准的JDBC API进行数据库开发也有它的缺陷。首先,JDBC的API较为复杂,需要程序员编写大量的重复性代码。此外…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部