前言
这是在学习过程中写的,错误、代码冗余可能不可避免(还有问题,运行不 o((⊙﹏⊙))o),后续也删删改改,可能乱七八糟的,文章可能也没多大价值(有大大的bug),仅作为个人笔记。maven工程建maven_course项目,实现增删改查,运用JSP、mybatis接口绑定、mvc+三层架构等(作业练手),用的war包。
环境配置:eclipse、tomcat8、mysql8
语言:java
不知道后边改哪了
一、.javabean包
1.Course实体类
package hsh.study.jsp.javabean;
import java.util.Objects;
public class Course {
private Integer cno;
private String cname;
private Double chourccredit;
private Integer tid;
public Course() {
// TODO Auto-generated constructor stub
}
public Course(Integer cno, String cname, Double chourccredit, Integer tid) {
super();
this.cno = cno;
this.cname = cname;
this.chourccredit = chourccredit;
this.tid = tid;
}
public Integer getCno() {
return cno;
}
public void setCno(Integer cno) {
this.cno = cno;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Double getChourccredit() {
return chourccredit;
}
public void setChourccredit(Double chourccredit) {
this.chourccredit = chourccredit;
}
public Integer getTid() {
return tid;
}
public void setTid(Integer tid) {
this.tid = tid;
}
@Override
public int hashCode() {
return Objects.hash(chourccredit, cname, cno, tid);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Course other = (Course) obj;
return Objects.equals(chourccredit, other.chourccredit) && Objects.equals(cname, other.cname)
&& Objects.equals(cno, other.cno) && Objects.equals(tid, other.tid);
}
@Override
public String toString() {
return "Course [cno=" + cno + ", cname=" + cname + ", chourccredit=" + chourccredit + ", tid=" + tid + "]";
}
}
二、dao包
1.ICourseDao 接口
package hsh.study.jsp.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import hsh.study.jsp.javabean.Course;
public interface ICourseDao {
List<Course> selectAll();
Course selectByTid(Integer tid);
int insert(Course course);
Course selectByCno(Integer cno);
int updateCourse(Course course);
int delete(Integer cno);
Course selectCourseByCondition(@Param("cname")String cname,@Param("chourccredit")Double chourccredit);
}
2.ICourseDao.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="hsh.study.jsp.dao.ICourseDao">
<resultMap type="Course" id="courseMap">
<result property="cname" column="c_name"/>
</resultMap>
<select id="selectCourseByCondition" resultMap="courseMap">
select * from course where cname=#{cname} and chourccredit=#{chourccredit}
</select>
<insert id="insert" parameterType="hsh.study.jsp.javabean.Course">
insert into course values(#{cno},#{cname},#{chourccredit},#{tid})
</insert>
<delete id="delete" parameterType="Integer">
delete from course where cno=#{cno}
</delete>
<update id="updateCourse" parameterType="hsh.study.jsp.javabean.Course">
update course set cname=#{cname},chourccredit=#{chourccredit},tid=#{tid} where cno=#{cno}
</update>
</mapper>
三、dao.impl包(用mabatis,可无)
用PreparedStatement 、ResultSet
package hsh.study.jsp.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import hsh.study.jsp.dao.ICourseDao;
import hsh.study.jsp.javabean.Course;
import hsh.study.jsp.utils.DB;
public class CourseDaoImpl implements ICourseDao{
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
public CourseDaoImpl() {
conn=DB.conn;
}
@Override
public List<Course> selectAll() {
try {
String sql="select * from course";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
List<Course> courseList=new ArrayList<Course>();
while(rs.next()) {
Course course=new Course(rs.getInt(1), rs.getString(2), rs.getDouble(3), rs.getInt(4));
courseList.add(course);
}
return courseList;
} catch (SQLException e) {
System.out.println("数据连接错误");
e.printStackTrace();
}
return null;
}
@Override
public Course selectByTid(Integer tid) {
try {
String sql="select * from course where tid=?";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, tid);
rs=pstmt.executeQuery();
Course course=null;
if(rs.next()) {
course=new Course(rs.getInt(1), rs.getString(2), rs.getDouble(3), rs.getInt(4));
}
return course;
} catch (SQLException e) {
System.out.println("数据连接错误");
e.printStackTrace();
}
return null;
}
@Override
public int insert(Course course) {
try {
String sql="insert into course values(0,?,?,?)";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, course.getCname());
pstmt.setDouble(2, course.getChourccredit());
pstmt.setInt(3, course.getTid());
return pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("数据连接错误");
e.printStackTrace();
}
return 0;
}
@Override
public Course selectByCno(Integer cno) {
try {
String sql="select * from course where cno=?";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, cno);
rs=pstmt.executeQuery();
Course course=null;
if(rs.next()) {
course=new Course(rs.getInt(1), rs.getString(2), rs.getDouble(3), rs.getInt(4));
}
return course;
} catch (SQLException e) {
System.out.println("数据连接错误");
e.printStackTrace();
}
return null;
}
@Override
public int updateCourse(Course course) {
try {
String sql="update course set cname=?,chourccredit=?,tid=? where cno=?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, course.getCname());
pstmt.setDouble(2,course.getChourccredit());
pstmt.setInt(3,course.getTid());
pstmt.setInt(4,course.getCno());
return pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("数据连接错误");
e.printStackTrace();
}
return 0;
}
@Override
public int delete(Integer cno) {
try {
String sql="delete from course where cno=?";
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1,cno);
return pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("数据连接错误");
e.printStackTrace();
}
return 0;
}
@Override
public Course selectCourseByCondition(String cname, Double chourccredit) {
// TODO Auto-generated method stub
return null;
}
}
四、service包
package hsh.study.jsp.service;
import java.util.List;
import hsh.study.jsp.javabean.Course;
public interface ICourseService {
List<Course> allEmp();
int addCourse(Course course);
Course findByCno(Integer cno);
int modifyCourse(Course course);
int removeCourse(Integer cno);
}
五、service.impl层
定义dao接口,实现;若写dao.impl层,则定义其实现类(如下)
package hsh.study.jsp.service.impl;
import java.util.List;
import hsh.study.jsp.dao.impl.CourseDaoImpl;
import hsh.study.jsp.javabean.Course;
import hsh.study.jsp.service.ICourseService;
public class CourseServiceImpl implements ICourseService{
private CourseDaoImpl cDao;
public CourseServiceImpl() {
cDao=new CourseDaoImpl();
}
@Override
public List<Course> allEmp() {
return cDao.selectAll();
}
@Override
public int addCourse(Course course) {
if(cDao.selectByTid(course.getTid())==null) {
return cDao.insert(course);
}
return 0;
}
@Override
public Course findByCno(Integer cno) {
// TODO Auto-generated method stub
return cDao.selectByCno(cno);
}
@Override
public int modifyCourse(Course course) {
// TODO Auto-generated method stub
return cDao.updateCourse(course);
}
@Override
public int removeCourse(Integer cno) {
// TODO Auto-generated method stub
return cDao.delete(cno);
}
}
六、servlet层
这里为每个功能写一个servlet
1.AllCourseServlet
package hsh.study.jsp.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import hsh.study.jsp.javabean.Course;
import hsh.study.jsp.service.ICourseService;
import hsh.study.jsp.service.impl.CourseServiceImpl;
public class AllCourseServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ICourseService cService=new CourseServiceImpl();
List<Course> cList=cService.allEmp();
req.setAttribute("cList",cList);
req.getRequestDispatcher("allCourse.jsp").forward(req,resp);
return ;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
2.AddCourseServlet
package hsh.study.jsp.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/addCourse")
public class AddCourseServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect(req.getContextPath()+"/addCourse.jsp");
}
}
3.RemoveCourseServlet
package hsh.study.jsp.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import hsh.study.jsp.service.ICourseService;
import hsh.study.jsp.service.impl.CourseServiceImpl;
@WebServlet("/removeCourse")
public class RemoveCourseServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//1.
req.setCharacterEncoding("utf-8");
//2.
resp.setContentType("text/html;charset=utf-8");
//3.
String cnoStr = req.getParameter("cno");
Integer cno=0;
if(cnoStr!=null) {
cno=Integer.parseInt(cnoStr);
}
ICourseService courseService=new CourseServiceImpl();
int count=courseService.removeCourse(cno);
if(count>0) {
resp.sendRedirect(req.getContextPath()+"/success.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
4.FindCourseServlet
package hsh.study.jsp.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import hsh.study.jsp.javabean.Course;
import hsh.study.jsp.service.ICourseService;
import hsh.study.jsp.service.impl.CourseServiceImpl;
@WebServlet("/findCourse")
public class FindCourseServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//1.
req.setCharacterEncoding("utf-8");
//2.
resp.setContentType("text/html;charset=utf-8");
//3.
String cnoStr = req.getParameter("cno");
Integer cno=null;
if(cnoStr!=null) {
cno=Integer.parseInt(cnoStr);
}
if(cno!=0) {
ICourseService courseService=new CourseServiceImpl();
Course course=courseService.findByCno(cno);
if(course!=null) {
req.setAttribute("course",course);
req.getRequestDispatcher("updateCourse.jsp").forward(req, resp);
return;
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
5.SaveCourseServlet
package hsh.study.jsp.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import hsh.study.jsp.javabean.Course;
import hsh.study.jsp.service.ICourseService;
import hsh.study.jsp.service.impl.CourseServiceImpl;
@WebServlet("/saveCourse")
public class SaveCourseServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//1.
req.setCharacterEncoding("utf-8");
//2.
resp.setContentType("text/html;charset=utf-8");
//3.
String cname = req.getParameter("cname");
String chourccredit = req.getParameter("chourccredit");
String tid = req.getParameter("tid");
Course course=new Course(0,cname,Double.parseDouble(chourccredit),Integer.parseInt(tid));
ICourseService courseService=new CourseServiceImpl();
if(courseService.addCourse(course)>0) {
req.setAttribute("result", "课程添加成功");
}else {
req.setAttribute("result", "课程未添加成功");
}
req.getRequestDispatcher("result.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
6.UpdateCourseServlet
package hsh.study.jsp.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import hsh.study.jsp.javabean.Course;
import hsh.study.jsp.service.ICourseService;
import hsh.study.jsp.service.impl.CourseServiceImpl;
@WebServlet("/updateCourse")
public class UpdateCourseServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//1.
req.setCharacterEncoding("utf-8");
//2.
resp.setContentType("text/html;charset=utf-8");
//3.
String cno = req.getParameter("cno");
String cname = req.getParameter("cname");
String chourccredit = req.getParameter("chourccredit");
String tid = req.getParameter("tid");
try {
Course course=new Course(Integer.parseInt(cno),cname,Double.parseDouble(chourccredit),Integer.parseInt(tid));
ICourseService courseService=new CourseServiceImpl();
if(courseService.modifyCourse(course)>0) {
resp.sendRedirect(req.getContextPath()+"/success.jsp");
}
} catch (Exception e) {
System.out.println("修改失败");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
七、utils包
加载db.properties,连接数据库;用mybatis.xml可不写
1.DB
数据库连接方法之一
package hsh.study.jsp.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class DB {
public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";
public static final String DBURL="jdbc:mysql://localhost:3306/student?serverTimezone=UTC";
public static final String DBUSER="root";
public static final String DBPASSWORD="root";
public static Connection conn;
public static DataSource dataSource=null;
static {
Properties properties=new Properties();
InputStream inputStream=new DSUtil().getClass().getClassLoader().getResourceAsStream("db.properties");
try {
properties.load(inputStream);
dataSource=DruidDataSourceFactory.createDataSource(properties);
conn=dataSource.getConnection();
}catch (IOException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn=null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void close() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.DSUtil
数据库连接方法之一
package hsh.study.jsp.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class DSUtil {
public static BasicDataSource bds=null;
public static DataSource dataSource=null;
static {
Properties properties=new Properties();
InputStream inputStream=new DSUtil().getClass().getClassLoader().getResourceAsStream("db.properties");
try {
properties.load(inputStream);
dataSource=DruidDataSourceFactory.createDataSource(properties);
}catch (IOException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn =null;
try {
conn= dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static DataSource getDataSource() {
return dataSource;
}
}
3.db.properties
username=root
password=root
url=jdbc:mysql://localhost:3306/student?serverTimezone=UTC
driverClassName=com.mysql.cj.jdbc.Driver
#initialSize=10
maxIdle=30
imnIdle=5
maxWait=5000
removeAbandoned=3000
removeAbandonedTimeout=3000
logAbandoned=false
八、JSP页面
东西较多,冗余,每个功能建一个jsp
1.addCourse.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
添加课程信息
<form action="<%=request.getContextPath() %>/saveCourse" method="post">
课程名称:<input name="cname" type="text"><br>
课程学分:<input name="chourccredit" type="text"><br>
课程id:<input name="tid" type="text"><br>
<input value="添加课程" type="submit">
<input value="重置" type="reset">
</form>
</body>
</html>
2.allCourse.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Map"%>
<%@page import="hsh.study.jsp.vo.Course"%>
<%@page import="java.util.List"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function c() {
if(confirm("确认删除?")==true){
return true;
}else{
return false;
}
}
</script>
</head>
<body>
<c:if test="${not(empty cList) }"></c:if>
<table border="1">
<tr>
<td>课程编号</td>
<td>课程名称</td>
<td>课程学分</td>
<td>课程id</td>
</tr>
<c:forEach items="${cList }" var="c">
<tr>
<td>${c.cno}</td>
<td>${c.cname }</td>
<td>${c.chourccredit }</td>
<td>${c.tid }</td>
<td>
<a href="${pageContext.request.contextPath }/findCourse?cno=${c.cno}">修改</a>
|
<a href="${pageContext.request.contextPath }/removeCourse?cno=${c.cno}" onclick="return c()">删除</a>
</td>
</tr>
</c:forEach>
</table>
<a href="<%=request.getContextPath()%>/addCourse.jsp"> 添加课程</a>
</body>
</html>
3.failure.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
亲爱的用户,添加数据失败
<a href="<%=request.getContextPath()%>/allCourse">返回</a>
<a href="<%=request.getContextPath()%>/addCourse">继续添加</a>
</body>
</html>
4.result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String result=(String)request.getAttribute("result");
if(result==null){
result="" ;
}
%>
<%=result%>
<a href="<%=request.getContextPath()%>/allEmp">返回</a>
<a href="<%=request.getContextPath()%>/addEmp">继续添加</a>
</body>
</html>
5.success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
修改成功<br>
<a href="<%=request.getContextPath()%>/allCourse">返回</a>
</body>
</html>
6.update.jsp
<%@page import="hsh.study.jsp.javabean.Course"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
显示员工信息
<%
Course course=(Course)request.getAttribute("course");
out.print(course);
%>
<form action="<%=request.getContextPath() %>/updateCourse" method="post">
<input name="cno" type="text" value="<%=course.getCno()%>" hidden="hidden"><br>
课程名称:<input name="cname" type="text" value="<%=course.getCname()%>"><br>
课程学分:<input name="chourccredit" type="text" value="<%=course.getChourccredit()%>"><br>
课程id:<input name="tid" type="text" value="<%=course.getTid()%>"><br>
<input value="修改" type="submit">
</form>
<a href="<%=request.getContextPath() %>/findCourse?cno=<%=course.getCno() %>">重新获取</a>
</body>
</html>
九、test测试类和mybatis.xml、log4配置、pom.xml
1.TestCourseDao
package hsh.study.jsp.dao;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import hsh.study.jsp.dao.impl.CourseDaoImpl;
import hsh.study.jsp.javabean.Course;
public class TestCourseDao {
ICourseDao courseDao;
SqlSession session;
@Before
public void init() {
// courseDao=new CourseDaoImpl();
InputStream inputStream;
try {
inputStream=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
session=factory.openSession();
courseDao=session.getMapper(ICourseDao.class);
System.out.println(courseDao);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testSelectByTid() {
System.out.println(courseDao.selectByTid(001));
}
@Test
public void testInsert() {
System.out.println(courseDao.insert(new Course(0,"中国近代史",2.0,5)));
}
@Test
public void testselectCourseByCondition() {
System.out.println(courseDao.selectCourseByCondition("Java", 4.0));
}
}
2.mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="hsh.study.jsp.javabean"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/student?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="hsh.study.jsp.dao.ICourseDao"/>
</mappers>
</configuration>
3.log4配置
log4j.rootLogger=DEBUG, DB, console
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
# log4j.appender.DB.URL=jdbc:mysql://127.0.0.1/log4j?useUnicode=true&characterEncoding=utf8
log4j.appender.DB.URL=jdbc:mysql://localhost:3306/student?serverTimezone=UTC
log4j.appender.DB.driver=com.mysql.cj.jdbc.Driver
log4j.appender.DB.user=root
log4j.appender.DB.password=root
log4j.appender.DB.sql=INSERT INTO logs(USER_ID, DATED, LOGGER, LEVEL, MESSAGE) VALUES('%d{yyyy-MM-dd HH:mm:ss SSS}', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%p', '%m')
log4j.appender.DB.layout=org.apache.log4j.PatternLayout
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}]-[%t]-[%F:%L]-[%p]-[%c]-%m%n
log4j.appender.console.encoding=UTF-8
4.pom.xml
这里依赖有关数据库的我导了很多,实际不需要这么多,根据要求选择依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>study.jsp</groupId>
<artifactId>maven_course</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.11.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.20</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
</project>
5.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd" id="WebApp_ID" version="4.0">
<servlet>
<servlet-name>allCourse</servlet-name>
<servlet-class>hsh.study.jsp.servlet.AllCourseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>allCourse</servlet-name>
<url-pattern>/allCourse</url-pattern>
</servlet-mapping>
</web-app>
有大错误,请多多指教!