前言
本人是一位破烂专科的大二学生,在课余时间会去多学一些内容,这次临近年末要做一次年末的总结汇报,在汇报之前打算借这个平台梳理一下近期所学到的内容。由于自己学习的不够透彻,所以项目中很多内容不够理解,不够完善,方法还有代码格式也存在很多问题,也希望大家多多包涵,多多指出问题。
提示:以下是本篇文章正文内容,下面案例可供参考
一、项目功能
主要功能有: 注册功能, 登录功能, 书库内容查询功能二、项目实现方法
1.项目结构
程序框架主要包括: 两个实体类 一个用于封装用户信息 一个用于封装书库信息 三个servlet 分别实现登录注册和查询
一个工具类用于实现数据库连接及关闭
数据库部分主要分为 :book uesr 两个表
1.登录分析:查询 user表判断from表单传输内容与表内容是否相符
2.注册分析:插入 将from表内容插入uesr表
3.书城显示分析:查询 book表插入集合 前端jsp接收集合内容
这次项目题目是课本上的内容,由于老师并未在课堂上讲过ajax,dao层,接口层的运用所以这次项目采用了form进行传值,前端取值方面则是采用session的方法。
下面来看项目代码
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import util.DBUtil;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public LoginServlet() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setHeader("Content-Type", "text/html;charset=utf-8");//定义字符集
String username = request.getParameter("username");
String password = request.getParameter("password");//获取前端传值
HttpSession session=request.getSession();
session.setAttribute("userName", username);//创建session 将用户名字存入方面前台欢迎页面获取
try {
//判断验证方法的结果进行跳转
if (checkLogin(username, password)==true) {
response.sendRedirect("/javaWebDemo/QueryServlet");
//成功进入查询方法 查询书库内容
}else {
response.sendRedirect("/javaWebDemo/loginFailed.jsp");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//验证登录的方法=dao层
public boolean checkLogin(String username, String password)throws SQLException {
boolean flag = false;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
System.out.println("账号"+username);
System.out.println("密码"+password);
String sql ="select * from user where username = '"+ username +"'";//sql查询语句
conn = DBUtil.getConnection();//调用工具类
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
while (rs.next()){
if(rs.getString("password").equals(password)){
//判断查询到的密码与输入密码是否相同
flag = true;
}else {
flag=false;
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs, st, conn);
}
return flag;
//返回判断结果
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
1.sevlet接收form表单传值,转换字符串,定义checkLogin方法用于完成数据库判断。
2.调用工具类连接数据库,查询from传输的name是否存在于user表并判断密码是否正确,返回布尔类型值。
3.判断 checkLogin方法返回的布尔类型值,true跳转到QueryServlet进行book表的查询并返回到登录成功的页面,若返回结果为false则跳转登录失败。
总结
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import util.DBUtil;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bean.User;
/**
* Servlet implementation class RegiServlet
*/
public class RegistServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public RegistServlet() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setHeader("Content-Type", "text/html;charset=utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
User u = new User();
u.setUsername(username);
u.setPassword(password);
try {
if (save(u)==true) {
PrintWriter out = response.getWriter();
out.print("恭喜您,注册成功!");
response.setHeader("Refresh", "2;URL=/javaWebDemo/login.jsp");
}else {
PrintWriter out = response.getWriter();
out.print("注册失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public boolean save(User user)throws SQLException {
//保存方法
boolean flag = false;
Connection conn = null;
PreparedStatement pst = null;
conn = DBUtil.getConnection();
String sql = "insert into user(id,username, password,time) values(?,?,?,?)";
UUID uuid = UUID.randomUUID();//获取随机id
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String s= dateFormat.format(now);//获取当前时间
try {
pst = conn.prepareStatement(sql);
pst.setString(1, uuid.toString());
pst.setString(2, user.getUsername());
pst.setString(3, user.getPassword());
pst.setString(4, s);
System.out.println("插入时的用户名: "+user.getUsername());
int row = pst.executeUpdate();
if(row>0){
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(pst, conn);
}
return flag;
}
}
1.sevlet接收from表单传值,转换字符串,定义save方法用于完成数据库判断。
2.调用工具类连接数据库,插入from传输的内容于uesr表 user定义主键,定义int res判断数据更改条数 若大于1 返回布尔类型值。
3.判断 save方法返回的布尔类型值,true跳转注册成功2s后返回登录界面,false返回注册失败,继续完成注册。
package servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import bean.Book;
import util.DBUtil;
/**
* Servlet implementation class QueryServlet
*/
public class QueryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public QueryServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection conn = null;
conn = DBUtil.getConnection();
ArrayList<Book> listbook = new ArrayList<Book>();
HttpSession session=request.getSession();
session.setAttribute("listbook", listbook);
String sql = "SELECT * FROM book";
try {
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet res = stmt.executeQuery();
// ResultSet res = stmt.executeQuery();
while (res.next()) {
Book book = new Book();
book.setBookName(res.getString("bookName"));
book.setBookAuthor(res.getString("bookAuthor"));
book.setPrice(res.getInt("price"));
book.setNumber(res.getInt("number"));
listbook.add(book);
System.out.println(listbook);
}
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
request.getRequestDispatcher("loginSucceed.jsp").forward(request, response);
}
}
1.首先定义listbook集合,完成数据库连接。
2.执行查询语句,将查询到的结果集循环插入listbook集合,session方法保存这个集合,并将结果返回到loginSucceed.jsp。
3. 引入jstl,standard jar包forEach遍历获取到的listbook。
图片展示
结语
本次任务是两周前java实训的时候做的,当时一边在学spring boot的框架一边做这个项目,对于实训内容的实现跟《javaweb程序设计任务教程》这本书上的步骤不太一样,只是稍微写出一个简陋的功能,其中还有很多细节没有考虑到,希望大家一起改正一起进步,这两天也会写出一篇对于spring boot项目的简单总结。
另外
这是我第一次写文章,这次实训的内容去年就已经在网上学习过,主要是靠工作室的学长学姐讲一些内容,但是在实际操作中还有很多问题的是靠CSDN这个平台,依靠一些大佬们的文章解决的。
然后第一次写文章,自己以前学习的内容也都是看csdn的博客,不知道这次手撸的项目会不会跟哪一位大佬有相似,如果有侵权的行为请联系我(个人觉得应该不会有,因为我自己写的挺lou的,如果有即时联系删掉就好)。
另外祝大家元旦快乐,新的一年开开心心健健康康!
(虽然我觉得阳历年不算年,还是愿2020所有的遗憾,都是大家未来惊喜的铺垫。)