概述
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>密 码<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>密 码<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注解踩坑解决事例代码总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复