IDEA Maven下Struts2注解踩坑解决
1.版本配置文件 版本推荐2.3 (2.5一下)
由于使用注解开发所以struts.xml或struts.properties 可以不使用,但是在整合Spring的时候需要这个文件来配置constant,这里就不多阐述整合问
我们在web.xml中配置应该是这个样子
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <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>
2.5及其以上的版本没有了ng这个文件,所以配置的时候请删除,但是好像IDEA会爆红但是无伤大雅
2.导包以及其他注解注入(这里不算是坑
这里推荐的还是lombok这个包可以结合有参构造和无参构造以及基本的Get Set方法构造
pom.xml导入
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.1.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.3.1.2</version> </dependency>
导入下面struts2以及plugin的时候会自己下载其他的包,所以我们不需要管
给个结合lombok的例子
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33package com.hj.action; import com.hj.Hjdao.HjUserDao; import com.hj.Hjpojo.HjUser; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.struts2.convention.annotation.*; import java.util.Map; @Namespace("/") @ParentPackage("struts-default") @Results({ @Result(name = "success", location = "/main.jsp"), @Result(name = "error", location = "/error.jsp") }) @Data @NoArgsConstructor public class HjLoginAction extends ActionSupport { private HjUser hjUser; @Action(value = "login") public String execute() throws Exception { HjUserDao hjUserDao = new HjUserDao(); hjUser = hjUserDao.cheackUser(this.hjUser.getName(),this.hjUser.getPassword()); if (hjUser!=null){ Map session = ActionContext.getContext().getSession(); session.put("login",hjUser); return SUCCESS; } else return ERROR; } }
这里无参构造只是为了符合开发标准,使用@Data则是为了获取到页面所传过来,我们所定义的HjUser类型数据,也就是构建了对应的 Get 和 Set
隐藏的代码(Get 和 Set):
复制代码
1
2
3
4
5
6
7
8public HjUser getHjUser() { return hjUser; } public void setHjUser(HjUser hjUser) { this.hjUser = hjUser; }
3.命名空间对应(小坑
在上面的代码中我们可以看到
复制代码
1
2@Namespace("/")
我们将这个action的命名空间改到了/
我们看一下jsp页面
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<%@ page language="java" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <body> <h2>Hello World!</h2> <s:form action="login" method="post" theme="simple" namespace="/" > <table> <caption>用户登录</caption> <tr> <td>登录名<s:textfield name="hjUser.name" size="20"/></td> </tr> <tr> <td>密 码<s:password name="hjUser.password" size="21"/></td> </tr> <tr> <td> <s:submit value="登录"/> <s:reset value="重置"/> </td> </tr> </table> </s:form> </body> </html>
jsp的表单中也有一个属性是namespace=“/”
这里我们的那个注解是不能省略的,否则会报一个错就是找不到这个命名空间 (这里还是推荐都进行命名)
4.注解插件究极大坑
总的下来就是这个卡了我近10个小时,到后面看到底层文件,看到扫描包的代码的时候我绷不住了,如果没有在struts.xml相关的配置文件中设置,默认只扫描名为action的包
这里给一下我的HjLoginAction的package
复制代码
1
2package com.hj.action;
目录结构
事例代码
JSP页面
index.jsp
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<%@ page language="java" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <body> <h2>Hello World!</h2> <s:form action="login" method="post" theme="simple" namespace="/" > <table> <caption>用户登录</caption> <tr> <td>登录名<s:textfield name="hjUser.name" size="20"/></td> </tr> <tr> <td>密 码<s:password name="hjUser.password" size="21"/></td> </tr> <tr> <td> <s:submit value="登录"/> <s:reset value="重置"/> </td> </tr> </table> </s:form> </body> </html>
error.jsp
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<%-- Created by IntelliJ IDEA. User: hj Date: 2022/9/6 Time: 9:56 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>Title</title> </head> <body> </body> </html>
main.jsp
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<%-- Created by IntelliJ IDEA. User: hj Date: 2022/9/6 Time: 9:55 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>登录成功</title> </head> <body> <h1>登录成功</h1> </body> </html>
web.xml
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <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> <display-name>bookManage</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
Java代码
action代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33package com.hj.action import com.hj.Hjdao.HjUserDao; import com.hj.Hjpojo.HjUser; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.struts2.convention.annotation.* import java.util.Map; @Namespace("/") //@ParentPackage("struts-default") @Results({ @Result(name = "success", location = "/main.jsp"), @Result(name = "error", location = "/error.jsp") }) @Data @NoArgsConstructor public class HjLoginAction extends ActionSupport { private HjUser hjUser; @Action(value = "login") public String execute() throws Exception { HjUserDao hjUserDao = new HjUserDao(); hjUser = hjUserDao.cheackUser(this.hjUser.getName(),this.hjUser.getPassword()); if (hjUser!=null){ Map session = ActionContext.getContext().getSession(); session.put("login",hjUser); return SUCCESS; } else return ERROR; } }
HjUserDao代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32package com.hj.Hjdao; import com.hj.HjDb.HjDbconn; import com.hj.Hjpojo.HjUser; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class HjUserDao implements HjUserMapper { private HjDbconn hjDbconn; @Override public HjUser cheackUser(String name, String password) throws ClassNotFoundException, SQLException { Connection connection = hjDbconn.getConn(); if (connection!=null) { PreparedStatement preparedStatement = connection.prepareStatement("select * from mbook where name =? and password=?"); preparedStatement.setObject(1, name); preparedStatement.setObject(2, password); ResultSet resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { HjUser hjUser = new HjUser(); hjUser.setId(resultSet.getInt(1)); hjUser.setName(resultSet.getString(2)); hjUser.setPassword(resultSet.getString(3)); hjUser.setRole(resultSet.getBoolean(4)); hjDbconn.CloseConn(); return hjUser; } } hjDbconn.CloseConn(); return null; } }
HjUserMapper代码
复制代码
1
2
3
4
5
6
7package com.hj.Hjdao; import com.hj.Hjpojo.HjUser; import java.sql.SQLException; public interface HjUserMapper { public HjUser cheackUser(String name, String password) throws ClassNotFoundException, SQLException; }
HjDbconn代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31package com.hj.HjDb; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException public class HjDbconn { public static Connection conn; public static String Driver="com.mysql.jdbc.Driver"; public HjDbconn() { } public static Connection getConn() { try { System.out.println("我在这里"); Class.forName(Driver); System.out.println("成功了"); conn = DriverManager.getConnection("要学会自己连接数据A.A"); return conn; } catch (Exception var1) { var1.printStackTrace(); return null; } } public static void CloseConn() { try { conn.close(); } catch (Exception var1) { var1.printStackTrace(); } } }
HjUser代
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14package com.hj.Hjpojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class HjUser { private Integer id; private String name; private String password; private Boolean role; }
总结
- 找了很多资料,但是网上IDEA配置蛮少的,后续大概可能似乎好像我会更新吧
- action这个东西在命名空间和扫描包上这个仇我记住了
- 拦截器那些也有注解,更多注解网上也有讲怎么用,自行搜索
最后
以上就是无语蜻蜓最近收集整理的关于IDEA Struts2注解的坑(有配置IDEA Maven下Struts2注解踩坑解决事例代码总结的全部内容,更多相关IDEA内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复