【JavaWeb】火车票管理系统 (三)用户登录-最终版

用户登录:
1、数据库创建:用户表 users
2、前台页面:
登录页面login.jsp
主界面index.jsp
3、后台开发

前面说的差不多了从后台开始:
在前面讲了分层后,将mabits集成到列表目录下
第一步:在entity包下创建用户实体类user.java

package com.example.loginpj.entity;
//用户实体类
public class user {
    private Integer userid;
    private String username;
    private  String userpwd;

    public Integer getUserid() {
        return userid;
    }

    public String getUsername() {
        return username;
    }

    public String getUserpwd() {
        return userpwd;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setUserpwd(String userpwd) {
        this.userpwd = userpwd;
    }
}

第二步:在mapper包下创建usermapper.java和usermapper.xml的映射文件
usermapper.java

package com.example.loginpj.mapper;

import com.example.loginpj.entity.user;
import org.apache.ibatis.annotations.Mapper;

//用户接口类
@Mapper
public interface usermapper {
    public user queryUserByName(String username);
    public user addUserByName(String username);
    public user addUserByPwd(String userpwd);
}

usermapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.loginpj.mapper.usermapper">
    <select id="queryUserByName" parameterType="String"
            resultType="com.example.loginpj.entity.user">
    select * from users where username= #{username};
    </select>
    <insert id="addUserByName" parameterType="String">
        insert into users(username) values(#{username})
    </insert>
    <insert id="addUserByPwd" parameterType="String">
            insert into users(userpwd) values(#{userpwd})
    </insert>
</mapper>

第三步:配置mabits的配置文件放到src的更目录上
mysql.proprietaries

driverClass=com.mysql.cj.jdbc.Driver
username=root
password=12345678
url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="mysql.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="12345678"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--扫描mapper-->
        <package name="com.example.loginpj.mapper"/>
    </mappers>

</configuration>

第四步:获取对象,GetSqlSession.java,在util包下

package com.example.loginpj.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//import javax.annotation.Resource;
//import javax.annotation.Resources;
import java.io.IOException;
import java.io.InputStream;

public class GetSqlSession {
    public  static SqlSession createSqlSession(){
        SqlSessionFactory sqlSessionFactory = null;
        InputStream input =null;
        SqlSession session =null;

        try{
            String resource = "mybatis-config.xml";
            input = Resources.getResourceAsStream(resource);
            sqlSessionFactory =new SqlSessionFactoryBuilder().build(input);
            session =sqlSessionFactory.openSession();
            return session;
        }catch (IOException e){
            e.printStackTrace();
            return null;
        }
    }
    public static void main(String[] args) {
        System.out.println(createSqlSession());
    }
}

第五步:到这里我们的环境就配置好了,现在我们开始做一个简单的查询功能
创建一个测试类test.java

package com.example.loginpj.test;

import com.example.loginpj.util.GetSqlSession;
import org.apache.ibatis.session.SqlSession;
import com.example.loginpj.entity.user;
import com.example.loginpj.mapper.usermapper;
public class test {
    public static void main(String[] args) {
        //获取sqlsession对象
        SqlSession session= GetSqlSession.createSqlSession();
        //得到对应的mapper
        usermapper usermapper =session.getMapper(com.example.loginpj.mapper.usermapper.class);
        //调用对象,返回用户对象
        user user = usermapper.queryUserByName("zhangfei");
        System.out.println(user);
//        user user= usermapper.addUserByName("zhangsan");
//        System.out.println(user);
    }
}

在这里插入图片描述
如果test可以执行出结果我们就可以进行下一步了
第六步:后台登录功能的实现
1、接收客户端的请求(接收参数:用户名、密码)
2、进行非空判断。。。。在前一章写过思路了,就不多赘述了
在entity包下创建消息模型对象messagamodel.java

package com.example.loginpj.entity.vo;

//消息模型 对象,做数据响应的
//状态码 1=成功,0=失败
//回显数据  object对象

public class MessageModel {

        private Integer code =1;//状态码
        private String msg="成功";
        private Object object;

        public Integer getCode() {
            return code;
        }

        public String getMsg() {
            return msg;
        }

        public Object getObject() {
            return object;
        }

        public void setCode(Integer code) {
            this.code = code;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        public void setObject(Object object) {
            this.object = object;
        }

}

第七步:分别在contriller层和service层创建userservice,java和userservlet.java
记得注解
userservlet.java

详解request.getRequestDispatcher().forward(request,response)和response.sendRedirect()的用法和区别
(setAttribute这个方法,在JSP对象中的session和request都有这个方法,这个方法作用就是保存数据,然后还可以用getAttribute方法来获取出来。)

package com.example.loginpj.controller;

import com.example.loginpj.entity.vo.MessageModel;
import com.example.loginpj.service.userservice;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.Member;
import java.security.MessageDigest;

@WebServlet("/login")

public class userservlet extends HttpServlet
{
//    实例化userservice对象
    private userservice userservice =new userservice();

    //用户登录
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   //接收用户请求
    String uname=req.getParameter("uname");
    String upwd=req.getParameter("upwd");
    //调用service层的方法,返回消息模型对象
      MessageModel messageModel = userservice.userlogin(uname,upwd);
        if(messageModel.getCode()==1){
            req.getSession().setAttribute("user",messageModel.getObject());
            resp.sendRedirect("index.jsp");
        }else{
            req.setAttribute("messageModel",messageModel);
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        }
    }


    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)//request和response进行一些处理
            throws IOException, ServletException {
        //一个用来向服务器提供客户端请求信息的对象.
        HttpServletRequest req = (HttpServletRequest) request;//将ServleRequest 转换为HttpServicequest
        HttpServletResponse resp = ( HttpServletResponse) response;
        String uri=req.getRequestURI();//获取地址uri 返回的是一个字符串,内容为整个访问的url的path内容
        uri = uri.substring(1);//将第一个‘/’截掉
        uri = uri.substring(uri.indexOf('/')+1);//去掉路径的项目名称
        if("login".equals(uri)||"login.jsp".equals(uri)){
            chain.doFilter(req,resp);
            //如果请求是login,则不执行处理,放行代码
            return;
        }
        HttpSession session = req.getSession();//获取session对象
        String uname=(String)session.getAttribute("uname");
        if(uname!=null&&!"".equals(uname)){
            chain.doFilter(req,resp);//求转发给过滤器链下一个filter , 如果没有filter那就是你请求的资源
            return;
        }
        //如果uname不为空,则用户登录
//        resp.sendRedirect("login.jsp");//用户没有登录,则重定向到login.jsp页面
    }




}

userservlet.java

package com.example.loginpj.service;

import com.example.loginpj.entity.user;
import com.example.loginpj.entity.vo.MessageModel;
import com.example.loginpj.mapper.usermapper;
import com.example.loginpj.util.GetSqlSession;
import com.example.loginpj.util.StringUtil;
import org.apache.ibatis.session.SqlSession;

//业务逻辑
public class userservice {
    public MessageModel userlogin(String uname, String upwd) {
        MessageModel messageModel=new MessageModel();

        user u=new user();
        u.setUsername(uname);
        u.setUserpwd(upwd);
        messageModel.setObject(u);

        if(StringUtil.isEmpty(uname)||StringUtil.isEmpty(upwd)){
            messageModel.setCode(0);
            messageModel.setMsg("用户姓名和密码不能为空。。");
        }
        SqlSession session= GetSqlSession.createSqlSession();
        usermapper usermapper = session.getMapper(usermapper.class);
        user user=usermapper.queryUserByName(uname);

        if(user ==null){
            messageModel.setCode(0);
            messageModel.setMsg("用户不存在。。");
            return messageModel;
        }

        if(!upwd.equals(user.getUserpwd())){
            messageModel.setCode(0);
            messageModel.setMsg("用户密码错误。。");
            return messageModel;

        }
        messageModel.setObject(upwd);
        return messageModel;
    }

}

第八部:创建一个判断字符串是否为空的工具类StringUtil.java

package com.example.loginpj.util;
//字符串工具类
public class StringUtil {
//    判断字符串是否为空
    public static  boolean isEmpty(String str){
        if(str==null||"".equals(str.trim())){
            return true;
        }
        else
        {
            return false;
        }
    }
}

第九部:
当我们判断做完以后,在login.jsp上做补充,如果输入错误,要有消息提示和回显数据。用¥{}介个;

<%--
  Created by IntelliJ IDEA.
  User: 向阳
  Date: 2022/10/31
  Time: 15:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
  <div style="text-align: center">
    <form action="/login" method="post" id="loginform">
      姓名:<input type="text" name="uname" id="uname" value="${messageModel.object.username}" ><br>
      密码:<input type="password" name="upwd" id="upwd" value="${messageModel.object.userpwd}"><br>
      <span id="msg" style="font-size: 12px">${messageModel.msg}</span><br>
      <button type="button" id="loginBtn">登录</button>
      <br>
      <a href="register.jsp">注册</a>
    </form>
  </div>
</body>
<%--引入jquery的js文件--%>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
<%--      登录表单验证:
          1、登录按钮的点击事件
          2、获取用户名字和密码
          3、判断姓名是否为空
              如果为空,用span标签提示用户,return
              4、判断密码是否为空
              5、都不为空就提交表单
       首页 index.jsp--%>
  $("#loginBtn").click(function (){
  var uname=$("#uname").val();
  var upwd=$("#upwd").val();
  if(isempty(uname)){
    $("#msg").html("用户姓名不可为空!");
    return;
  }
    if(isempty(upwd)){
      $("#msg").html("用户密码不可为空!");
      return;
    }
  $("#loginform").submit();
  });
  //判断字符串是否为空
  function isempty(str){
    if(str==null||str.trim()=="")
      return true;
    else
      return false;
  }
</script>
</html>

最后的实现:

用户登录javaweb的实现


代码:
代码

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模拟火车票管理系统 package com.qdlg.trainticketmanger.service; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.JOptionPane; import com.qdlg.trainticketmanger.model.DBConnection; import com.qdlg.trainticketmanger.model.Ticket; public class TicketManager { /** * * @param train * @return */ public int addTicket(Ticket ticket){ String sql="insert into ticket(ticketNumber,trainNumber,trainDate,startStation,endStation," + "price,carriageNum,seatNum,type,grade,userId,trainTime) values(?,?,?,?,?,?,?,?,?,?,?,?)"; Connection conn=DBConnection.getConn(); PreparedStatement pst=null; int number =0; try { pst = conn.prepareStatement(sql); pst.setString(1,ticket.getTicketNumber()); pst.setString(2,ticket.getTrainNumber()); pst.setString(3,ticket.getTrainDate()); pst.setString(4,ticket.getStartStation()); pst.setString(5,ticket.getEndStation()); pst.setDouble(6,ticket.getPrice()); pst.setInt(7,ticket.getCarriageNum()); pst.setInt(8,ticket.getSeatNum()); pst.setString(9,ticket.getType()); pst.setString(10,ticket.getGrade()); pst.setInt(11,ticket.getUserId()); pst.setString(12,ticket.getTrainTime()); number=pst.executeUpdate(); //JOptionPane.showMessageDialog(null, "存储成功!", "SUCCESS", JOptionPane.INFORMATION_MESSAGE) ; return number; } catch (SQLException e) { e.printStackTrace(); } return number; } /** * 批量添加 * @param list * @return */ public int addAll(List list){ //建立数据库操作 Connection conn=DBConnection.getConn(); Statement sta=null; try { sta=conn.createStatement(); //将自动提交模式转换为手动提交模式 conn.setAutoCommit(false); Iterator iter = list.iterator(); //循环将数据准换成SQL语句 while(iter.hasNext()){ Ticket ticket =iter.next(); sta.addBatch("insert into ticket(ticketNumber,trainNumber,trainDate,startStation,endStation,"+ "price,carriageNum,seatNum,type,grade,userId) values ('"+ ticket.getTicketNumber()+"','"+ ticket.getTrainNumber()+"','"+ ticket.getTrainDate()+"','"+ ticket.getStartStation()+"','"+ ticket.getEndStation()+"','"+ ticket.getPrice()+","+ ticket.getCarriageNum()+","+ ticket.getSeatNum()+","+ ticket.getType()+","+ ticket.getGrade()+","+ ticket.getUserId()+")"); } //执行批量处理,提交事务 int [] batchNumber=sta.executeBatch(); conn.commit(); //将手动提交模式转换为自动提交模式 conn.setAutoCommit(true); return batchNumber.length; } catch (SQLException e) { JOptionPane.showMessageDialog(null, "请检查"+e.getMessage(), "系统不允许您重复录入重名物料", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); try { //操作出现异常时,回滚事务 conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } }finally{ try { //关闭Conn conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return 0; } /** * * @param trainId */ public void delete(int ticketId){ String sql="delete from ticket where id=?"; Connection conn=DBConnection.getConn(); PreparedStatement pst=null; try { pst = conn.prepareStatement(sql); pst.setInt(1,ticketId); pst.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "NOthing ", "youqingtishi", JOptionPane.ERROR_MESSAGE); } } public boolean delete(String ticketNumber,String trainNumber){ String sql="delete from ticket where ticketNumber=? and trainNumber=?"; Connection conn=DBConnection.getConn(); PreparedStatement pst=null; try { pst = conn.prepareStatement(sql); pst.setString(1,ticketNumber); pst.setString(2,trainNumber); int number=pst.executeUpdate(); if(number>0){ return true; }else{ return false; } } catch (SQLException e) { e.printStackTrace(); } return false; } /** * * @param train */ public void update(Ticket ticket){ String sql="update ticket set ticketNumber=?,trainNumber=?,trainDate=?,startStation=?,endStation=?," + "price=?,carriageNum=?,seatNum=?,type=?,grade=?,userId=? where id=?"; Connection conn=DBConnection.getConn(); PreparedStatement pst=null; try { pst = conn.prepareStatement(sql); pst.setString(1,ticket.getTicketNumber()); pst.setString(2,ticket.getTrainNumber()); pst.setString(3,ticket.getTrainDate()); pst.setString(4,ticket.getStartStation()); pst.setString(5,ticket.getEndStation()); pst.setDouble(6,ticket.getPrice()); pst.setInt(7,ticket.getCarriageNum()); pst.setInt(8,ticket.getSeatNum()); pst.setString(9,ticket.getType()); pst.setString(10,ticket.getGrade()); pst.setInt(11,ticket.getUserId()); pst.setInt(12,ticket.getId()); pst.executeUpdate(); // JOptionPane.showMessageDialog(null, "OK", "SUCCESS", JOptionPane.INFORMATION_MESSAGE) ; } catch (SQLException e) { e.printStackTrace(); } } public Ticket findById(Integer id) throws SQLException{ Ticket ticket=new Ticket(); String sql="select * from ticket where id=? "; Connection conn=DBConnection.getConn(); PreparedStatement pst=null; ResultSet rs=null; pst = conn.prepareStatement(sql); pst.setInt(1,id); rs=pst.executeQuery(); if(rs.next()){ ticket.setTicketNumber(rs.getString("ticketNumber")); ticket.setTrainNumber(rs.getString("trainNumber")); ticket.setTrainDate(rs.getString("trainDate")); ticket.setStartStation(rs.getString("startStation")); ticket.setEndStation(rs.getString("endStation")); ticket.setPrice(rs.getDouble("price")); ticket.setCarriageNum(rs.getInt("carriageNum")); ticket.setSeatNum(rs.getInt("seatNum")); ticket.setType(rs.getString("type")); ticket.setGrade(rs.getString("grade")); ticket.setUserId(rs.getInt("userId")); ticket.setId(rs.getInt("id")); } return ticket; } public Integer getIdId() throws SQLException{ String sql="select id from ticket"; Integer id=1; Connection conn=DBConnection.getConn(); PreparedStatement pst=null; ResultSet rs=null; pst = conn.prepareStatement(sql); rs=pst.executeQuery(); if(rs.next()){ rs.afterLast(); rs.previous(); id=rs.getInt("id"); } return id; } /** * * @return * @throws SQLException */ public Integer findUserId() throws SQLException{ String sql="select * from ticket"; Connection conn=DBConnection.getConn(); PreparedStatement pst=null; ResultSet rs=null; Integer userId=1; pst = conn.prepareStatement(sql); rs=pst.executeQuery(); if(rs.next()){ rs.afterLast(); rs.previous(); userId=rs.getInt("userId"); } return userId; } //anyonghuchaxun public List findByUserIdId(Integer userId) throws SQLException{ String sql="select * from ticket where userId=? "; Connection conn=DBConnection.getConn(); PreparedStatement pst=null; ResultSet rs=null; pst = conn.prepareStatement(sql); pst.setInt(1,userId); Ticket ticket=null; List list=new ArrayList(); rs=pst.executeQuery(); while(rs.next()){ ticket=new Ticket(); ticket.setTicketNumber(rs.getString("ticketNumber")); ticket.setTrainNumber(rs.getString("trainNumber")); ticket.setTrainDate(rs.getString("trainDate")); ticket.setTrainTime(rs.getString("trainTime")); ticket.setStartStation(rs.getString("startStation")); ticket.setEndStation(rs.getString("endStation")); ticket.setPrice(rs.getDouble("price")); ticket.setCarriageNum(rs.getInt("carriageNum")); ticket.setSeatNum(rs.getInt("seatNum")); ticket.setType(rs.getString("type")); ticket.setGrade(rs.getString("grade")); ticket.setUserId(rs.getInt("userId")); ticket.setId(rs.getInt("id")); list.add(ticket); } return list; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值