MVC模式是 软件工程 中的一种 软件架构 模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
View:视图,为用户提供使用界面,与用户直接进行交互。
Model:模型,承载数据,并对用户提交请求进行计算的模块。其分为两类: 一类称为数据承载 Bean:实体类,专门用户承载业务数据的,如 Student、User 等 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理用户提交请求的。
Controller:控制器,用于将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。
3.优点:关注前后端分离
4.缺点:模型层分层太粗,融合了数据处理、业务处理等所有的功能。核心的复杂业务逻辑都放到 模型层,导致模型层很乱
5.适应场景:后端业务逻辑简单的服务,比如接口直接提供对数据库增删改查
2)如果系统没有分层,当业务规模增加或流量增大时我们只能针对整体系统来做扩展。分层之后可以很方便的把一些模块抽离出来,独立成一个系统。
三层架构是指:视图层 View、服务层 Service,与持久层 Dao。它们分别完成不同的功能。
View 层:用于接收用户提交请求的代码在这里编写。
Service 层:系统的业务逻辑主要在这里完成。
Dao 层:直接操作数据库的代码在这里编写。
优点:逻辑与数据层分离
缺点:模型层分层比较粗,核心的复杂业务逻辑都放到模型层,导致模型层很乱
适应场景:后端业务逻辑简单的服务,比如接口直接提供对数据库增删改查
1.JSTL是Java中的一个定制标记库集。JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
2.jstl标签:在页面导入jstl的核心类库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.为什么使用 ?
1)实现了JSP页面的代码复用。
2)书写JSP页面时可读性更强。
3)在应用程序服务器之间提供了一致的接口,最大程度地提高了WEB应用在各应用服务器之间的移植。
4)简化了JSP和WEB应用程序的开发。
1.概念
EL 表达式的全称:Expression Language 表达式语言。
EL 是 JSP 内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象,取得对象属性的值,或执行简单的运算或判断操作。
2.作用
1)EL表达式主要是替换和简化 jsp 页面中表达式脚本在jsp页面中进行数据的输出。
2)EL 表达式仅仅用来读取数据,而不能第数据进行修改。
3.特点
1)EL 在得到某个数据时,会自动进行数据类型的转换
2)EL 表达式输出数据时,如果有则输出数据,如果为 null 则什么也不输出。
4.语法格式
${表达式}
5.注意事项:
1)jsp 默认是支持 el 表达式的。
2)如果要忽略 el 表达式,有两种方式
3)设置 jsp 中 page 指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
4)\${表达式}:这种方式忽略当前这个 el 表达式,会在当前页面呈现原有格式。
#判断存在即删除数据库
drop database if exists mydb;
#创建数据库
create database mydb;
#使用数据库
use mydb;
#创建表
create table t_user
(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
phone varchar(11),
address varchar(50)
);
insert into t_user(username,password,phone,address) values('熊大','666','18965423548','树洞');
insert into t_user(username,password,phone,address) values('熊二','333','18754263548','树洞');
insert into t_user(username,password,phone,address) values('光头强','123','18565234759','木屋');
select * from t_user where username=? and password=?
select * from t_user;
create table t_goods
(
gid int primary key auto_increment,
gname varchar(20),
price double,
mark varchar(100)
);
insert into t_goods(gname,price,mark) values('泡面',4.5,'够香够辣就是这个味!');
insert into t_goods(gname,price,mark) values('火腿',8.5,'肉质细腻Q弹!');
insert into t_goods(gname,price,mark) values('雪碧',3.5,'清爽冰凉随心爽!');
select * from t_goods;
package com.gao.bean;
public class Googs {
private Integer gid;
private String gname;
private String price;
private String mark;
public Integer getGid() {
return gid;
}
public void setGid(Integer gid) {
this.gid = gid;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
}
@Override
public String toString() {
return "Googs{" +
"gid=" + gid +
", gname='" + gname + '\'' +
", price='" + price + '\'' +
", mark='" + mark + '\'' +
'}';
}
}
package com.gao.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 + '\'' +
'}';
}
}
<%--
Created by IntelliJ IDEA.
User: gt
Date: 2023/2/15
Time: 11:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
熊出没
欢迎来到狗熊岭
狗熊岭大门
<%--
Created by IntelliJ IDEA.
User: gt
Date: 2023/2/15
Time: 11:58
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
进入
进入
<%--
Created by IntelliJ IDEA.
User: gt
Date: 2023/2/18
Time: 16:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
注册页
注册
<%--
Created by IntelliJ IDEA.
User: gt
Date: 2023/2/17
Time: 20:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
错误页面
看什么看,出错了
去主页
<%@ page import="java.util.List" %>
<%@ page import="com.gao.bean.Goods" %><%--
Created by IntelliJ IDEA.
User: gt
Date: 2023/2/17
Time: 20:27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
正确页
<%--EL表达式是通过$ { } 从作用域对象中自动获取数据,如果是对象可以通过.访问其属性--%>
from${user.address}的${user.username}憋瞅了,填对了,还瞅啥
商品编号
商品名称
商品价格
商品说明
<%--itmes:要便利的集合元素 var:临时变量--%>
${goods.gid}
${goods.gname}
${goods.price}
${goods.mark}
<%-- <%--%>
<%-- //获取session对象--%>
<%-- HttpSession session1=request.getSession();--%>
<%-- //从session对象中获得集合--%>
<%-- List goodsList = (List) session1.getAttribute("goodsList");--%>
<%-- //便利集合--%>
<%-- for (Goods goods : goodsList){--%>
<%-- %>--%>
<%-- --%>
<%-- <%=goods.getGid()%>> --%>
<%-- <%=goods.getGname()%>> --%>
<%-- <%=goods.getPrice()%>> --%>
<%-- <%=goods.getMark()%>> --%>
<%-- --%>
<%-- <%--%>
<%-- }--%>
<%-- %>--%>
package com.gao.servlet;
import com.gao.bean.User;
import com.gao.dao.UserDao;
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 {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
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=new User();
user.setUsername(username);
user.setPassword(password);
user.setPhone(phone);
user.setAddress(address);
System.out.println(user);
//jdbc操作
UserDao userDao=new UserDao();
int row=userDao.register(user);
//做出响应
if(row>0){
response.sendRedirect("login.jsp");
}else {
response.sendRedirect("register.jsp");
}
}
}
package com.gao.dao;
import com.gao.bean.Goods;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class GoodDao {
private static String driver="com.mysql.cj.jdbc.Driver";
private static String url="jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&serverTimeZone=UTC";
private static String user="root";
private static String password="root";
private Connection con=null;//数据库连接对象
private PreparedStatement pstm=null;//预处理对象
private ResultSet rs=null;//结果集对象
private int row=0;//增删改受影响行
public List selectAll() {
List goodsList = new ArrayList<>();
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
String sql = "select * from t_goods;";
pstm = con.prepareStatement(sql);
rs = pstm.executeQuery();
while (rs.next()) {
//把当前数据行中的数据取出来,存储到Goods对象中
Goods goods = new Goods();
goods.setGid(rs.getInt("gid"));
goods.setGname(rs.getString("gname"));
goods.setPrice(rs.getString("price"));
goods.setMark(rs.getString("mark"));
//把Goods对象储存到集合中
goodsList.add(goods);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//8.关闭资源
try {
if (rs != null) {
rs.close();
}
if (pstm != null) {
pstm.close();
}
if (con != null) {
con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return goodsList;
}
}
}
package com.gao.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class JDBCUtil {
private static String driver="com.mysql.cj.jdbc.Driver";
private static String url="jdbc:mysql://127.0.0.1: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(){
try {
Class.forName(driver);
con= DriverManager.getConnection(url,user,password);
}catch (Exception e){
e.printStackTrace();
}
return con;
}
/**
* 查询的资源关闭
* rs
* pstm
* con
*/
public static void close(ResultSet rs, PreparedStatement pstm,Connection con){
try{
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if (con!=null){
con.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
public static void close(PreparedStatement pstm, ResultSet rs) {
try{
if(pstm!=null){
pstm.close();
}
if(rs!=null){
rs.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
public int register(User user) {
try {
con= JDBCUtil.getCon();
String sql="insert into t_user(username,password,phone,address)values(?,?,?,?)";
//获取预处理对象
pstm=con.prepareStatement(sql);
//传参
pstm.setObject(1,user.getUsername());
pstm.setObject(2,user.getPassword());
pstm.setObject(3,user.getPhone());
pstm.setObject(4,user.getAddress());
//执行
row=pstm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtil.close(pstm,rs);
}
return row;
}
}
package com.gao.servlet;
import com.gao.bean.Goods;
import com.gao.bean.User;
import com.gao.dao.GoodDao;
import com.gao.dao.UserDao;
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.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
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");
String password = request.getParameter("password");
System.out.println(username);
System.out.println(password);
//执行业务处理
UserDao userDao=new UserDao();
User login= userDao.login(username,password);
//判断登陆的用户信息是否为空
if (login!=null){
System.out.println("登录成功");
//1.登陆成功后在session中保存用户的个人信息
HttpSession session = request.getSession();
session.setAttribute("user",login);
// GoodDao goodDao=new GoodDao();
// List goodsList = goodDao.selectAll();
// System.out.println(goodsList);
//2.请求转发----登陆业务已经处理完毕,应该做请求转让,让别的servlet执行商品信息的查询
request.getRequestDispatcher("selectAllGoods").forward(request,response);
}else{
//登陆失败,跳转到错误页
response.sendRedirect("error.jsp");
}
}
}
package com.gao.dao;
import com.gao.bean.User;
import com.gao.util.JDBCUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserDao {
Connection con=null;//数据库连接对象
PreparedStatement pstm=null;//预处理对象
ResultSet rs=null;//结果集对象
User login=null;
int row=0;
public User login(String username,String password) {
try {
//1.加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取数据库连接
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&serverTimeZone=UTC","root","root");
//3.定义登录的sql语句
String sql="select * from t_user where username=? and password=?";
//4.获取预处理对象
pstm = con.prepareStatement(sql);
//5.传参
pstm.setObject(1,username);
pstm.setObject(2,password);
//6.执行查询
rs=pstm.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("pasasword"));
login.setPhone(rs.getString("phone"));
login.setAddress(rs.getString("address"));
}
}catch (Exception e){
e.printStackTrace();
}finally {
//8.关闭资源
try{
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if (con!=null){
con.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return login;
}
package com.gao.servlet;
import com.gao.bean.Goods;
import com.gao.bean.User;
import com.gao.dao.GoodDao;
import com.gao.dao.UserDao;
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 {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置请求和响应的编码
request.setCharacterEncoding("utf-8");//设置请求的编码格式为中文
response.setCharacterEncoding("utf-8");//设置响应的编码格式
System.out.println("SelectAllGoods~~~~~~~");
//去查询数据库中商品信息表中的数据
GoodDao goodDao=new GoodDao();
List goodsList = goodDao.selectAll();
System.out.println(goodsList);
//把商品信息传输到页面中进行展示----此处借用HttpSession传输数据
HttpSession session = request.getSession();//获取HttpSession对象
//把查询到的商品信息集合存储到session对象中,起名叫做goodsList
session.setAttribute("goodsList",goodsList);
response.sendRedirect("zhuye.jsp");
}
}