一、项目的创建以及三大框架的整合
在前台的布置中已经进行了数据库的创建,在后台中我使用的数据库是同一个,数据库中同样是四张表
创建项目
命名为:QSSY_Back
项目使用到的jar包,并进行导入项目中
导入jar包后记得全选单击右键Build Path
在src中建这样的几个包:
完善后台页面:用户列表与帖子列表
初始时页面显示的数据都是静态的
效果图:
index.html:

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>泉师释疑后台登录</title> <meta name="renderer" content="webkit|ie-comp|ie-stand"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /> <link rel="stylesheet" href="./css/font.css"> <link rel="stylesheet" href="./css/xadmin.css"> <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script src="./lib/layui/layui.js" charset="utf-8"></script> <script type="text/javascript" src="./js/xadmin.js"></script> </head> <body> <!-- 顶部开始 --> <div class="container"> <div class="logo"><a href="./index.html">泉师释疑后台</a></div> <div class="left_open"> <i title="展开左侧栏" class="iconfont"></i> </div> <ul class="layui-nav left fast-add" lay-filter=""> <li class="layui-nav-item"> <a href="javascript:;">+新增</a> <dl class="layui-nav-child"> <!-- 二级菜单 --> <dd><a onclick="x_admin_show('资讯','http://www.baidu.com')"><i class="iconfont"></i>资讯</a></dd> <dd><a onclick="x_admin_show('图片','http://www.baidu.com')"><i class="iconfont"></i>图片</a></dd> <dd><a onclick="x_admin_show('用户','http://www.baidu.com')"><i class="iconfont"></i>用户</a></dd> </dl> </li> </ul> <ul class="layui-nav right" lay-filter=""> <li class="layui-nav-item"> <a href="javascript:;">admin</a> <dl class="layui-nav-child"> <!-- 二级菜单 --> <dd><a onclick="x_admin_show('个人信息','http://www.baidu.com')">个人信息</a></dd> <dd><a onclick="x_admin_show('切换帐号','http://www.baidu.com')">切换帐号</a></dd> <dd><a href="./login.html">退出</a></dd> </dl> </li> <li class="layui-nav-item to-index"><a href="/">前台首页</a></li> </ul> </div> <!-- 顶部结束 --> <!-- 中部开始 --> <!-- 左侧菜单开始 --> <div class="left-nav"> <div id="side-nav"> <ul id="nav"> <li> <a href="javascript:;"> <i class="iconfont"></i> <cite>用户管理</cite> <i class="iconfont nav_right"></i> </a> <ul class="sub-menu"> <li> <a _href="member-list.html"> <i class="iconfont"></i> <cite>用户列表</cite> </a> </li > <li> <a _href="member-del.html"> <i class="iconfont"></i> <cite>用户删除</cite> </a> </li> </ul> </li> <li> <a href="javascript:;"> <i class="iconfont"></i> <cite>帖子管理</cite> <i class="iconfont nav_right"></i> </a> <ul class="sub-menu"> <li> <a href="javascript:;"> <i class="iconfont"></i> <cite>帖子列表</cite> <i class="iconfont nav_right"></i> </a> <ul class="sub-menu"> <li> <a _href="xxx.html"> <i class="iconfont"></i> <cite>已完结</cite> </a> </li > <li> <a _href="xx.html"> <i class="iconfont"></i> <cite>未完结</cite> </a> </li> </ul> </li> <li> <a _href="member-list.html"> <i class="iconfont"></i> <cite>帖子删除</cite> </a> </li > </ul> </li> <li> <a href="javascript:;"> <i class="iconfont"></i> <cite>系统统计</cite> <i class="iconfont nav_right"></i> </a> <ul class="sub-menu"> <li> <a _href="echarts1.html"> <i class="iconfont"></i> <cite>拆线图</cite> </a> </li > <li> <a _href="echarts2.html"> <i class="iconfont"></i> <cite>柱状图</cite> </a> </li> <li> <a _href="echarts3.html"> <i class="iconfont"></i> <cite>地图</cite> </a> </li> <li> <a _href="echarts4.html"> <i class="iconfont"></i> <cite>饼图</cite> </a> </li> <li> <a _href="echarts5.html"> <i class="iconfont"></i> <cite>雷达图</cite> </a> </li> <li> <a _href="echarts6.html"> <i class="iconfont"></i> <cite>k线图</cite> </a> </li> <li> <a _href="echarts7.html"> <i class="iconfont"></i> <cite>热力图</cite> </a> </li> <li> <a _href="echarts8.html"> <i class="iconfont"></i> <cite>仪表图</cite> </a> </li> </ul> </li> <li> <a href="javascript:;"> <i class="iconfont"></i> <cite>图标字体</cite> <i class="iconfont nav_right"></i> </a> <ul class="sub-menu"> <li> <a _href="unicode.html"> <i class="iconfont"></i> <cite>图标对应字体</cite> </a> </li> </ul> </li> </ul> </div> </div> <!-- <div class="x-slide_left"></div> --> <!-- 左侧菜单结束 --> <!-- 右侧主体开始 --> <div class="page-content"> <div class="layui-tab tab" lay-filter="xbs_tab" lay-allowclose="false"> <ul class="layui-tab-title"> <li class="home"><i class="layui-icon"></i>我的桌面</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show"> <iframe src='./welcome.html' frameborder="0" scrolling="yes" class="x-iframe"></iframe> </div> </div> </div> </div> <div class="page-content-bg"></div> <!-- 右侧主体结束 --> <!-- 中部结束 --> <!-- 底部开始 --> <div class="footer"> <div class="copyright">Copyright ©2019 QZSSY All Rights Reserved</div> </div> <!-- 底部结束 --> <script> //百度统计可去掉 var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b393d153aeb26b46e9431fabaf0f6190"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>
整合Struts
在src中创建struts.xml,并将其约束的头导入
导入的约束的头:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
在struts.xml进行:
1、动态方法的调用
2、 让spring来创建Action
3、允许所有方法
整合的struts:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!-- 动态方法的调用 --> <constant name="struts.devMode" value="true"></constant> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <!-- 让spring来创建Action --> <constant name="struts.objectFactory" value="spring"></constant> <package name="QSSY_Back" namespace="/" extends="struts-default"> <!-- 允许所有方法 --> <global-allowed-methods>regex:.*</global-allowed-methods> </package> </struts>
在web.xml中让struts启动
<!-- 让struts启动 --> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
整合Hiernate
在src中新建applicationContext.xml
导入约束;
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> </beans>
在applicationContext.xml进行
1、dataSource的配置
2、配置sessionFactory
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="jdbc:mysql:///ssh_forum"></property> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="user" value="root"></property> <property name="password" value="root"></property> </bean> <!-- 配置sessionFactory --> <bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop><!-- 自动创建表 --> <prop key="hibernate.show_sql">true</prop><!-- 打印出sql语句 --> <prop key="hibernate.format_sql">true</prop><!-- 格式化sql语句 --> </props> </property> <property name="mappingDirectoryLocations" value="classpath:com/guiyan/domain"></property> </bean>
整合事务
在applicationContext.xml加入:
<!-- 配置事务 --> <bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 通知 --> <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" /> </tx:attributes> </tx:advice> <!-- 织入 --> <aop:config> <aop:pointcut expression="execution(* com.guiyan.service.*.*(..))" id="pc"/> <aop:advisor advice-ref="advice" pointcut-ref="pc"/> </aop:config>
整合Spring
在web.xml加入:
<!-- 让spring启动 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 扩大到页面的加载 -->
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样三大框架的整合就完成了
最终总的代码:
struts.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" 4 "http://struts.apache.org/dtds/struts-2.5.dtd"> 5 6 7 <struts> 8 9 <!-- 动态方法的调用 --> 10 <constant name="struts.devMode" value="true"></constant> 11 <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> 12 13 14 <!-- 让spring来创建Action --> 15 <constant name="struts.objectFactory" value="spring"></constant> 16 17 <package name="QSSY_Back" namespace="/" extends="struts-default"> 18 19 20 <!-- 允许所有方法 --> 21 <global-allowed-methods>regex:.*</global-allowed-methods> 22 23 24 </package> 25 26 27 28 29 </struts>
applicationContext.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:aop="http://www.springframework.org/schema/aop" 7 xmlns:tx="http://www.springframework.org/schema/tx" 8 xsi:schemaLocation="http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans.xsd 10 http://www.springframework.org/schema/context 11 http://www.springframework.org/schema/context/spring-context.xsd 12 http://www.springframework.org/schema/aop 13 http://www.springframework.org/schema/aop/spring-aop.xsd 14 http://www.springframework.org/schema/tx 15 http://www.springframework.org/schema/tx/spring-tx.xsd"> 16 17 18 19 20 <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 21 <property name="jdbcUrl" value="jdbc:mysql:///ssh_forum"></property> 22 <property name="driverClass" value="com.mysql.jdbc.Driver"></property> 23 <property name="user" value="root"></property> 24 <property name="password" value="root"></property> 25 </bean> 26 27 <!-- 配置sessionFactory --> 28 <bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 29 <property name="dataSource" ref="dataSource"></property> 30 <property name="hibernateProperties"> 31 <props> 32 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 33 <prop key="hibernate.hbm2ddl.auto">update</prop><!-- 自动创建表 --> 34 <prop key="hibernate.show_sql">true</prop><!-- 打印出sql语句 --> 35 <prop key="hibernate.format_sql">true</prop><!-- 格式化sql语句 --> 36 </props> 37 </property> 38 <property name="mappingDirectoryLocations" value="classpath:com/guiyan/domain"></property> 39 </bean> 40 41 42 43 <!-- 配置事务 --> 44 <bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 45 <property name="sessionFactory" ref="sessionFactory"></property> 46 </bean> 47 48 <!-- 通知 --> 49 <tx:advice id="advice" transaction-manager="transactionManager"> 50 <tx:attributes> 51 <tx:method name="*" /> 52 </tx:attributes> 53 </tx:advice> 54 55 <!-- 织入 --> 56 <aop:config> 57 <aop:pointcut expression="execution(* com.guiyan.service.*.*(..))" id="pc"/> 58 <aop:advisor advice-ref="advice" pointcut-ref="pc"/> 59 </aop:config> 60 61 62 63 64 65 </beans>
web.xml

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 3 <display-name>QSSY_Back</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 14 <!-- 让spring启动 --> 15 <listener> 16 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 17 </listener> 18 19 <context-param> 20 <param-name>contextConfigLocation</param-name> 21 <param-value>classpath:applicationContext.xml</param-value> 22 </context-param> 23 24 <!-- 扩大到页面的加载 --> 25 <filter> 26 <filter-name>openSession</filter-name> 27 <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> 28 </filter> 29 30 <filter-mapping> 31 <filter-name>openSession</filter-name> 32 <url-pattern>/*</url-pattern> 33 </filter-mapping> 34 35 36 <!-- 让struts启动 --> 37 <filter> 38 <filter-name>struts</filter-name> 39 <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> 40 </filter> 41 <filter-mapping> 42 <filter-name>struts</filter-name> 43 <url-pattern>/*</url-pattern> 44 </filter-mapping> 45 46 47 </web-app>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~