java书城登录注册查询 原生servlet实现


前言

本人是一位破烂专科的大二学生,在课余时间会去多学一些内容,这次临近年末要做一次年末的总结汇报,在汇报之前打算借这个平台梳理一下近期所学到的内容。由于自己学习的不够透彻,所以项目中很多内容不够理解,不够完善,方法还有代码格式也存在很多问题,也希望大家多多包涵,多多指出问题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目功能

主要功能有: 注册功能, 登录功能, 书库内容查询功能

二、项目实现方法

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所有的遗憾,都是大家未来惊喜的铺垫。)
在这里插入图片描述

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值