如何用maven从零开始搭建一个struts2项目?

在现代Java Web开发中,将强大的依赖管理工具Maven与经典的MVC框架Struts2相结合,是一种高效且规范的项目构建方式,Maven能够自动化处理项目构建、报告和文档,同时统一管理项目所需的第三方库(JAR包),极大地简化了开发环境的配置和团队协作,本文将详细介绍如何通过Maven来配置一个标准的Struts2项目,从项目创建到成功运行,涵盖所有关键步骤。

如何用maven从零开始搭建一个struts2项目?

创建基于Maven的Web项目

我们需要创建一个Maven管理的Web应用程序骨架,这通常通过使用Maven的archetype(项目模板)来完成,打开命令行工具,执行以下命令:

mvn archetype:generate -DgroupId=com.example -DartifactId=struts2-demo -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

这条命令会创建一个名为struts2-demo的目录,其内部包含了标准的Maven Web项目结构,包括src/main/javasrc/main/resourcessrc/main/webapp等目录,以及核心的pom.xml配置文件。

配置pom.xml文件

pom.xml是Maven项目的核心,用于定义项目的基本信息、依赖、插件等,配置Struts2主要就是在这里添加相关的依赖项。

添加Struts2核心依赖

打开项目根目录下的pom.xml文件,在<dependencies>节点内添加Struts2的核心依赖,建议使用一个较新的稳定版本,例如2.5.x系列。

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.30</version>
</dependency>

添加其他必要依赖

Struts2的正常运行还需要其他一些库的支持,为了确保项目完整且稳定,建议一并添加以下依赖。

依赖 用途 scope说明
javax.servlet-api Servlet API,用于编译时检查,运行时由Tomcat等容器提供 provided
org.apache.logging.log4j 日志框架,Struts2 2.5+默认集成Log4j2 compile
org.apache.logging.log4j.core Log4j2核心实现 compile

以下是这些依赖在pom.xml中的配置示例:

<!-- Servlet API (由服务器提供) -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
<!-- Log4j2 日志依赖 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.17.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.2</version>
</dependency>

配置完成后,Maven会自动从中央仓库下载这些JAR包到本地仓库,并将其添加到项目的类路径中。

配置web.xml

web.xml是Web应用的部署描述文件,所有进入Web应用的HTTP请求都会经过它,要让Struts2框架生效,必须在此文件中配置Struts2的核心过滤器。

如何用maven从零开始搭建一个struts2项目?

src/main/webapp/WEB-INF/web.xml中添加如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <display-name>Struts2 Demo Application</display-name>
    <!-- Struts2 核心过滤器配置 -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

这里,StrutsPrepareAndExecuteFilter是Struts2的入口,它负责拦截所有请求(),并根据struts.xml的配置将请求分发给相应的Action处理。

创建struts.xml配置文件

struts.xml是Struts2框架的核心配置文件,用于定义Action、结果页面、拦截器等,该文件通常放置在src/main/resources目录下,这样Maven在打包时会自动将其复制到WEB-INF/classes目录下。

src/main/resources目录下创建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.devMode" value="true" />
    <package name="default" extends="struts-default" namespace="/">
        <!-- 定义一个名为hello的Action -->
        <action name="hello" class="com.example.action.HelloWorldAction">
            <!-- 配置Action执行成功后跳转的页面 -->
            <result name="success">/hello.jsp</result>
        </action>
    </package>
</struts>

这个配置定义了一个名为hello的Action,它由com.example.action.HelloWorldAction类处理,当处理成功(返回”success”字符串)时,请求会被转发到/hello.jsp页面。

创建Action和JSP页面

根据struts.xml的配置,我们需要创建对应的Action类和JSP页面。

src/main/java目录下创建包com.example.action,并在其中创建HelloWorldAction.java

package com.example.action;
public class HelloWorldAction {
    private String message;
    public String execute() {
        message = "Hello, Struts2 with Maven!";
        return "success"; // 返回的逻辑视图名,与struts.xml中的<result>匹配
    }
    public String getMessage() {
        return message;
    }
}

src/main/webapp目录下创建hello.jsp

如何用maven从零开始搭建一个struts2项目?

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>Hello Struts2</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>

运行与测试

至此,一个基础的Maven管理的Struts2项目已经配置完成,你可以将项目部署到Tomcat等Servlet容器中运行,启动服务器后,在浏览器中访问 http://localhost:8080/struts2-demo/hello.action,如果一切正常,页面将显示 “Hello, Struts2 with Maven!”。

通过以上步骤,我们成功地利用Maven构建了一个结构清晰、依赖管理规范的Struts2应用程序,这种方式不仅简化了初始配置,也为项目的后续维护和扩展奠定了坚实的基础。


相关问答FAQs

Q1: 在Maven项目中,为什么有时会出现ClassNotFoundExceptionNoClassDefFoundError,即使我已在pom.xml中添加了依赖?

A1: 这个问题通常由以下几个原因造成:

  1. 依赖范围错误:检查pom.xml中依赖的<scope>设置。javax.servlet-api应设置为provided,因为它由Web容器(如Tomcat)提供,如果错误地设置为compileruntime,可能会导致容器自带的类库与项目中的产生冲突。
  2. 依赖未正确传递:某些依赖需要其他依赖才能工作,虽然Maven会处理传递性依赖,但有时某些可选依赖不会被自动引入,你可以使用mvn dependency:tree命令分析项目的依赖树,查看是否存在缺失的依赖。
  3. 项目未重新编译/打包:在修改pom.xml后,需要确保项目被重新构建,在IDE中,执行RebuildReload Maven Projects操作,或者使用mvn clean install命令重新打包项目,确保所有依赖都被包含在最终的WAR文件中。

Q2: 如何利用Maven为不同的环境(如开发、测试、生产)配置不同的Struts2参数(例如struts.devMode)?

A2: 这可以通过Maven的Profile功能结合资源过滤来实现。

  1. 定义Profile:在pom.xml中定义多个Profile,每个Profile对应一个环境,并为每个环境设置不同的属性值。
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <struts.devMode>true</struts.devMode>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <struts.devMode>false</struts.devMode>
            </properties>
        </profile>
    </profiles>
  2. 启用资源过滤:在<build>节点中配置资源过滤,告诉Maven在处理资源文件时替换其中的占位符。
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        ...
    </build>
  3. 修改struts.xml:将struts.xml中的硬编码值替换为Maven属性占位符。
    <constant name="struts.devMode" value="${struts.devMode}" />
  4. 构建时指定Profile:在执行Maven命令时,使用-P参数激活指定的Profile,为生产环境打包时,使用命令mvn clean package -Pprod,Maven会使用prod Profile中定义的struts.devMode值(false)来替换struts.xml中的占位符。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/29833.html

(0)
上一篇 2025年10月26日 05:37
下一篇 2025年10月26日 05:38

相关推荐

  • 华为BFD配置后无法检测链路?故障排查与配置指南?

    BFD(Bidirectional Forwarding Detection,双向转发检测)是一种轻量级的网络协议,用于快速检测数据链路层的故障,并通知上层协议(如路由协议)快速收敛,从而提升网络的可靠性和可用性,BFD通过在两个对等体之间周期性地交换控制报文,检测链路的转发状态,一旦检测到故障,会立即通知上层……

    2026年1月8日
    01080
  • 安全应急响应哪家好?企业如何选靠谱服务?

    在数字化时代,安全威胁层出不穷,从数据泄露到勒索软件攻击,从系统瘫痪到业务中断,各类安全事件随时可能对企业造成难以估量的损失,建立高效、专业的安全应急响应能力已成为企业数字化转型的“必修课”,面对市场上琳琅满目的安全应急响应服务提供商,企业如何选择真正适合自身需求的合作伙伴?本文将从核心能力、服务范围、技术支撑……

    2025年11月17日
    0960
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 安全电子交易具体是干啥用的?有什么实际作用?

    构建可信的数字商业环境在数字化浪潮席卷全球的今天,电子交易已成为商业活动的主流形式,从在线购物到移动支付,从跨境贸易到金融服务,电子交易以高效便捷的优势重塑了商业生态,交易过程中涉及的资金流、信息流和物流也面临着前所未有的安全风险,如数据泄露、身份盗用、欺诈交易等,在此背景下,安全电子交易(Secure Ele……

    2025年11月4日
    01110
  • 已使用临时配置文件登陆是什么意思,如何解决临时配置文件问题

    已使用临时配置文件登陆通常是系统在无法读取用户原始配置文件时启动的一种保护性应急机制,这直接意味着用户的个人数据、系统设置及环境变量处于“丢失”或“隔离”的临时状态,核心结论是:这并非简单的系统卡顿,而是用户配置文件损坏、权限冲突或安全软件拦截的信号,必须立即停止写入新数据,并通过修复注册表或权限设置恢复原始配……

    2026年3月10日
    0161

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注