javaweb学生管理系统 第一次总结

JavaWeb 学生管理系统 第一次总结

javaweb学生管理系统 第一次总结

javaweb学生管理系统 第一次总结

javaweb学生管理系统 第一次总结

javaweb学生管理系统 第一次总结

; 具备的知识

java se 高级
数据库
js
selvet
El表达式
jsp

项目 目录结构

[外链图片转存失败(img-dfQq8aOt-1568950286321)(https://i.imgur.com/8iHLNIK.png)]

模型包里创建 User类

代码:

package com.it.model;
/**
 * 用户模型
 * @author YandeHu
 *
 */
public class User {

    private int id;
    private String userName;
    private String password;

    public User() {
        super();
        // TODO Auto-generated constructor stub
    }

    public User(String userName, String password) {
        super();
        this.userName = userName;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }

}

创建连接数据库的工具类

package com.it.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Dbutil {

    private String jdbcName="com.mysql.jdbc.Driver";
    private String dbUserName="root";
    private String dbpassword="123456";
    private String dbUrl="jdbc:mysql://localhost:3306/db_studentInfo";

    /*
     * 获取数据库连接
     */
    public Connection getCon()throws Exception{
        Class.forName(jdbcName);
        System.out.println("驱动包加载成功");
        Connection con=DriverManager.getConnection(dbUrl, dbUserName, dbpassword);

        return con;
    }
    /**
     * 关闭数据库
     * @param con  Connection
     * @throws Exception
     */
    public void closeCon(Connection con) throws Exception{
        if(con!=null){
            con.close();
        }
    }

    public static void main(String[] args) throws Exception {
        Dbutil dbUtil=new Dbutil();
        Connection con=null;
        try {
            con=dbUtil.getCon();
            System.out.println("数据库连接成功");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            dbUtil.closeCon(con);
        }

    }

}

创建字符串的工具类

工具类中的方法是:

  • 静态的判空操作
    package com.it.util; public class StringUtil {
  /**
   * 判断字符串是不是空的
   * @param str
   * @return
   */
  public static boolean isEmpty(String str){
    //假如前面有空格除去空格 如果等于""
    if(str==null||"".equals(str.trim())){
        return true;
    }else{
        return false;
    }
  }

  public static boolean isNotEmpty(String str){
    if(str!=null&&!"".equals(str.trim())){
        return true;
    }else{
        return false;
    }
  }

}

创建操作用户数据库的dao类

package com.it.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.it.model.User;

/**
 * 用户与数据库操作的类
 * @author YandeHu
 *
 */
public class UserDao {

    /**
     * 登录验证
     * @param con 连接
     * @param user 用户对象
     * @return 返回一个用户对象
     * @throws Exception
     */
    public User login(Connection con,User user)throws Exception{
        User resultUser=null;
        String sql="select * from t_user where userName=? and password=?";
        PreparedStatement psmt=con.prepareStatement(sql);
        psmt.setString(1, user.getUserName()); //给设置值
        psmt.setString(2, user.getPassword());
        ResultSet rs=psmt.executeQuery(); //查询返回结果集
        //由于只查询一种类型的 不用while 循环 从数据库查询出结果
        if(rs.next()){
            resultUser=new User();
            //给用户设置值
            resultUser.setUserName(rs.getString("userName"));
            resultUser.setPassword(rs.getString("password"));
        }
        return resultUser;
    }
}

编写登录的Servlet LoginServlet

主要的思想和方法

  • 继承HTTPServlet父类重写 doGet() 和doPost()方法
  • 使用request.getParameter(String str); 获取前台(页面)的数据(获取参数)
  • 给前台页面设置值用:request.setAttribute(String args, Object obj);
  • 客户端跳转
  • 服务器端跳转

什么是客户端跳转

客户端跳转也叫 重定向,是一个外部的跳转,使用的是HttpServletResponese对象中response.sendRedirect(Sting location)方法。是一个响应对象的方法,调用这个方法,表明整个 请求已经结束。 服务器开始向客户端返回执行的结果。

response.sendRedirect("main.jsp");

注意:客户端跳转只能传递session和application范围的属性,不能传递request范围的属性

客户端跳转过程图

有图可以看出客户端会发送两个请求,页面的路径会发生变化所以不能专递request。

[外链图片转存失败(img-eExiOXMF-1568950286322)(https://i.imgur.com/asiqRh1.png)]

什么是服务器端跳转

服务器端跳转也叫请求转发,是javax.servlet.RequestDispatcher接口的forward(“”)方法来实现的。

request.getRequestDispatcher("index.jsp").forward(request, response);

注意:服务器跳转地址是不会发生变化,所以可以接受request范围内的属性

服务器端跳转过程
[外链图片转存失败(img-kvxBeqIs-1568950286323)(https://i.imgur.com/DZP6AEZ.png)]

两者的区别

  1. 客户端跳转”/ “代表服务器路径webapps ,即服务器根路径,服务器端跳转”/ “代表站点根路径,即应用程序根路径
  2. 使用服务器端跳转时,客户浏览器的地址栏并不会显示目标地址的URL,而是用客户端跳转时,地址栏当中会显示目标资源的URL
  3. 客户端跳转向服务器请求两次,服务器响应给客户端响应两次
  4. 服务器端跳转 客户端请求一次,服务器端响应一次
  5. 在进行客户端跳转和服务器端跳转时,都需要指定目标资源的URL,如果这个路径以””开始。在客户端跳转当中””代表的是 应用服务器 根目录,而在服务器端跳转当中代表的是 应用 程序 根目录

登录验证数据库的处理流程

创建LoginServlet类 用来处理登录验证的流程

mvc开发模式(图片来源网络)
[外链图片转存失败(img-6iD1oAZu-1568950286324)(https://i.imgur.com/NiipS3K.png)]

  1. 继承HTTPServlet父类重写 doGet() 和doPost()方法
  2. 先从前台获取输入的内容
  3. 验证从前台传入的数据是不是null 如果是null 在浏览器上输出提示信息,进行服务器端跳转,跳转到登录页面,结束当前的方法
  4. 前台传来的数据不是null时,创建数据库连接、用户对象,将传来的值用来初始化用户对象。
  5. 数据库查询,查询是否有着对象,如果没有给出提示,有的话进行客户端跳转
  6. 关闭数据库连接

代码

package com.it.web;

import java.io.IOException;
import java.sql.Connection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.it.dao.UserDao;
import com.it.model.User;
import com.it.util.Dbutil;
import com.it.util.StringUtil;

/**
 * 登录功能的servlet
 * @author YandeHu
 *
 */
public class LoginServet extends HttpServlet{
    //创建数据库工具类的连接
    Dbutil dbutil=new Dbutil();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String userName=request.getParameter("userName");//从前台获取userName的数据
        String password=request.getParameter("password");//从前台获取password的数据
        request.setAttribute("userName", userName);
        request.setAttribute("password", password);
        //服务器端进行验证 验证用户名和密码是不是空的
        if(StringUtil.isEmpty(userName)||StringUtil.isEmpty(password)){
         //服务器端跳转和客户端跳转的区别
            request.setAttribute("error", "用户名或者密码为空!");
            request.getRequestDispatcher("index.jsp").forward(request, response);//服务器端跳转\
            return;
        }
        //连接数据库
        User user=new User(userName,password); //创建从客户端输入的信息的 所初始化的对象
        Connection con=null;

        try {
            con=dbutil.getCon();
            //进行数据库查询
            User currentUser=UserDao.login(con, user); //这是返回从数据库中查询后 返回的User对象
            if(currentUser==null){
                request.setAttribute("error", "用户名或者密码错误");
                //服务器端跳转 重定向
                request.getRequestDispatcher("index.jsp").forward(request, response);
                return;//结束这个方法
            }else{
                response.sendRedirect("main.jsp");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                dbutil.closeCon(con);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

}

登录页面代码

<%@ page language="java" contenttype="text/html; charset=UTF-8" pageencoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>&#x5B66;&#x751F;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#x767B;&#x5F55;</title>
<script type="text/javascript">
    function resetValue(){
        document.getElementById("userName").value="";
        document.getElementById("password").value="";

    }
</script>
</head>
<body>
    <div align="center" style="padding-top: 50px">
    <form action="login" method="post">
        <table width="740" height="500" background="images/login.jpg">
            <tr height="180">
                <td></td>
            </tr>
            <tr height="10">
                <td width="40%"></td>
                <td width="10%">&#x7528;&#x6237;&#x540D;&#xFF1A;</td>
                <td><input type="text" value="${userName }" name="userName" id="userName"></td>
                <td width="30%"></td>
            </tr>
            <tr height="10">
                <td width="40%"></td>
                <td width="10%">&#x5BC6; &#x7801;&#xFF1A;</td>
                <td><input type="password" value="${password }" name="password" id="password"></td>
                <td width="30%"></td>
            </tr>
            <tr height="10">
                <td width="40%"></td>
                <td width="10%"><input type="submit" value="&#x767B;&#x5F55;"></td>
                <td><input type="button" value="&#x91CD;&#x7F6E;" onclick="resetValue()"></td>
                <td width="30%"></td>
            </tr>
            <tr height="10">
                <td width="40%"></td>
                <td colspan="3">
                    <font color="red">${error } </font>
                </td>
            </tr>
            <tr>
                <td></td>
            </tr>
        </table>
        </form>
    </div>

</body>
</html>
</%@>

2017/10/19 18:19:03 项目练习来源于 www.java1234.com

Original: https://www.cnblogs.com/huyande/p/12423540.html
Author: yinder
Title: javaweb学生管理系统 第一次总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/587345/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java实现哈希表

    java实现哈希表 哈希表是一种数据结构,它可以快速的进行插入、查找、删除操作,无论数据量有多大,它都能把插入、查找和删除操作的时间复杂度降为O(1)级别。哈希表是基于数组+链表进…

    Java 2023年6月5日
    080
  • SpringBoot入门学习看这一篇就够了

    1.SpringBoot是什么? SpringBoot是一套基于Spring框架的微服务框架。 2.为什么需要SpringBoot 由于Spring是一个轻量级的企业开发框架,主要…

    Java 2023年6月7日
    065
  • spring boot jdbctemplate queryforstream 使用问题

    开发一个功能为了避免内存问题,使用了 jdbctemplate queryforstream,同时日常中会使用链接池,运行一段时间会出现链接超时的问题 参考示例代码 @RestCo…

    Java 2023年5月30日
    079
  • SpringBoot:SpringBoot和SpringCloud版本匹配问题导致Bean冲突问题

    报错信息 Error starting ApplicationContext. To display the conditions report re-run your appli…

    Java 2023年5月30日
    083
  • Mysql 根据一个表数据更新另外一个表

    方法一: update 更新表 set 字段 = (select 参考数据 from 参考表 where 参考表.id = 更新表.id); update table_2 m se…

    Java 2023年6月5日
    074
  • JDK8中String的intern()方法详细解读【内存图解+多种例子+1.1w字长文】

    一、前言 String字符串在我们日常开发中最常用的,当然还有他的两个兄弟 StringBuilder&#x548C;StringBuilder。他三个的区别也是面试中经常…

    Java 2023年6月15日
    089
  • 搭建简单JavaWeb项目

    参考:(17条消息) 手把手搭建一个完整的javaweb项目(适合新手)_心歌技术的博客-CSDN博客_javaweb项目完整案例 补充项目结构的细节,进行了一点修改,修改为学生信…

    Java 2023年6月9日
    090
  • 【LEETCODE】76、面试题 08.11. 硬币

    package dynamicprogramming.medium; /** * @Auther: xiaof * @Date: 2020/4/23 09:17 * @Descri…

    Java 2023年6月5日
    071
  • 软件工程 软件需求与软件需求规约 第1篇随笔

    2、软件需求与软件需求规约 1. 何为需求? 定义问题的基本要素是 “需求” 一个需求是一个有关”要予构造”的陈述,用以描述待开发产…

    Java 2023年6月16日
    072
  • 设计模式之备忘录模式

    无论是我们在使用word还是记事本,系统都会为我们提供撤销的功能,这几乎是人人都会使用到的功能,而在我们实际开发中,会不会存在一个很复杂的对象,当更改了其中的某一个属性以后,也提供…

    Java 2023年6月8日
    057
  • mybaitis查询 (数据库与实体类字段名不相同)

    1.这是我的数据库字段名和实体类字段名 2.方法方法一: 查询的结果标题 会跟实体类的属性一一匹配,一定要一致就算数据库字段和属性不一致,我们可以把查询结果设置一个别名,让别名=属…

    Java 2023年6月5日
    079
  • 4 信息的表示和处理_信息存储

    开头:本章研究在计算机上如何表示数字和其它形式数据的基本属性,以及计算机对这些数据执行操作的属性。 注意:这部分谈到的内存,并不是指硬件中的内存条,而是在《计算机系统漫游》章节中的…

    Java 2023年6月7日
    075
  • springboot分析——自定义启动类

    在实际开发过程中,如果有一些公共功能,我们可以单独封装,然后配置成starter启动类,其他的项目需要使用时,主要 只要依赖开启就可以了。下面我们自定义一个自动配置启动类。 一:自…

    Java 2023年5月30日
    068
  • java使用freemarker作为模板导出Excel表格

    1:首先新建一个excel表格自己弄好格式如下图 2:把excel 表格另存为xml格式文件如下图 3:这个时候的文件就是xml 格式的文件了,在myeclipse里面项目工程里面…

    Java 2023年5月29日
    091
  • Spring Boot实现数据访问计数器

    1、数据访问计数器 在Spring Boot项目中,有时需要数据访问计数器。大致有下列三种情形: 1)纯计数:如登录的密码错误计数,超过门限N次,则表示计数器满,此时可进行下一步处…

    Java 2023年6月14日
    070
  • Mysql 安全加固经验总结

    本文为博主原创,转载请注明出处: 1.内网部署Mysql mysql 数据库在使用过程中,需要给服务提供连接和访问的权限,而不需要进行公网连接和访问,所以在安全环境和现网环境部署m…

    Java 2023年6月8日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球