zoukankan      html  css  js  c++  java
  • 基于jsp+servlet完成的用户登录

    采用jsp和servlet完成登录案例、意在熟悉三层架构模式。

    1. 首先创建实体类 User  ,本类就封装了用户名、密码和性别、生成对应的getter和setter方法、及toString方法。
    2. 其次设计与之对应的数据库。
    3. 接下来是设计UserDao接口,接口中有一个[抽象]方法。登录方法,因为是根据用户名和密码进行查询登录、返回必然是一个用户User,所以返回值类型为User。
    4. 接下来是设计UserDaoImpl实现类、因为实现类需要实现UserDao接口中全部未实现的方法,则需要覆写login方法
    5. UserDaoImpl是处理SQL语句的增删改查的地方,但是在处理之前必须要先获取到数据库的连接开关。
    6. JdbcUtil就是控制数据库的连接开关。本类是一个工具类、工具类则大致全都是使用的静态化...目的在于调用起来更加方便
    7. UserDaoImpl调用JdbcUtil、就可以获取数据库的连接,有了连接。即con! 则可以进行增删改查操作。通过con 链接创建一个执行SQL语句的对象:Statement对象!通过st“执行查询”的方法,参数为SQL语句、返回值为结果集ResultSet。

         判断 结果集中 有没有 数据 : 

              |--- 有数据: 取到两个数据: Username  和 Password 封装到user,因为返回值类型是User。

              |--- 无数据:  返回 null! 思考:返回给谁? 谁调用、返回给谁。  这里是UserDao接口调用的、所以返回给了UserDao接口。

      8. 将结果(user或者null)返回给UserServiceImpl   ,此时UserServiceImpl    里了数据(数据可能为user或者null)

      9. UserServiceImpl 将数据(数据可能为user或者null)返回给UserService

      10. UserService 将数据(数据可能为user或者null)返回给UserServlet 

      11.UserServlet 接受到数据。如下:User u = userService.userLogin(username, password);//u可能为前面传递过来的user或是null

        进行判断

          如果是user  调整到成功!

          如果是null  跳转到失败页面

    1.  建类  实体类 User  

    package cn.javabs.usermanager.entity;
    /**
     * 设计  用户  的实体类
     * @author Mryang
     *
     */
    public class User {
    
    	private Integer id;
    	
    	private String username;
    	
    	private String password;
    	
    	private String sex;
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public String getSex() {
    		return sex;
    	}
    
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    
    	@Override
    	public String toString() {
    		return "User [id=" + id + ", username=" + username + ", password="
    				+ password + ", sex=" + sex + "]";
    	}
    	
    }
    

       2. 设计数据库 与 实体类的变量一一对应

    -- 创建数据库  名称是usermanager
    create database  usermanager;
    
    -- 使用 数据库
    
    use  usermanager;
    
    -- 建表
    create table user(
    	
    	id int primary key auto_increment, -- id 是整型  主键、 自动递增
    
    	username varchar(50) not null unique,-- not null unique 不许为空  唯一
    
    	password varchar(50) not null , 
    	
    	sex varchar(10)
    );
    

      3. dao

    package cn.javabs.usermanager.dao;
    
    import cn.javabs.usermanager.entity.User;
    
    /**
     * 用户的dao接口的设计
     * @author Mryang
     *
     */
    public interface UserDao {
    	
    	/**
    	 * 用户登录功能
    	 * @param username 参数  为用户名
    	 * @param password 参数 为密码
    	 * @return  user
    	 */
    	User login(String username , String password);
    	
    }
    

      4.设计UserDao接口的实现类UserDaoImpl

    package cn.javabs.usermanager.dao.impl;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import cn.javabs.usermanager.dao.UserDao;
    import cn.javabs.usermanager.entity.User;
    import cn.javabs.usermanager.exception.UserLoginException;
    import cn.javabs.usermanager.util.JdbcUtil;
    /**
     * userdao的实现类
     * @author Mryang
     *	调用 jdbc
     *
     *静态方法优于构造方法先执行
     *
     */
    public class UserDaoImpl implements UserDao {
    
    	
    	@Override
    	public User login(String username, String password) {
    		
    		
    		try {
    			
    			Connection con = JdbcUtil.getConnection();
    			
    			Statement st = con.createStatement();
    			
    			ResultSet rs = st.executeQuery("select * from  user  where username = '"+username+"'  and password = '"+password+"';");
    			
    			if(rs.next()){
    				User user =  new User();
    				
    				user.setUsername(rs.getString("username"));
    				user.setPassword(rs.getString("password"));
    				
    				System.out.println("userDao中的user的内容是"+ user);
    				
    				return user;
    			}else{
    				return null;
    			}
    			
    			
    		} catch (SQLException e) {
    			throw  new UserLoginException();
    		}
    		
    		
    		
    	}
    			
    			
    			
    
    }
    

      

    5. 设计工具类  jdbc:

    package cn.javabs.usermanager.util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    /**
     * 因为要使用类名[点]方法名称  所有 方法需要被静态化
     * @author Mryang
     * --------------------------------------------------------------------------------------
     * 反射的三种方式: 	1. Class.forName() 2. xxx对象.getClass(); 3. Xxx.class()
     * --------------------------------------------------------------------------------------
     * 
     *
     */
    public class JdbcUtil {
    
    	private static String  driver ="com.mysql.jdbc.Driver";// 数据库驱动类
    	private static String  url ="jdbc:mysql://localhost:3306/usermanager";// 数据库链接
    	private static String  user ="root";// 数据库用户名
    	private static String  password ="sorry";// 数据库密码
    	
    	// 权限修饰符  静态修饰符   返回值类型  方法名称
    	/**
    	 * 获取链接的
    	 * @return conn
    	 */
    	public static Connection getConnection() {
    	
    		try {
    			//1. 类加载
    			Class.forName(driver);
    		//2. 驱动管理获取链接三个参数  接收
    			Connection conn = DriverManager.getConnection(url, user, password);
    			return conn;
    			
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		}
    	}
    	// TODO 关闭链接没写
    	
    	
    }
    

      7.设计service接口

    package cn.javabs.usermanager.service;
    
    import cn.javabs.usermanager.entity.User;
    
    public interface UserService {
    
    
    	/**
    	 * 用户登录功能
    	 * @param username 参数  为用户名
    	 * @param password 参数 为密码
    	 * @return  user
    	 */
    	User userLogin(String username , String password);
    	
    	
    }
    

      8.设计UserService的实现类

    package cn.javabs.usermanager.service.impl;
    
    import cn.javabs.usermanager.dao.UserDao;
    import cn.javabs.usermanager.dao.impl.UserDaoImpl;
    import cn.javabs.usermanager.entity.User;
    import cn.javabs.usermanager.service.UserService;
    
    public class UserServiceImpl implements UserService {
    	
    	// 采用多态的形式进行实例化dao  
    	UserDao dao = new  UserDaoImpl();
    	
    	@Override
    	public User userLogin(String username, String password) {
    		//dao代表的是UserDao 这个接口
    //		.login  用这个接口中的用户登录功能  并且传了两个参数给你
    		return dao.login(username, password);
    	}
    
    }
    

      9. 设计jsp的登录页面

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      
      <body>
       		<center>
    	   			<form action="<%=basePath%>servlet/UserLoginServlet" method="post" >
    				<table border="1px" width="438px"   >
    					<tr align="center">
    						<td>用户名</td>
    						<td>
    							<input type="text" name="username" >
    						</td>
    					</tr>
    					<tr align="center">
    						<td>密码</td>
    						<td>
    							<input type="password" name="password" >
    						</td>
    					</tr>
    					<tr align="center">
    						<td colspan="2" >
    							<input type="submit" value="用户登录" >
    							  
    							<input type="reset" value="重置内容" >
    						</td>
    					</tr>
    				</table>   			
    	   		</form>
       		</center>
      </body>
    </html>
    

      10.设计servlet

    package cn.javabs.usermanager.web.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.javabs.usermanager.entity.User;
    import cn.javabs.usermanager.service.UserService;
    import cn.javabs.usermanager.service.impl.UserServiceImpl;
    
    public class UserLoginServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		/*
    		 * 1 set encoding
    		 */
    		response.setContentType("text/html");
    		response.setCharacterEncoding("utf-8");
    		request.setCharacterEncoding("utf-8");
    		
    		/*
    		 * 2. get 前台  的  参数
    		 */
    		String username = request.getParameter("username");
    		String password = request.getParameter("password");
    	
    		/*
    		 * 3. 将获取到的用户名和密码传递给 userService!
    		 * 所以 得有  userService  没有  怎么  办?  实例化  就有了 
    		 */
    		UserService userService = new UserServiceImpl();
    		
    		User u = userService.userLogin(username, password);
    		
    		if(u == null){
    			response.getWriter().write("您的用户名或密码有误,请检查!");
    			response.setHeader("Refresh", "5;Url="+ request.getContextPath());
    		}else{
    			request.setAttribute("mark", "用户登录成功!");
    			request.getRequestDispatcher("/message.jsp").forward(request, response);
    		}
    	
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doGet( request,  response);
    	}
    
    }
    

      11设计一个体系页面

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
      		<h1 style="color: red;">	<%= request.getAttribute("mark") %></h1>
      </body>
    </html>
    

      

      

  • 相关阅读:
    tensorflow_知识点
    Win10 1803 谷歌内核浏览器出现假死现象的解决方法汇总
    今日笑话
    留存率例子(待优化)
    安装ODOO13
    freepascal获取进程列表
    vba给图片添加logo
    wps中开始支持javascript了
    获取本地ip
    判断素数
  • 原文地址:https://www.cnblogs.com/xiaoxiao5016/p/10598222.html
Copyright © 2011-2022 走看看