eclipse学习(第二章:初识ssh)——22.struts整合spring
写在最前面的话
本文参考自以下网站,做的一个日志记录
https://www.w3cschool.cn/struts_2/struts_spring.html
单个框架或者说单个组件真的不难,合起来是真的很难很难,因为有可能出现版本问题以及相关的依赖问题。其实本质就是依赖问题,他们用的依赖可能会发生版本方面的差距导致无法正常启动。(当然和你的开发环境也有关系,基本是就是版本和依赖(jar包)和环境这三个吧)
相关jar包请到该网站下载,下载一个all版本吧
https://struts.apache.org/download.cgi
查看一下struts里面的lib文件夹
可以看到这里面已经有跟spring相关联的jar包了,spring开头的必定要拉取,然后struts跟spring联系起来的一个包struts2-spring-plugin-2.3.37.jar也要拉上,然后加上之前struts的jar就可以啦。当然如果你不嫌麻烦其实全部弄进去那也算是整合了,其实,不过我这里要说明一下。
项目初始化及jar包拉取
修改web.xml
这里要做一个处理设置一下,加载上下文的路径位置,当然也可以不设置,但是我觉得设置一下会好看一点
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>ssh_learn_spring_integration</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 默认情况下,会加载WEB-INF/applicationContext.xml这个文件,我们可以通过配置contextConfigLocation参数改变配置文件的路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
<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>
</web-app>
创建SpringAction
SpringAction
package com.czx.spring.action;
public class SpringAction {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
private String name;
private String role;
public String execute() {
return "success";
}
}
创建applicationContext.xml
这里是注入一个方法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id = "helloWorld" class="com.czx.spring.action.SpringAction">
<property name="name" value="陈某"></property>
<property name="role" value="管理员"></property>
</bean>
</beans>
创建userTest.jsp
这个是跳转后页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>进入页面</title>
</head>
<body>
尝试进入页面
<s:form>
<s:textfield name="name" label="名称"></s:textfield>
<s:textfield name="role" label="角色"></s:textfield>
</s:form>
</body>
</html>
创建struts.xml
核心在于这里的action内的属性class使用的是之前设定的bean名称
<?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.3.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="springTest" extends="struts-default">
<action name="hi" class="helloWorld" method="execute">
<result name="success">/userTest.jsp</result>
</action>
</package>
</struts>
测试
访问http://localhost:8080/ssh_learn_spring_integration/hi
结果如下,这里值获取到了
中间遇到的异常
整合spring出现了Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
这是因为我写错了applicationContext.xml的名字,导致一直找不到这个类的实例。
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name struts has already been loaded by bean
这里说我的已经被加载过了,所以我把注入容器的类改个名称试试,发现不行估计是jar包问题出现了重复加载。
struts2-core-2.3.37.jar和struts2-core-2.3.24.jar冲突了
找不到对应的方法
后面查看发现访问修饰符不小心写成了private,写成public就好了
项目地址
这个仓库里面的ssh_learn_spring_integration
https://gitee.com/mrchen13427566118/ssh_learn.git
如果不会怎么弄到eclipse的话,就看这里
https://blog.csdn.net/weixin_43987277/article/details/116936221