基于MVC模型和分层模式完成登录和注册及HTTP协议(将商品信息显示到主页面)

一、HTTP 协议介绍HTTP 协议介绍MVC 模式:

代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。

View(视图) - 视图代表模型包含的数据的可视化。

Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

分层模式完成登录和注册

创建数据库:

 第一步:创建需要跳转的页面,完成对应页面内容

 第二步:编写Java内容,然后进行分层

 2.1创建实体类

package com.su.Bean;

public class User {
    private Integer uid ;
    private String username;
    private String password;
    private String phone ;
    private String address;

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    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 getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2.2创建jdbc工具类

package com.su.util;

import java.sql.*;

public class JDBCUtil {
    private static String driver = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
    private static String user = "root";
    private static String password = "root";
    private static Connection con = null;

    /**
     * 获得数据库连接对象
     */
    public static Connection getCon() throws ClassNotFoundException, SQLException {
        try {
            //1.加载驱动
            Class.forName(driver);
            //2.获取数据库连接
            con= DriverManager.getConnection(url,user,password);
        } catch (Exception e) {
           //异常打印
            e.printStackTrace();
        }
        return con;
    }
    //方法重载
    public static void close(ResultSet rs, PreparedStatement ps,Connection con){
        try {
            if (rs!=null){
                rs.close();
            }
            if (ps!=null){
                ps.close();
            }
            if (con!=null){
                con.close();
            }

        }catch (Exception e){
           e.printStackTrace();
        }

    }

    public static void close(PreparedStatement ps, Connection con) {
        try {

            if (ps!=null){
                ps.close();
            }
            if (con!=null){
                con.close();
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

2.3创建接口

package com.su.dao;

import com.su.Bean.User;

public interface UserDao {

    User login(String username, String password);

    int register(User user);
}

2.4实现接口

package com.su.dao.impl;

import com.su.Bean.User;
import com.su.dao.UserDao;
import com.su.util.JDBCUtil;

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

public class UserDaoImpl implements UserDao {
    private Connection con=null;//数据库连接对象
    private PreparedStatement ps=null;//预处理对象
    private ResultSet rs=null;//结果集对象
    private int row=0;//增删改受影响的行数
    User login=null;

    @Override
    public User login(String username, String password) {
        try {
            con= JDBCUtil.getCon();
            //3.定义登录的sql语句
            String sql="select * from  t_user where username=? and password=?";
            //4.获取预处理对象
            ps=con.prepareStatement(sql);
            //5.传参
            ps.setObject(1,username);
            ps.setObject(2,password);
            //6.执行查询
            rs=ps.executeQuery();
            //7.解析结果集
            if(rs.next()){
                login=new User();
                //从结果集中获取数据,然后封装当实体类对象中
                int uid=rs.getInt("uid");
                login.setUid(uid);
                login.setUsername(rs.getString("username"));
                login.setPassword(rs.getString("password"));
                login.setPhone(rs.getString("phone"));
                login.setAddress(rs.getString("address"));
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //8.关闭资源
            JDBCUtil.close(rs,ps,con);
        }
        return login;
    }

    @Override
    public int register(User user) {
        try {
            con=JDBCUtil.getCon();
            //定义新增(注册)的sql语句
            String sql="insert into t_user(username,password,phone,address) values (?,?,?,?)";
            //获取预处理对象
            ps=con.prepareStatement(sql);
            //传参
            ps.setObject(1,user.getUsername());
            ps.setObject(2,user.getPassword());
            ps.setObject(3,user.getPhone());
            ps.setObject(4,user.getAddress());
            //执行sql语句
            row=ps.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JDBCUtil.close(ps,con);
        }
        return row;
    }
}

2.5完成登录页面

package com.su.servlet;

import com.su.Bean.User;
import com.su.dao.UserDao;
import com.su.dao.impl.UserDaoImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/login")
public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置请求和响应的编码格式,以及响应的格式
        request.setCharacterEncoding("utf-8");//设置请求的编码格式为中文
        response.setCharacterEncoding("utf-8");//设置响应的编码格式
        response.setContentType("text/html;charset=UTF-8");//以什么样的格式(文本/网页)响应

        //2.获取请求的参数
        String username = request.getParameter("username");//根据表单的name属性获取用户输入的值
        String password = request.getParameter("password");
        System.out.println(username);
        System.out.println(password);

        //3.执行业务处理
        UserDao userDao=new UserDaoImpl();
        User login=userDao.login(username,password);

        //判断登录的用户信息是否为空
        if(login!=null){
          //登录成功,跳转到主页
            response.sendRedirect("zhuye.jsp");//指定跳转的页面
        }else{
          //登录失败,跳转到错误页
            response.sendRedirect("error.jsp");
        }
    }


}

2.5完成注册页面页面

package com.su.servlet;

import com.su.Bean.User;
import com.su.dao.UserDao;
import com.su.dao.impl.UserDaoImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/register")
public class Register extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     //1.设置请求和相应的编码
        request.setCharacterEncoding("utf-8");//设置请求的编码格式为中文
        response.setCharacterEncoding("utf-8");//设置响应的编码格式
        response.setContentType("text/html;charset=UTF-8");//以什么样的格式(文本/网页)响应
     //2.获取请求的参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String phone = request.getParameter("phone");
        String address= request.getParameter("address");
     //封装到User对象中
     User user=new User();
     user.setUsername(username);
     user.setPassword(password);
     user.setPhone(phone);
     user.setAddress(address);

         System.out.println(user);
         //JDBC操作
        UserDao userDao=new UserDaoImpl();
        int row=userDao.register(user);

        //3.做出响应
        if(row>0){
           response.sendRedirect("login.jsp");
        }else {
           response.sendRedirect("register.jsp");
        }

    }
}

 页面展示效果:




二、HTTP

HTTP 协议介绍:

HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0

协议: 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。

也就是说:协议就是要保证网络通信的双方,能够互相对接上号。就像是两个人传递纸条通过互相指定的暗号,如果发送天亮了,表示可以打游戏了等等

 HTTP 协议的工作过程:

当我们在浏览器输入一个网址,此时浏览器就会给对应的服务器发送一个 HTTP 请求,对应的服务器收到这个请求之后,经过计算处理,就会返回一个 HTTP 响应。并且当我们访问一个网站时,可能涉及不止一次的 HTTP 请求和响应的交互过程。

基础术语:

客户端: 主动发起网络请求的一端
服务器: 被动接收网络请求的一端
请求: 客户端给服务器发送的数据
响应: 服务器给客户端返回的数据

HTTP 协议的重要特点: 一发一收,一问一答

 EL标签:

el基本用法

 ${作用域范围(.对象名).属性}

  <%user user = new user();
  user.setusername("admin");    
  session.setattribute("user",user) ;%>

等同于

   ${sessionscop.user.username}
 

 JSTL标签:

是一个不断完善的开放源代码的JSP标签库。它主要提供给JavaWeb开发人员一个标准通用的标签,开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

在JSP文件开头使用如下语法

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

JSTL 优点:

1、提供了统⼀的标签

2、可以⽤于编写各种动态功能

核⼼标签库常⽤标签: set、out、remove、catch

题:将某些商品编号,名称,价格,说明,显示在主页面上

编写数据库

在主页编写商品布局的代码

<%@ page import="java.util.List" %>
<%@ page import="com.su.Bean.Goods" %><%--
  Created by IntelliJ IDEA.
  User: 86159
  Date: 2023/2/17
  Time: 19:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!--在页面导入jstl的核心类库 -->
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>主页!</title>
</head>
<body>
<h2>欢迎来${user.address}的${user.username}来到主页!</h2>
<table>
    <tr>
    <th>商品编号</th>
    <th>商品名称</th>
    <th>商品价格</th>
    <th>商品说明</th>
    </tr>
    <!--item;要便利集合的元素 var;临时变量-->
    <c:forEach items="${goodsList}" var="goods">
     <tr>
        <td>${goods.gid}</td>
        <td>${goods.gname}</td>
        <td>${goods.price}</td>
        <td>${goods.mark}</td>
  <tr/>
    </c:forEach>
    </table>
</body>
</html>

 在完成登录页面定义session中保存用户信息

package com.su.servlet;

import com.su.Bean.Goods;
import com.su.Bean.User;
import com.su.dao.GoodDao;
import com.su.dao.UserDao;
import com.su.dao.impl.UserDaoImpl;

import javax.servlet.ServletException;
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.util.List;

@WebServlet("/login")
public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置请求和响应的编码格式,以及响应的格式
        request.setCharacterEncoding("utf-8");//设置请求的编码格式为中文
        response.setCharacterEncoding("utf-8");//设置响应的编码格式
        response.setContentType("text/html;charset=UTF-8");//以什么样的格式(文本/网页)响应

        //2.获取请求的参数
        String username = request.getParameter("username");//根据表单的name属性获取用户输入的值
        String password = request.getParameter("password");
        System.out.println(username);
        System.out.println(password);

        //3.执行业务处理
        UserDao userDao=new UserDaoImpl();
        User login=userDao.login(username,password);

        //判断登录的用户信息是否为空
        if(login!=null){
            //登录成功,跳转到主页

            // request.getRequestDispatcher("selectAllGoods").forward(request,response);
            System.out.println("登录成功");
            //登陆成功后,在session中保存用户的个人信息
            HttpSession session=request.getSession();
            session.setAttribute("user",login);
           request.getRequestDispatcher("selectAllGoods").forward(request,response);
        }else{
          //登录失败,跳转到错误页
            response.sendRedirect("error.jsp");
        }
    }


}

 将商品信息传输到页面进行展示

package com.su.servlet;

import com.su.Bean.Goods;
import com.su.dao.GoodDao;

import javax.servlet.ServletException;
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.util.List;

@WebServlet("/selectAllGoods")
public class SelectAllGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置请求和响应的编码格式,以及响应的格式
        request.setCharacterEncoding("utf-8");//设置请求的编码格式为中文
        response.setCharacterEncoding("utf-8");//设置响应的编码格式
        System.out.println("SelectAllGoods...doPost");

        //去查询数据库中的商品信息表中的数据
        GoodDao goodDao=new GoodDao();
        List<Goods> goodsList=goodDao.selectAll();
        System.out.println(goodsList);

        //如何把商品信息传输到页面中进行展示---此处借助HttpSession传输数据
        HttpSession session=request.getSession();//获取HttpSession对象
        //把查询到商品信息集合存储到session对象中,起名字叫做goodslist
        session.setAttribute("goodsList",goodsList);
        response.sendRedirect("zhuye.jsp");
    }
}

 效果展示:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值