我是靠谱客的博主 无语蜻蜓,最近开发中收集的这篇文章主要介绍IDEA Struts2注解的坑(有配置IDEA Maven下Struts2注解踩坑解决事例代码总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

IDEA Maven下Struts2注解踩坑解决

1.版本配置文件 版本推荐2.3 (2.5一下)

由于使用注解开发所以struts.xml或struts.properties 可以不使用,但是在整合Spring的时候需要这个文件来配置constant,这里就不多阐述整合问

我们在web.xml中配置应该是这个样子

<?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导入

<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的例子

package 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):


public HjUser getHjUser() {
return hjUser;
}
public void setHjUser(HjUser hjUser) {
this.hjUser = hjUser;
}

3.命名空间对应(小坑

在上面的代码中我们可以看到

@Namespace("/")

我们将这个action的命名空间改到了/

我们看一下jsp页面

<%@ 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>密&nbsp;&nbsp;码<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

package com.hj.action;

在这里插入图片描述

目录结构

事例代码

JSP页面

index.jsp

<%@ 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>密&nbsp;&nbsp;码<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

<%--
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

<%--
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

<?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代码

package 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代码

package 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代码

package 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代码

package 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代

package 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 Struts2注解的坑(有配置IDEA Maven下Struts2注解踩坑解决事例代码总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部