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 />
密 码:<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也重新配置一下,无限循环到好了为止(一般是重新改一次就好了)