基于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");
    }
}

 效果展示:

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以帮你解答这个问题。 MVC 是一种常用的软件架构模式,它将应用程序分成三个部分:模型(Model)、视图(View)和控制器(Controller)。而 SQL 是一种用于管理关系数据库的标准语言,它可以用于创建、修改和查询数据库中的数据。 那么,如何使用 MVC 和 SQL 实现注册登录呢?以下是一个简单的实现方案: 1. 模型层: 在模型层中,我们需要定义用户数据模型,即用户的基本信息,如用户名、密码、邮箱等等。同时,我们需要在数据库中创建一个用户表,用于存储用户信息。可以使用 SQL 创建以下用户表: CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL UNIQUE, PRIMARY KEY (id) ); 2. 视图层: 视图层是用户界面,用于展示数据和接收用户输入。对于登录注册功能,我们需要创建两个页面:一个是登录页面,一个是注册页面。在这两个页面中,我们需要使用 HTML 和 CSS 来设计页面布局和样式。 3. 控制器层: 控制器层是连接模型层和视图层的中间层,要负责处理用户请求和业务逻辑。对于注册功能,我们需要创建一个注册控制器,对用户提交的注册信息进行验证和处理。对于登录功能,我们需要创建一个登录控制器,对用户提交的登录信息进行验证和处理。 下面是具体的实现步骤: 注册功能: 1. 用户在注册页面中输入用户名、密码和邮箱信息。 2. 用户点击提交按钮,将注册信息发送到服务器。 3. 服务器接收到注册信息后,先对用户名和邮箱进行唯一性验证,如果已存在,则返回错误信息。 4. 如果用户名和邮箱都未被占用,则将注册信息插入到用户表中,完成注册登录功能: 1. 用户在登录页面中输入用户名和密码信息。 2. 用户点击登录按钮,将登录信息发送到服务器。 3. 服务器接收到登录信息后,根据用户名从用户表中查询出对应的密码。 4. 如果密码匹配,则登录成功,否则返回错误信息。 以上就是使用 MVC 和 SQL 实现注册登录的简单方案。当然,实际开发中还需要考虑更多细节和安全性问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值