【快速搭建系列】idea快速搭建struts2框架和测试

news2025/2/27 8:22:20

idea快速搭建struts2框架和测试示例

步骤

搭建环境

新建一个maven项目

添加maven依赖

pom.xml

<!-- ****************struts2框架包*************** -->
<!-- struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.33</version>
</dependency>



<!-- ****************可选*************** -->
<!-- lombok -->    
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.8</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- jsp-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

然后建好java和resources根目录包

请添加图片描述

然后这个时候可以看到当右键resources根目录时多了一个Struts Config的选项

这时就可以新建一个名为struts的struts配置文件了(因为导了包)

请添加图片描述

如果之前没有在idea中用过struts2的话需要先下载插件:

idea左上角file—settings

请添加图片描述

然后左边Plugins,输入struts2,下载一下插件

请添加图片描述

在web.xml设置struts2的过滤器

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <!-- struts2的过滤器 -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.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>

然后创建如图项目结构

请添加图片描述

tips:因为只有struts2框架所以没办法连后端数据库,所以dao和service就这样空着了

然后先来写一个测试是否能够访问的小例子

测试

测试运行

action相当于controller

在action包下创建一个测试action

TestAction.java
package com.r.action;

/**
 * @Author Tuerlechat,
 * @Date 2022/11/8
 */
public class TestAction {
    public String execute() {
        System.out.println("TestAction类被调用了。");
        return "test";  //返回的结果
    }
}

然后在webapp中新建一个test.jsp

test.jsp
<%--
  Created by IntelliJ IDEA.
  User: Tuerlechat,
  Date: 2022/11/8
  Time: 19:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Test</title>
</head>
<body>
<h2>我是test页面</h2>
</body>
</html>

然后配置struts2的配置文件

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随便起一个就行 -->
    <package name="test" namespace="/" extends="struts-default">
        <!-- action的name是访问路径-->
        <action name="test"
                class="com.r.action.TestAction"
                method="execute">
            <!-- 当结果是test时转到test.jsp页面 -->
            <result name="test">/test.jsp</result>
        </action>
    </package>

</struts>

这时候可能会爆红,但不需要管

然后部署tomcat,运行

运行结果

请添加图片描述

控制台显示

请添加图片描述

可以看到控制台显示的时候说明成功访问了test路径,也就是成功进入到了TestAction这个类中的方法

说明搭建struts2框架环境成功

登录小例子

HelloStrutsAction.java
package com.r.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.r.model.User;
import lombok.Getter;
import lombok.Setter;

import java.util.Map;

/**
 * @Author Tuerlechat,
 * @Date 2022/11/8
 */
@Getter
@Setter
public class HelloStrutsAction extends ActionSupport {

    private User user;

    @Override
    public String execute() throws Exception {
        System.out.println("用户名:" + user.getUserName());
        System.out.println("密码:" + user.getPassword());

        if ("admin".equals(user.getUserName()) && "1234567".equals(user.getPassword())) {
            // 将user对象保存在session中
            Map<String, Object> session = null;
            session = ActionContext.getContext().getSession();
            session.put("user_session", user);
            return "success";
        } else {
            return "fail";
        }
    }

}

实体类

User.java
package com.r.model;

import lombok.Data;

@Data
public class User {
    private String userName;
    private String password;

}

前端页面

login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
	<title>登录</title>
</head>

<body>
<form action="hello.action" method="post">
	用户名:<input type="text" name="user.userName" /><br />
	密&nbsp;码:<input type="password" name="user.password" /><br />
	<input type="submit" />
</form>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8"  isELIgnored="false" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>

<body>
欢迎您,${sessionScope.get("user_session").userName}
</body>
</html>
fail.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>登录失败</title>
</head>

<body>
用户名或密码不匹配。
</body>
</html>

struts2配置文件

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

<!-- 关闭测试环境 -->
<!--<constant name="struts.devMode" value="false" />-->
<!-- 做动态action处理配置 -->
<!--<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>-->

    <package name="helloworld" namespace="/" extends="struts-default">

      <action name="hello" 
            class="com.r.action.HelloStrutsAction"
            method="execute">
            <result name="success">/success.jsp</result>
            <result name="fail">/fail.jsp</result>
      </action>
      <action name="test"
            class="com.r.action.TestAction"
            method="execute">
            <result name="test">/test.jsp</result>
      </action>
   </package>
</struts>
运行结果

登录页面

请添加图片描述

登录成功

请添加图片描述

登录失败

请添加图片描述

问题

开启服务器即开启无限404报错循环模式

无论是action,jsp,html什么都不行

全部404,而且后端不报错

解决方法

说明是项目结构有问题

具体原因不清楚

点击idea左面file下的Project Structure

请添加图片描述

然后点击Facets,添加Struts2

请添加图片描述

然后ok

请添加图片描述

然后按图步骤添加

请添加图片描述

请添加图片描述

请添加图片描述

这两个项目结构配置,添加删除,然后tomcat也重新配置一下,无限循环到好了为止(一般是重新改一次就好了)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决 80% 的工作场景?GitHub 爆赞的 Java 高并发与集合框架,太赞了

在工作中&#xff0c;笔者经常和掌握不同技术的朋友讨论具体问题的解决方案&#xff0c;发现在 Java 体系中&#xff0c;大家使用最多的是 Java 集合框架&#xff08;JCF&#xff09;和 Java 并发工具包&#xff08;JUC&#xff09;。实际上&#xff0c;JCF 和 JUC 已经能够覆盖…

曼孚科技入选IDC中国数据智能市场代表厂商

日前&#xff0c;国际知名市场调研机构IDC发布了《Market Glance&#xff1a;中国数据智能市场概览&#xff0c;2022》报告。 报告全面展示了中国数据智能市场的构成与格局&#xff0c;同时遴选出不同细分市场领域的主要技术服务供应商&#xff0c;并依此绘制出市场地图&#…

【window 安装多环境python冲突 -已解决】

简介&#xff1a;在window上面那幢一个python原生环境时没有问题 但是在安装anaconda&#xff0c;就会出现整个环境呗anaconda所占据< 首先我的环境目前装了三个环境&#xff0c;一个是python原生3.7 和3.10的&#xff0c;然后&#xff0c;因为涉及一些操作可能会用到多个版…

MYSQL中LIKE(模糊查询)

0 写在前面 通常我们在搜索的时候总是不会特别精准&#xff0c;例如在百度上搜索&#xff0c;主要搜索关键字&#xff0c;然后加载页面之后再挑选。 所以&#xff0c;在数据库中&#xff0c;有时候会将查询条件不一定直接使用uuid这样的标准查询。实际业务中可能存在模糊查询…

linux笔记(4):东山哪吒开发板(D1-H)测试gpio点亮LED

文章目录1.控制gpio电平高低的流程1.1 选PB2控制LED&#xff0c;对应的编号是GPIO341.2 进入目录 /sys/class/gpio1.3 生成gpio34目录1.4 进入gpio34目录1.5 设置IO方向为输出1.6 控制gpio34(PB2)电平高低附录&#xff1a;linux的GPIO编号和D1-H的IO对用关系参考文档&#xff1…

【vue】Jeecg框架使用过程中的注意事项:

文章目录1.连接后台地址&#xff1a;2.获取接口数据时&#xff1a;3.模糊查询&#xff1a;4.设置默认查询参数&#xff1a;5.数据字典&#xff1a;6.j-date显示时分秒&#xff1a;7.设置添加、编辑、删除、导入等按钮的显示与隐藏&#xff08;按钮权限&#xff09;8.设置列的显…

艾美捷NCTC-135培养基改良版(粉末)相关研究和类别

细胞培养基是生物制药生产的最关键原材料之一&#xff0c;是人工模拟细胞在休内生长的营养环境&#xff0c;提供细胞营养和促进细胞生长增殖的物质基础。培养基主要也括有血清培养基、无血清细胞培养基、化学限定培养基。 无血清细胞培养基的发明是培养基发展史的一个里程碑。无…

如何一键生成活动邀请函的分享链接?

想设计一个活动邀请函但不会编程怎么办&#xff1f;想制作个能播放视频的邀请函要怎么做&#xff1f;今天小编就教你如何使用在线工具乔拓云去制作一个活动邀请函&#xff0c;不仅不用编程而且还有模板能一键套用&#xff0c;下面小编就教你如何使用这个在线工具去制作一个活动…

MongoDB学习二:基本常用命令--增删改查

基本常用命令 查看当前正在使用的数据库命令 db 另外&#xff1a; 数据库名可以是满足以下条件的任意UTF-8字符串。 不能是空字符串&#xff08;“”)。 不得含有’ &#xff08;空格)、.、$、/、\和\0 (空字符)。 应全部小写。 最多64字节。 有一些数据库名是保留的&#xff…

C语言无法实现的泛型编程,C++是如何实现的?模板

1.泛型编程 如何实现一个通用的交换函数&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left right;right temp; } void Swap(char& left, c…

rt-thread 之------fal移植

rt-thread 之 fal移植 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录rt-thread 之 fal移植前言一、fal是什么&#xff1f;二、移植1.片内flash fal移植step1&#xff1a;使能RT-Thread Components--->中的fal选…

MySQL查询优化实例

| 导语 通过几个小实例&#xff0c;对实际会经常用到的查询进行对比&#xff0c;通过MySQL的执行计划分析语句的执行性能&#xff0c;最后分析几个在实际中会遇到的小问题。 我们知道一般应用系统的读写比列在10:1左右&#xff0c;而且插入操作和一般的更新操作很少出现性能问…

jenkins的安装与配置(超详细)

Jenkins官网&#xff1a;https://jenkins.io/ 或 https://www.jenkins.io/zh/download/Jenkins官网文档&#xff1a;https://www.jenkins.io/zh/doc/jenkins安装包&#xff1a;http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/清华镜像&#xff1a;http://updates.jenkins…

SpringMVC学习篇(六)

SpringMVC之全局异常的处理 1 注解方式 1.1 准备工作 1.1.1 导入springmvc依赖和lombok依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.22</ve…

Nginx实现四层代理与七层代理

目录 一、实验环境准备 1、准备三台服务器 2、安装nginx环境 3、启动nginx环境 二、设置Nginx七层代理 1、proxy代理服务器配置&#xff08;轮询&#xff09; 2、设置加权轮询 3、健康检测功能 4、解决重复登录问题&#xff08;源地址哈希ip_hash&#xff09; 三、设…

StarRocks从入门到精通系列五:导入数据

StarRocks从入门到精通系列五:导入数据 一、导入总览二、从 Apache Kafka 持续导入三、使用 Apache Spark™ 批量导入四、从 Apache Flink持续导入一、导入总览 下图详细展示了在各种数据源场景下,应该选择哪一种导入方式。 数据导入是指将原始数据按照业务需求进行清洗、…

Springboot常用参数注解

访问路径为http://localhost:8080/ PathVariable GetMapping("/get/{id}/blank/{name}")public Map getValue(PathVariable("id") Integer id,PathVariable("name") String name,PathVariable Map<String,String> kv){Map map new Hash…

在Jeston NX上部署运行PaddleOCR教程(安装whl包方法)

文章目录基本概念介绍1.确定盒子环境pythonCUDAcuDNNTensorRT版本1.1 我还没有安装环境&#xff1a;一步到位整体安装1.2 我已经安装了环境&#xff1a;查询盒子环境版本1.3 默认python版本设置2.安装PaddlePaddle3. 安装PaddleOCR4. 运行例程5. 后续工作附&#xff1a;参考教程…

Java---Arrays类的常用方法

目录 1&#xff1a;Arrays常用的API方法 2&#xff1a;API方法具体举例 &#xff08;1&#xff09;toString方法 &#xff08;2&#xff09;sort方法 &#xff08;3&#xff09;binarySearch方法 &#xff08;4&#xff09;fill方法 &#xff08;5&#xff09;copyOf方法 …

如何在自己的项目中实现脚手架的命令行交互

背景 所在的公司大多数项目都是用Taro脚手架搭建的&#xff0c;因为业务上要实现多端开发 答应我&#xff0c;如果可以千万不要选择跨端开发&#x1f64f;。所以不同环境下运行、打包会有多个命令。如下图所示&#xff1a; 嗯&#xff1f;&#xff1f;好熟悉感觉在哪见过&…