一、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");
}
}