代碼框架介紹:
后端部分:
beans:實(shí)體類,存放各個(gè)數(shù)據(jù)庫表單的實(shí)體類;
dao:接口部分:創(chuàng)建對(duì)實(shí)體類對(duì)象的增刪改查的方法接口。
impl部分:具體實(shí)現(xiàn)接口的方法,方便調(diào)用。
servlet: 接受處理前端頁面?zhèn)鱽淼臄?shù)據(jù),并在處理結(jié)束后響應(yīng)前端頁面。
test:負(fù)責(zé)后端代碼測(cè)試。
utis工具模塊:由于JDBC連接及數(shù)據(jù)處理存在大量重復(fù),故提取其中重復(fù)部分代碼封裝作為工具類被impl中的類調(diào)用以簡(jiǎn)化代碼。
前端部分:
lib:存放前端及jsp、servlet所需jar包;
web.xml:用來指定默認(rèn)首頁及建立后端servlet與前端代碼之間的映射連接;
index.jsp:默認(rèn)首頁(內(nèi)含登錄(還未實(shí)現(xiàn)),注冊(cè),數(shù)據(jù)展示功能);
register.jsp:注冊(cè)頁面,填寫相關(guān)信息點(diǎn)擊注冊(cè),?跳轉(zhuǎn)到數(shù)據(jù)展示頁面,完成注冊(cè)。
StudentList.jsp:數(shù)據(jù)展示,將表中所有數(shù)據(jù)讀取并展示到頁面。(內(nèi)含數(shù)據(jù)修改和刪除功能)
updatestu.jsp:數(shù)據(jù)修改更新,在數(shù)據(jù)展示頁面點(diǎn)擊修改自動(dòng)跳轉(zhuǎn)到此頁面,根據(jù)學(xué)號(hào)修改相關(guān)信息,修改后提交繼續(xù)跳轉(zhuǎn)到數(shù)據(jù)展示頁面展示更新后的數(shù)據(jù)并同步到數(shù)據(jù)庫。
代碼展示:(以Student為例)
后端:
實(shí)體類:
package com.openlab.beans;
//也可使用limbok插件簡(jiǎn)化代碼,通過注解省略get set方法的書寫
public class Student {
private String StudentNo ;
private String LoginPwd ;
private String StudentName;
private String Sex ;
private Integer GradeId ;
private String Phone ;
private String Address ;
private String BornDate ;
private String Email ;
public Student() {
}
public Student(String studentNo, String loginPwd, String studentName, String sex, Integer gradeId, String phone, String address, String bornDate, String email) {
StudentNo = studentNo;
LoginPwd = loginPwd;
StudentName = studentName;
Sex = sex;
GradeId = gradeId;
Phone = phone;
Address = address;
BornDate = bornDate;
Email = email;
}
public String getStudentNo() {
return StudentNo;
}
public void setStudentNo(String studentNo) {
StudentNo = studentNo;
}
public String getLoginPwd() {
return LoginPwd;
}
public void setLoginPwd(String loginPwd) {
LoginPwd = loginPwd;
}
public String getStudentName() {
return StudentName;
}
public void setStudentName(String studentName) {
StudentName = studentName;
}
public String getSex() {
return Sex;
}
public void setSex(String sex) {
Sex = sex;
}
public Integer getGradeId() {
return GradeId;
}
public void setGradeId(Integer gradeId) {
GradeId = gradeId;
}
public String getPhone() {
return Phone;
}
public void setPhone(String phone) {
Phone = phone;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
public String getBornDate() {
return BornDate;
}
public void setBornDate(String bornDate) {
BornDate = bornDate;
}
public String getEmail() {
return Email;
}
public void setEmail(String email) {
Email = email;
}
@Override
public String toString() {
return "Student{" +
"StudentNo='" + StudentNo + '\'' +
", LoginPwd='" + LoginPwd + '\'' +
", StudentName='" + StudentName + '\'' +
", Sex='" + Sex + '\'' +
", GradeId=" + GradeId +
", Phone='" + Phone + '\'' +
", Address='" + Address + '\'' +
", BornDate='" + BornDate + '\'' +
", Email='" + Email + '\'' +
'}';
}
}
接口類:
package com.openlab.dao;
import com.openlab.beans.Student;
import java.util.List;
public interface StudentDao {
public int save(Student student);//插入學(xué)生信息
public int update(Student student);//更新學(xué)生信息(通過學(xué)生學(xué)號(hào))
public int delete(String stuid);//通過學(xué)號(hào)刪除學(xué)生信息
public List<Student> getAll();//獲取所有學(xué)生信息
public Student findById(String stuid);//通過id查找指定學(xué)生信息
}
工具類:
package com.openlab.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class JDBCUtils {
static Properties properties = new Properties();
static DataSource dataSource = null;
static {
InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
try {
properties.load(inputStream);
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConnection() throws Exception {
try {
Connection connection = dataSource.getConnection();
return connection;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//新增成功后返回新增的主鍵
public int save(String sql, Object... params) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null;
int id = -1;
try {
connection = getConnection();
preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
setParameter(preparedStatement, params);
preparedStatement.executeUpdate();
rs = preparedStatement.getGeneratedKeys();
if (rs.next()) {
Object obj = rs.getObject(1);
id = Integer.parseInt(obj.toString());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(connection, preparedStatement, rs);
}
return id;
}
public int executeUpdate(String sql, Object... params) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = getConnection();
preparedStatement = connection.prepareStatement(sql);
setParameter(preparedStatement, params);
// System.out.println(sql);
int rows = preparedStatement.executeUpdate();
return rows;
} catch (Exception e) {
e.printStackTrace();
} finally {
close(connection, preparedStatement, null);
}
return -1;
}
public <T> T findOneById(Class<T> tClass, String sql, Object... params) {
List<T> list = executeQuery(tClass, sql, params);
if (list != null && list.size() > 0) {
return list.get(0);
} else {
return null;
}
}
public <T> List<T> executeQuery(Class<T> tClass, String sql, Object... params) {
List<T> list = new ArrayList<>();
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
connection = getConnection();
preparedStatement = connection.prepareStatement(sql);
setParameter(preparedStatement, params);
rs = preparedStatement.executeQuery();
while (rs.next()) {
T t = tClass.newInstance();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
for (int i = 1; i <= count; i++) {
String label = rsmd.getColumnLabel(i);
Object v = rs.getObject(label);
//
// String fieldname = change(label);
String fieldname = label;
Field field = tClass.getDeclaredField(fieldname);
field.setAccessible(true);
field.set(t, v);
}
list.add(t);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(connection, preparedStatement, rs);
}
return list;
}
/**
* 如果表中的列是全部小寫的 empid --->empid
* _ emp_id--->empId
* EMPID--->empid
*
* @param label
* @return
*/
private static String change(String label) {
int index = label.indexOf("_");
String fieldname = "";
if (index != -1) {
fieldname = label.substring(0, index) + label.substring(index + 1, index + 2).toUpperCase() + label.substring(index + 2);
} else {//沒找到
fieldname = label.toLowerCase();
}
return fieldname;
}
private void setParameter(PreparedStatement preparedStatement, Object... params) {
try {
if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
// System.out.println(params[i]);
preparedStatement.setObject(i + 1, params[i]);
}
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public void close(Connection connection, Statement statement, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
實(shí)現(xiàn)類:
package com.openlab.dao.impl;
import com.openlab.beans.Student;
import com.openlab.utils.JDBCUtils;
import java.util.List;
public class StudentDao implements com.openlab.dao.StudentDao {
@Override
public int save(Student student) {
return new JDBCUtils().save("insert into student values(?,?,?,?,?,?,?,?,?)",student.getStudentNo(),student.getLoginPwd(),student.getStudentName(),student.getSex(),student.getGradeId(),student.getPhone(),student.getAddress(),student.getBornDate(),student.getEmail());
}
@Override
public int update(Student student) {
// System.out.println(student.getStudentName()+student.getLoginPwd()+student.getSex()+student.getGradeId()+student.getPhone()+student.getAddress()+student.getBornDate()+student.getEmail()+student.getStudentNo());
return new JDBCUtils().executeUpdate("update student set StudentName = ?,LoginPwd = ? ,Sex = ?, GradeId = ?, Phone = ?, Address = ?, BornDate = ?, Email = ? where StudentNo = ?" ,student.getStudentName(),student.getLoginPwd(),student.getSex(),student.getGradeId(),student.getPhone(),student.getAddress(),student.getBornDate(),student.getEmail(),student.getStudentNo());
}
@Override
public int delete(String stuid) {
return new JDBCUtils().executeUpdate("delete from student where StudentNo = ?",stuid);
}
@Override
public List<Student> getAll() {
return new JDBCUtils().executeQuery(Student.class,"select * from student");
}
@Override
public Student findById(String stuid) {
return new JDBCUtils().findOneById(Student.class,"select * from student where StudentNo = ? ",stuid);
}
}
servlet類:
增加:
package com.openlab.sevlet;
import com.openlab.beans.Student;
import com.openlab.dao.impl.StudentDao;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "Servlet", value = "/Servlet")
public class addStudentServlet extends HttpServlet {
StudentDao studentDao = new StudentDao();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//獲取參數(shù)
// System.out.println(request.getParameter("StudentNo"));
String studentNo = request.getParameter("StudentNo");
String loginPwd = request.getParameter("LoginPwd");
String studentName = request.getParameter("StudentName");
String sex = request.getParameter("sex");
if(sex.equals("f")){
sex = "女";
}else {
sex = "男";
}
String gradeId = request.getParameter("GradeId");
String phone = request.getParameter("Phone");
String address = request.getParameter("Address");
String bornDate = request.getParameter("BornDate");
String email = request.getParameter("Email");
Student student = new Student(studentNo,loginPwd,studentName,sex,Integer.valueOf(gradeId),phone,address,bornDate,email);
//插入數(shù)據(jù)
studentDao.save(student);
// System.out.println(update);
//響應(yīng)頁面
response.sendRedirect("Studentlist.jsp");
}
}
刪除:
package com.openlab.sevlet;
import com.openlab.dao.impl.StudentDao;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "Servlet2", value = "/Servlet2")
public class deleteStudentServlet extends HttpServlet {
StudentDao studentDao = new StudentDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//獲取參數(shù)
String studentNo = request.getParameter("stuid");
//刪除數(shù)據(jù)
studentDao.delete(studentNo);
//響應(yīng)頁面
response.sendRedirect("Studentlist.jsp");
}
}
修改:
package com.openlab.sevlet;
import com.openlab.beans.Student;
import com.openlab.dao.impl.StudentDao;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "updateStudentServlet", value = "/updateStudentServlet")
public class updateStudentServlet extends HttpServlet {
StudentDao studentDao = new StudentDao();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//獲取參數(shù)
String studentNo = request.getParameter("StudentNo");
String selecttext = request.getParameter("selecttext");
Student student = studentDao.findById(studentNo);
String selectid = request.getParameter("selectid");
switch (selectid){
case "1": student.setLoginPwd(selecttext);break;
case "2":student.setStudentName(selecttext);break;
case "3":student.setSex(selecttext);break;
case "4":student.setGradeId(Integer.parseInt(selecttext));break;
case "5":student.setPhone(selecttext);break;
case "6":student.setAddress(selecttext);break;
case "7":student.setBornDate(selecttext);break;
case "8":student.setEmail(selecttext);break;
default:
System.out.println("輸入id有誤?。?!");
}
//插入數(shù)據(jù)
studentDao.update(student);
//響應(yīng)頁面
response.sendRedirect("Studentlist.jsp");
}
}
前端:
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">
<!--默認(rèn)首頁-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--建立映射-->
<servlet>
<servlet-name>addStudentServlet</servlet-name>
<servlet-class>com.openlab.sevlet.addStudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addStudentServlet</servlet-name>
<url-pattern>/addstu.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>deleteStudentServlet</servlet-name>
<servlet-class>com.openlab.sevlet.deleteStudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>deleteStudentServlet</servlet-name>
<url-pattern>/delestu.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>updateStudentServlet</servlet-name>
<servlet-class>com.openlab.sevlet.updateStudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>updateStudentServlet</servlet-name>
<url-pattern>/updatestu.do</url-pattern>
</servlet-mapping>
</web-app>
首頁:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首頁</title>
</head>
<body>
<p>登錄</p>
<p><a href="register.jsp">注冊(cè)</a></p>
<p><a href="Studentlist.jsp">數(shù)據(jù)展示</a></p>
</body>
</html>
注冊(cè)頁面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注冊(cè)</title>
</head>
<body>
<form action="addstu.do" method="post">
<p>學(xué)號(hào):<input type="text" name="StudentNo"></p>
<p>密碼:<input type="text" name="LoginPwd"></p>
<p>姓名:<input type="text" name="StudentName"></p>
<p>性別:<input type="radio" name="sex" value="m">男
<input type="radio" name="sex" value="f">女
</p>
<p>年級(jí):<input type="text" name="GradeId"></p>
<p>電話:<input type="text" name="Phone"></p>
<p>住址:<textarea rows="5" cols="50" name="Address"></textarea></p>
<p>生日:<input type="text" name="BornDate"></p>
<p>郵箱:<input type="text" name="Email"></p>
<p><input type="submit" value="注冊(cè)"/> </p>
</form>
</body>
</html>
數(shù)據(jù)展示:
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.openlab.beans.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="com.openlab.dao.impl.StudentDao" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>展示</title>
</head>
<body>
<%
List<Student> list = new ArrayList<>();
StudentDao studentDao = new StudentDao();
List<Student> all = studentDao.getAll();
for (Student student : all) {
list.add(student);
}
%>
<table border="1" width="600" cellspacing="0" style="color: red">
<tr align="center">
<td>學(xué)號(hào)</td>
<td>密碼</td>
<td>姓名</td>
<td>性別</td>
<td>年級(jí)</td>
<td>電話</td>
<td>住址</td>
<td>生日</td>
<td>郵件</td>
<td colspan="2">操作</td>
</tr>
<%
for (Student student : list){
%>
<tr align="center">
<td><%= student.getStudentNo()%></td>
<td><%= student.getLoginPwd()%></td>
<td><%= student.getStudentName()%></td>
<td><%= student.getSex()%></td>
<td><%= student.getGradeId()%></td>
<td><%= student.getPhone()%></td>
<td><%= student.getAddress()%></td>
<td><%= student.getBornDate()%></td>
<td><%= student.getEmail()%></td>
<td>
<a href="updatestu.jsp?stuid=<%=student.getStudentNo()%>">修改</a>
</td>
<td>
<a href="delestu.do?stuid=<%=student.getStudentNo()%>">刪除</a>
</td>
</tr>
<%
}
%>
</table>
</body>
</html>
數(shù)據(jù)修改:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>更新</title>
</head>
<body>
<form action="updatestu.do?StudentNo=<%=request.getParameter("stuid")%>" method="post">
<p>修改的學(xué)生學(xué)號(hào):<%=request.getParameter("stuid")%></p>
<p>請(qǐng)輸入你要修改的字段<input type="text" name="selectid"></p>
<p>請(qǐng)輸入修改后的字段內(nèi)容<input type="text" name="selecttext"></p>
<p>密碼:1</p>
<p>姓名:2</p>
<p>性別:3</p>
<p>年級(jí):4</p>
<p>電話:5</p>
<p>住址:6</p>
<p>生日:7</p>
<p>郵箱:8</p>
<p><input type="submit" value="確認(rèn)修改"/> </p>
</form>
</body>
</html>
效果展示:
首頁(稍顯簡(jiǎn)陋,可后期修飾):(登錄還未實(shí)現(xiàn))
?注冊(cè):
填寫信息點(diǎn)擊注冊(cè)跳轉(zhuǎn)到數(shù)據(jù)展示頁面(孫悟空已添加):
?點(diǎn)擊修改:(修改zhaosi名字為趙四)
?可以看到趙四修改成功;?
?點(diǎn)擊刪除:(點(diǎn)擊刪除”九點(diǎn)“,刪除成功)文章來源:http://www.zghlxwxcb.cn/news/detail-764744.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-764744.html
到了這里,關(guān)于jsp、servlet簡(jiǎn)單實(shí)現(xiàn)前后端交互對(duì)數(shù)據(jù)處理及展示的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!