本文章仅供参考,适合新手搭建JavaWeb,学习此文章来打打基础还是可以的,如果有错误或者写的不好的地方,请多多指教。
最后本项目只是提供一个框架和思路,对前端界面不做美化
目录
开发工具与环境
工具包
功能说明
项目结构
操作步骤
1.创建数据库
(一)创建数据库
(二)创建数据表
(三)插入数据
2.创建JavaWeb界面
(一)登入界面
(二)主页界面
(三)增加学生界面
(四)修改界面
(五)查询界面
3.创建Java类实现功能
(一)创建对象类
(二)创建数据访问层(Dao层)
(三)创建servlet
(四)配置过滤器
源码
开发工具与环境
1.IntelliJ IDEA 2021.2.2
2.MySQL 8.0.20
3.jdk 1.8.0_144
4.Tomcat
工具包
因为项目需要连接数据库,所以需要一个连接数据库的jar包
本项目用的是mysql8.0所以jar对应的就是8.0版本,如图所示,需要的自取jar包,提取码:miek
不同数据库版本对应的jar包是不一样的,具体jar包的下载地址:Jar包下载,怎么下载这里就不多介绍了
功能说明
1.登入功能
2.增
3.删
4.改
5.查
项目结构
项目结构如图所示:
编译器的不同具体也不完全相同,但大致一样就行
src下创建com.公司名. xxx 的形式
bean包下放需要操作的对象
dao包下面放对需要操作对象的操作,例如增删改查
filter包下放过滤器,一般是放编码过滤器和权限过滤器
servlet包下放servlet对象
private包下放需要权限的页面
lib包下放需要导入的库(jar包)
web.xml是配置文件
操作步骤
1.创建数据库
(一)创建数据库
create database rg56;
(二)创建数据表
这里设置了 id 为主键且不为空,其他设置根据自己的需求更改
create table stuno(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(30),
password CHAR(30),
);
最终如下图所示:
(三)插入数据
INSERT INTO stuno(id, name,password)
VALUES (1,'小方','123456');
结果如下图所示,如需插入多个可自行选择,
2.创建JavaWeb界面
完整项目放在最后,注意事项和解释全放在代码段里面了
(一)登入界面
代码如下:
<%--
Created by IntelliJ IDEA.
User: HARD
Date: 2021/12/12
Time: 16:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登入界面</title>
</head>
<body>
<%--如果 condition() 函数返回为true时才提交表单--%>
<form action="checkLogin.jsp" method="post" onsubmit="return condition()">
<%--这里的 name 和 id 可以随便取名字,但最好和数据库的字段保持一致--%>
学号:<input type="text" name="id" id="id"><br>
密码:<input type="password" name="password" id="password"><br>
<input type="submit" value="登入">
</form>
<script>
function condition() {
var id_1 = document.getElementById("id").value;//获取id为id的值
var pwd_2 = document.getElementById("password").value;//获取id为password的值;
if(id_1==""){
alert("学号不能为空!");
return false;
}
if(pwd_2==""){
alert("密码不能为空!");
return false;
}
return true;
}
</script>
</body>
</html>
(二)主页界面
代码如下:
<%--
Created by IntelliJ IDEA.
User: HARD
Date: 2021/12/12
Time: 16:18
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.bean.Student" %>
<%@ page import="com.dao.StudentDao" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %>
<html>
<head>
<title>学生信息</title>
</head>
<body>
<table border="2px" align="center" cellspacing="0">
<tr>
<td>学号</td>
<td>姓名</td>
<td>密码</td>
<td width="200px"><a href="add.jsp">增加学生</a> <a href="searchStudent.jsp">查询学生</a></td>
</tr>
<%
List<Student> list = StudentDao.getList();
Iterator<Student> iter = list.iterator();
while (iter.hasNext()) {
Student student = iter.next();
%>
<tr>
<td width="75px"><%=student.getId()%>
</td>
<td width="75px"><%=student.getName()%>
</td>
<td width="75px"><%=student.getPassword()%>
</td>
<td width="120px">
<%--将 id 参数传过去 --%>
<a href="delete.jsp?id=<%=student.getId() %>">删除</a>
<%--
因为修改是要先 获取学号 得到全部信息
在修改所以传了一个参数 ?id=<%=student.getId()%>
--%>
<a href="updateStudent.jsp?id=<%=student.getId()%>">修改</a>
</td>
</tr>
<tr>
</tr>
<%
}
%>
</table>
</body>
</html>
(三)增加学生界面
<%--
Created by IntelliJ IDEA.
User: HARD
Date: 2021/12/12
Time: 20:35
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加学生</title>
</head>
<body>
<form action="addCheck.jsp" method="post" onsubmit="return condition()">
学号:<input type="text" id="id" name="id"><br>
姓名:<input type="text" id="name" name="name"><br>
密码:<input type="password" id="password" name="password"><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
<script>
function condition() {
var id_1 = document.getElementById("id").value;//获取id为id的值
var name_2 = document.getElementById("name").value;//获取id为name的值
var pwd_3 = document.getElementById("password").value;//获取id为password的值;
if(id_1==""){
alert("学号不能为空!");
return false;
}
if(name_2==""){
alert("姓名不能为空!");
return false;
}
if(pwd_3==""){
alert("密码不能为空!");
return false;
}
return true;
}
</script>
</body>
</html>
(四)修改界面
代码如下:
<%--
Created by IntelliJ IDEA.
User: HARD
Date: 2021/12/12
Time: 21:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.dao.StudentDao" %>
<%@ page import="com.bean.Student" %>
<html>
<head>
<title>修改学生信息</title>
</head>
<body>
<%
int id = Integer.parseInt(request.getParameter("id"));//获取学号
Student stu = StudentDao.getStudent(id);//根据学号获取完整的对象
%>
<form action="updateCheck.jsp?id=<%=id%>" method="post">
学号: <input type="text" name="id" value="<%=stu.getId()%>"><br>
姓名: <input type="text" name="name" value="<%=stu.getName()%>"><br>
密码: <input type="text" name="password" value="<%=stu.getPassword()%>"><br>
<input type="submit" value="修改">
<input type="reset" value="重置">
</form>
</body>
</html>
(五)查询界面
代码如下:
<%--
Created by IntelliJ IDEA.
User: HARD
Date: 2021/12/12
Time: 20:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.bean.Student" %>
<%@ page import="com.dao.StudentDao" %>
<html>
<head>
<title>检查添加学生信息</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
//获取来自 add.jsp 的表单
int id = Integer.parseInt(request.getParameter("id")) ;
String name = request.getParameter("name");
String password = request.getParameter("password");
//创建 student 对象
Student student = new Student();
student.setId(id);
student.setName(name);
student.setPassword(password);
StudentDao.add(student);
//添加完成就返回查看页面
response.sendRedirect("index.jsp");
%>
</body>
</html>
3.创建Java类实现功能
(一)创建对象类
代码如下:
package com.bean;
public class Student {
private int id;
private String password;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
(二)创建数据访问层(Dao层)
1.创建连接数据库操作对象类,BaseDao.java
package com.dao;
import java.sql.*;
/*
* 连接数据库
*
* */
public class BaseDao {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/rg56?useUnicode=yes&characterEncoding=utf8", "root", "131488");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeAll(ResultSet rs,PreparedStatement pStmt,Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pStmt != null){
try {
pStmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
(二)创建操作对象类
package com.dao;
import com.bean.Student;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/*
* 用来对学生进行操作
* */
public class StudentDao {
//获取学生信息列表
public static List<Student> getList() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
List<Student> list = new ArrayList<>();
try {
conn = BaseDao.getConnection();
stmt = conn.prepareStatement("SELECT * FROM stuno");
rs = stmt.executeQuery();
while (rs.next()) {
Student stu = new Student();
stu.setId(rs.getInt(1));
stu.setName(rs.getString(2));
stu.setPassword(rs.getString(3));
list.add(stu);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
BaseDao.closeAll(rs, stmt, conn);
}
return list;
}
//增加学生信息
public static void add(Student stu) {
Connection con = null;
PreparedStatement pStmt = null;
ResultSet rs = null;
try {
con = BaseDao.getConnection();
pStmt = con.prepareStatement("insert into stuno(id,name,password) values(?,?,?)");
pStmt.setInt(1, stu.getId());
pStmt.setString(2, stu.getName());
pStmt.setString(3, stu.getPassword());
pStmt.executeUpdate();//更新数据
} catch (SQLException e) {
e.printStackTrace();
}
}
//根据学号删除学生信息
public static void delete(int id) {
Connection con = null;
PreparedStatement pStmt = null;
try {
con = BaseDao.getConnection();
pStmt = con.prepareStatement("delete from stuno where id=?");
pStmt.setInt(1, id);
pStmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
//获取单个学生对象
public static Student getStudent(int id) {
Student s = new Student();
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = BaseDao.getConnection();
stmt = conn.prepareStatement("select * from stuno where id=?");
stmt.setInt(1, id);
rs = stmt.executeQuery();
if (rs.next()) {
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
BaseDao.closeAll(rs, stmt, conn);
}
return s;
}
//修改功能
public static void updateStudent(Student student) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = BaseDao.getConnection();
String sql = "UPDATE stuno SET id=?,name=?,password=? where id=?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, student.getId());
stmt.setString(2, student.getName());
stmt.setString(3, student.getPassword());
stmt.setInt(4, student.getId());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
BaseDao.closeAll(rs, stmt, conn);
}
}
//查询功能,根据模糊查询学号返回所有学生信息
public static List<Student> getStudentList(int id) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
List<Student> allStudent = new ArrayList<>();
try {
conn = BaseDao.getConnection();
stmt = conn.prepareStatement("select * from stuno where id like ?");
stmt.setString(1, "%" + id + "%");
rs = stmt.executeQuery();
while (rs.next()) {
Student stu = new Student();
stu.setId(rs.getInt(1));
stu.setName(rs.getString(2));
stu.setPassword(rs.getString(3));
allStudent.add(stu);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
BaseDao.closeAll(rs, stmt, conn);
}
return allStudent;
}
}
(三)创建servlet
我只把查找功能交给了servlet,可根据自己需求添加
package com.sevlet;
import com.dao.StudentDao;
import com.bean.Student;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
/**
* /search 是注解也可以在 web.xml中配置servlet
*
*/
@WebServlet("/search")
public class SearchSevlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
int id = Integer.parseInt(req.getParameter("id"));
List<Student> list = StudentDao.getStudentList(id);
req.setAttribute("list", list);
req.getRequestDispatcher("searchStudent.jsp").forward(req, resp);
super.doPost(req, resp);
}
}
(四)配置过滤器
1.配置字符码过滤器
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
private static String encoding; // 定义变量接收初始化的值
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 设置字符编码链锁
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
// 初始化
public void init(FilterConfig config) throws ServletException {
// 接收web.xml配置文件中的初始参数
encoding = config.getInitParameter("CharsetEncoding");
}
}
创建完了还需要在web.xml中配置
<filter>
<filter-name>charsetEncodingFilter</filter-name>
<filter-class>com.filter.EncodingFilter</filter-class>
<init-param>
<param-name>CharsetEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(2)创建权限过滤器
package com.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class PrivateFilter implements Filter {
private FilterConfig filterConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
//这里的 name 是登入成功后在登入成功界面加一个 session.setAttribute("name","xxx");
String name = (String) session.getAttribute("name");
if (name == null) {
if (request.getRequestURI().indexOf("../firstLogin.jsp") > -1) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
response.sendRedirect("../firstLogin.jsp");
}
} else {
request.getRequestDispatcher("index.jsp").forward(request,response);
return;
}
}
@Override
public void destroy() {
}
}
同样需要在web.xml中配置
<filter>
<filter-name>PrivateFilter</filter-name>
<filter-class>com.filter.PrivateFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrivateFilter</filter-name>
<!-- 需要过滤的路径-->
<url-pattern>/private/*</url-pattern>
</filter-mapping>
源码
最后大致就大功完成了,感谢支持。
最后附上我自己学习时做的班费管理系统班费管理系统
本篇文章的源码也附上链接:源码 提取码:hx38