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中的throw和throws关键字是什么?

    在Java中,throw和throws关键字都与异常处理有关。 throw关键字 throw是一个关键字,用于抛出一个异常对象。我们可以使用throw来手动抛出一个异常,这通常在程序出错时使用。 throw的使用形式如下: throw exception; 其中,exception代表需要抛出的异常对象。 下面是一个示例,假设我们要写一个方法来处理两个数的除…

    Java 2023年4月28日
    00
  • C#中C/S端实现WebService服务

    针对这个问题,我为您详细解析一下C#中C/S端实现WebService服务的完整攻略并提供两个示例。 什么是WebService WebService(Web服务)是一种使用XML协议来进行应用程序之间的交流的服务,通过SOAP(简单对象访问协议)和HTTP(超文本传输协议) 来实现。WebService通常被用于不同平台之间的数据交互,例如Java web…

    Java 2023年5月19日
    00
  • spring mvc配置bootstrap教程

    Spring MVC 配置 Bootstrap 教程 Bootstrap 是一种流行的前端框架,用于快速构建响应式 Web 应用程序。在 Spring MVC 中,我们可以使用 Bootstrap 来美化我们的 Web 应用程序。本文将详细讲解 Spring MVC 配置 Bootstrap 的方法,包括引入 Bootstrap、配置资源处理器等。 引入 B…

    Java 2023年5月18日
    00
  • 使用IntelliJ IDEA2020.2.2 x64 新建java项目并且输出Hello World

    下面我会详细讲解使用IntelliJ IDEA 2020.2.2 x64新建Java项目并输出”Hello World”的完整攻略。 步骤1:下载和安装IntelliJ IDEA 首先你需要在官网https://www.jetbrains.com/idea/下载IntelliJ IDEA的最新版本并安装。 步骤2:新建Java项目 安装完成之后,启动Inte…

    Java 2023年5月26日
    00
  • 简述Java编程之关系操作符

    在讲解Java编程之关系操作符之前,先来了解一下什么是运算符。 运算符是指用于对一定数据类型的变量进行运算操作的一类特殊字符,可以分为算术运算符、关系运算符、逻辑运算符、位运算符等。 Java编程中的关系运算符主要用于比较两个变量之间的关系,得到的结果是boolean类型,即true或false。在Java中用于关系运算的符号有 ==、!=、>、&lt…

    Java 2023年5月26日
    00
  • JVM内存增强之逃逸分析

    JVM内存增强之逃逸分析是指在Java应用程序启动时,JVM在运行过程中动态的分析程序的对象生命周期,将对象的使用范围限制在方法内部,从而达到减少对象在堆上的分配、减少GC(垃圾回收)压力、提高应用程序的性能等目的的一种技术手段。 下面是JVM内存增强之逃逸分析的完整攻略: 1. 什么是逃逸分析? 逃逸分析是一种程序优化技术,它对程序中的对象进行分析,识别出…

    Java 2023年5月19日
    00
  • 详解Java如何实现数值校验的算法

    详解Java如何实现数值校验的算法 在Java中,数值校验是非常重要的一个操作。在开发过程中保证输入的数据的正确性非常关键,因此数值校验也是开发过程中经常需要用到的一项技术。下面我们将详细讲解如何实现数值校验的算法。 算法概述 数值校验的算法可以分为两类,分别是正则表达式和Java提供的API。 正则表达式实现 正则表达式是一种字符串匹配的技术,利用正则表达…

    Java 2023年5月19日
    00
  • Spark Streaming算子开发实例

    下面我将详细讲解“Spark Streaming算子开发实例”的完整攻略。 算子开发实例 1. 算子函数定义 首先,我们需要定义一个算子函数,其输入参数为RDD类型,输出参数为RDD类型。 def applyFunction(rdd: RDD[String]): RDD[String] = { rdd.flatMap(line => line.spli…

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