项目未动,数据库先搭,MySQL数据库名称为s
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for classes
-- ----------------------------
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cname` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of classes
-- ----------------------------
INSERT INTO `classes` VALUES ('1', 'Java');
INSERT INTO `classes` VALUES ('2', 'C#/.Net');
INSERT INTO `classes` VALUES ('3', 'C语言');
INSERT INTO `classes` VALUES ('4', '数据库');
-- ----------------------------
-- Table structure for faqs
-- ----------------------------
DROP TABLE IF EXISTS `faqs`;
CREATE TABLE `faqs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`createdate` datetime DEFAULT NULL,
`content` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`classid` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of faqs
-- ----------------------------
INSERT INTO `faqs` VALUES ('1', '如何安装配置IIS', '2012-10-19 00:00:00', '放假啊浪费大家阿里山扩大发生快递费', '2');
INSERT INTO `faqs` VALUES ('2', '如何理解指针', '2012-12-17 00:00:00', '放假啊浪费大家阿里山扩大发生快递费', '3');
INSERT INTO `faqs` VALUES ('3', 'JavaWeb开发的常用服务器有哪些', '2009-10-15 00:00:00', '放假啊浪费大家阿里山扩大发生快递费', '1');
INSERT INTO `faqs` VALUES ('4', 'javaOOP', '2021-10-22 11:53:01', 'dfada', '1');
INSERT INTO `faqs` VALUES ('5', 'javaee', '2021-10-22 12:00:18', ' ee', '3');
web图
先导入lib的包:百度网盘 请输入提取码 提取码:3j4x
web=>WEB-INF=>web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--交给spring托管-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath: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>
web=>index.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
Created by IntelliJ IDEA.
User: 小米2020
Date: 2021/10/21
Time: 19:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
<%--bootstrap框架--%>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
</head>
<body>
<h1 style="text-align: center">常见问题检索</h1>
<div style="text-align: center"><a href="add.jsp" class="btn btn-default" role="button">添加常见问题</a></div>
<table class="table table-bordered">
<thead>
<th>编号</th>
<th>标题</th>
<th>创建时间</th>
<th>分类</th>
<th>操作</th>
</thead>
<tbody>
<s:iterator status="status" value="list">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="title"/></td>
<td><s:property value="createdate"/></td>
<td><s:property value="classidToString"/></td>
<td><input type="button" id="delete" class="btn btn-danger" onclick="e(<s:property value="id"/>)" value="删除"></td>
</tr>
</s:iterator>
</tbody>
</table>
</body>
<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
<script>
function e(e){
if (confirm("确认删除?")){
window.location.href="/delete?id="+e;
}
}
</script>
</html>
web=>add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<script src="js/jquery-1.8.3.js"></script>
<script>
function index(){
window.location.href="list";
}
function myFunction(){
//name获取的是数组,所以得获取0下标的值
var classid=document.getElementsByName('classid')[0].value;
var title=document.getElementsByName('title')[0].value;
var content=document.getElementsByName('content')[0].value;
if (classid==null||classid==0){
alert('请选择分类');
return false;
}else if(title==null||title==""){
alert('请填写标题');
return false
}else if(content==null||content==""){
alert('请填写内容');
return false;
}
return true;
}
</script>
<body>
<form action="/add" onsubmit="return myFunction()" method="post">
<table align="center">
<tr>
<td></td>
<td><h2>添加常见问题</h2></td>
</tr>
<tr>
<td>
<h4>分类:</h4>
</td>
<td>
<select name="classid">
<option value="0">--请选择分类--</option>
<option value="1">Java</option>
<option value="2">C语言</option>
<option value="3">C#/.NET</option>
<option value="4">PHP</option>
</select>
</td>
</tr>
<tr>
<td>
<h4>标题:</h4>
</td>
<td>
<input name="title" type="text"/>
</td>
</tr>
<tr>
<td>
<h4>内容:</h4>
</td>
<td>
<textarea cols="20" rows="4" name="content">
</textarea>
</td>
</tr>
<tr>
<td>
<button type="submit">保存</button>
</td>
<td>
<button type="reset">重置</button>
<button type="button" onclick="index()">放弃</button>
</td>
</tr>
</table>
</form>
</body>
</html>
启动配置tomcat,启动项目看能否正常运行
resource文件图
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<context:component-scan base-package="com.tang.dao.impl,com.tang.service.impl,com.tang.controller"/>
<!--配置sessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
<!--配置hibernateTemplate-->
<bean name="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 开启事务管理器,用注解方式使用事务 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 开启事务,记得在需要开启事务的类上 使用@Transaction-->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
hibernate.cfg.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接配置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/s?serverTimezone=UTC&characterEncoding=utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<!-- 每个数据库都有1个,针对特定的关系型数据库生成优化的SQL -->
<property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
<!-- 设置默认的数据库连接池 -->
<property name="connection.pool_size">5</property>
<!-- 显示SQL -->
<property name="show_sql">true</property>
<!-- 格式化SQL -->
<property name="format_sql">true</property>
<!-- 根据schema更新数据表的工具 -->
<property name="hbm2ddl.auto">update</property>
<!-- 数据表映射配置文件 -->
<mapping resource="classes.hbm.xml"/>
<mapping resource="faqs.hbm.xml"/>
</session-factory>
</hibernate-configuration>
classes.hbm.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.tang.pojo.Classes" table="classes">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="cname" column="cname" type="string"/>
</class>
</hibernate-mapping>
faqs.hbm.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.tang.pojo.Faqs" table="faqs">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="title" column="title" type="string"/>
<property name="createdate" column="createdate"/>
<property name="content" column="content" type="string"/>
<property name="classid" column="classid" type="int"/>
<!-- <one-to-one name="classid" constrained="true"></one-to-one>-->
</class>
</hibernate-mapping>
log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout
java代码图
com.tang.pojo.Classes.java
package com.tang.pojo;
/**
* @version 1.0
* @Author Tang
* @Date 2021/10/21 18:56
* @注释
*/
public class Classes {
private int id;
private String cname;
public Classes() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@Override
public String toString() {
return "Classes{" +
"id=" + id +
", cname='" + cname + '\'' +
'}';
}
}
com.tang.pojo.Faqs.java
package com.tang.pojo;
import java.util.Date;
/**
* @version 1.0
* @Author Tang
* @Date 2021/10/21 18:57
* @注释
*/
public class Faqs {
private int id;
private String title;
private String createdate;
private String content;
private Integer classid;
private String classidToString;
public Faqs() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCreatedate() {
return createdate;
}
public void setCreatedate(String createdate) {
this.createdate = createdate;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Integer getClassid() {
return classid;
}
public void setClassid(Integer classid) {
if (classid==1){
this.classidToString="Java";
}else if (classid==2){
this.classidToString="C#.Net";
}else if (classid==3){
this.classidToString="C语言";
}else if (classid==4){
this.classidToString="数据库";
}
this.classid = classid;
}
public String getClassidToString() {
return classidToString;
}
@Override
public String toString() {
return "Faqs{" +
"id=" + id +
", title='" + title + '\'' +
", createdate=" + createdate +
", content='" + content + '\'' +
", classidToString='" + classidToString + '\'' +
'}';
}
}
com.tang.controller.action.FaqsController.java
package com.tang.controller.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.tang.pojo.Faqs;
import com.tang.service.FaqsService;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @Author Tang
* @Date 2021/10/21 19:28
* @注释
*/
@Namespace("/")
@ParentPackage("struts-default")
@Controller
public class FaqsController extends ActionSupport implements ModelDriven<Faqs> {
private List<Faqs> list;
public List<Faqs> getList() {
return list;
}
@Autowired
private FaqsService faqsService;
private Faqs faqs=new Faqs();
@Override
public Faqs getModel() {
return faqs;
}
/**
* 主页面查询
* @return
*/
@Action(value = "list",results = {@Result(name = "success",location = "/index.jsp")})
public String faqsList(){
System.out.println("FaqsController=>faqsList()");
list = faqsService.faqsList();
return SUCCESS;
}
@Action(value = "delete",results = {@Result(name = "success",location = "list",type ="chain")})
public String delete(){
System.out.println("FaqsController=>delete()");
faqsService.deleteFaqs(faqs.getId());
return SUCCESS;
}
@Action(value = "add",results = {@Result(name = "success",location = "list",type = "chain")})
public String addFags(){
System.out.println("FaqsController=>addFags()");
SimpleDateFormat sdf = new SimpleDateFormat();// 格式化时间
sdf.applyPattern("yyyy-MM-dd HH:mm:ss");// a为am/pm的标记
Date date = new Date();// 获取当前时间
faqs.setCreatedate(sdf.format(date));
faqsService.addFaqs(faqs);
return SUCCESS;
}
}
com.tang.service.FaqsService.java
package com.tang.service;
import com.tang.pojo.Faqs;
import java.util.List;
/**
* @version 1.0
* @Author Tang
* @Date 2021/10/21 19:32
* @注释
*/
public interface FaqsService {
void addFaqs(Faqs faqs);
List<Faqs> faqsList();
void deleteFaqs(int id);
}
com.tang.service.impl.FaqsServiceImpl.java
package com.tang.service.impl;
import com.tang.dao.FaqsDao;
import com.tang.pojo.Faqs;
import com.tang.service.FaqsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @version 1.0
* @Author Tang
* @Date 2021/10/21 19:33
* @注释
*/
@Service("faqsService")
@Transactional
public class FaqsServiceImpl implements FaqsService {
@Autowired
private FaqsDao faqsDao;
@Override
public void addFaqs(Faqs faqs) {
faqsDao.addFaqs(faqs);
}
@Override
public List<Faqs> faqsList() {
return faqsDao.faqsList();
}
@Override
public void deleteFaqs(int id) {
faqsDao.deleteFaqs(id);
}
}
com.tang.dao.FaqsDao.java
package com.tang.dao;
import com.tang.pojo.Faqs;
import java.util.List;
/**
* @version 1.0
* @Author Tang
* @Date 2021/10/21 19:10
* @注释
*/
public interface FaqsDao {
void addFaqs(Faqs faqs);
List<Faqs> faqsList();
void deleteFaqs(int id);
}
com.tang.dao.impl.FaqsDaoImpl.java
package com.tang.dao.impl;
import com.tang.dao.FaqsDao;
import com.tang.pojo.Faqs;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @version 1.0
* @Author Tang
* @Date 2021/10/21 19:12
* @注释
*/
@Repository("faqsDao")
public class FaqsDaoImpl implements FaqsDao {
@Autowired
private HibernateTemplate hibernateTemplate;
@Autowired
private SessionFactory sessionFactory;
@Override
public void addFaqs(Faqs faqs) {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(faqs);
tx.commit();
}
@Override
public List<Faqs> faqsList() {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Faqs");
List<Faqs> list = query.list();
tx.commit();
return list;
}
@Override
public void deleteFaqs(int id) {
Session session = sessionFactory.openSession();
Transaction ts = session.beginTransaction();
Faqs faqs = (Faqs) session.get(Faqs.class, id);
session.delete(faqs);
ts.commit();
}
}