1.MVC概述

Model、view、Controller即模型、视图、控制器。是软件的一种架构模式(Architecture pattern)。MVC要实现的目标是将软件的用户界面和业务逻辑分离,可提高代码可扩展性、可复用性、可维护性、以及灵活性。

View(视图):用户的操作界面。如:html、jsp。

Model(模型):具体的业务模型与数据模型。如:service、dao、pojo

Controller(控制):处理从视图层发送的请求,并选取模型层的业务模型完成响应的业务实现,并产生响应。如:Servlet

首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。实现人机数据之间的交互;

为什么要使用MVC模式

搞清楚MVC到底都代表什么之后,我们要考虑的是我们为什么要用MVC或是类似于这种模式的架构思想。

各施其职,互不干涉

在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。

有利于开发中的分工

在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。

有利于组件的重用

分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。一句话总结就是”高内聚,低耦合"

3.在javaweb开发中MVC分别指的是谁

M:HavaBean (Model) 的职责

封装数据一一值javaBean

封装业务一-工具avaBean

C: Servlet (Controller) 的职责

控制流程,接受请求参数,调用lavaBean,获取结果数据,并将数据存储在某个作用域范围之中,最后选择页面显示

JSP(View)的职责

获取Servlet存储在某个作用域之中的数据,进行显示

4.javaweb应用的结合MVC模式是怎样开发的

开发步骤(不是绝对的,只是作一个参考),做适当了解,后期案例中会参考此步骤

开发javaBean来表示数据和业务。

通过Servlet处理请求,读取请求参数。

Servlet调用JavaBean,实现业务逻辑,获取结果数据。

Servlet调用请求、会话等对象的setAttribute方法,将结果数据存储在某个作用域范围之中。

Servlet选择合适的SP页面,通过RequestDispatcher的forward方法跳转至该页面。

.JSP页面获取Servlet存储的结果数据,进行展示。

5.JSP简介

JSP是什么

JSP (Java Server Pages)是一种动态网页开发技术JSP文件就是在传统的 HTML文件中插入Java 代码和JSP 标签,后缀名为.jsp。

JSP 使用JSP 标签在 HTML 网页中插入Java 代码,标签通常以<%开头,以 %>结束,JSP 标签有多种功能,比如访问数据库和JavaBean组件等,还可以在不同的网页之间传递和共享信息。

JSP表达式

<%= new Date().toLocaleString()%>

效果:在网页上打印当前时间

JSP脚本片段

简单的脚本片段

<%

//int a=10/0;/* 故意出错 */

int x=10;

out.print(new Date().toLocaleString());

%>

分开写:分开写,单个脚本中的语句可以是不完整的,但是多个脚本片段组合后的结果必须是完整的Java 语句

<%

for(int i=0;i<10;i++){

%>

yyy


<%

}

%>

JSP声明

<%!String name; %>

<%int a=9;%>

JSP注释

<%--这是注释内容--%>1.需要注意的是:JSP 页面中格式为<%-- 注释信息 --%> 内容不会发布到客户端

2.JSP指令

包括page、include、taglib 三种指令

page指令

格式:

<%@ page 属性名 1= "属性值 1" 属性名 2= "属性值 2" ...%>

常见属性:

language: jsp 脚本中可以嵌入的语言种类

pageEncoding:当前 jsp 文件的本身编码

contentType: response.setContentType(text/html;charset=UTF-8)

import:指定JSP 页面翻译成 Servlet 资源文件中导入的包或者类

session: 是否jsp 在翻译时自动创建 session

errorPage:当当前页面出错后跳转到哪个页面

isErrorPage:当前页面是一个处理错误的页面

.include 指令

需要在 JSP 页面静态包含一个文件,例如 HTML 文件、文本文件等,这时,可以通 过 include 指令来实现

格式:

<%@ include file="被包含的文件地址"%>

<%@include file="/404.jsp” %>

3.JSP隐式对象

一共有九个隐式对象

名称类型描述outjavax.servlet.jsp.JspWriter 用于页面输出requestjavax.servlet.http.HttpServletRe quest得到用户请求信息response javax.servlet.http.HttpServletRe sponse服务器向客户端的回应信息 configjavax.servlet.ServletConfig 服务器配置,可以取得初始化参数sessionjavax.servlet.http.HttpSession 用来保存用户的信息applicationjavax.servlet.ServletContext 所有用户的共享信息page java.lang.Object 指当前页面转换后的 Servlet 类的实例pageContextjavax.servlet.jsp.PageContext JSP 的页面容器exceptionjava.lang.Throwable 表示 JSP 页面所发生的异常,在错误页中 才起作用

五个比较重要的,四个域对象范围从大到小是application>session>request>pageContext

PageContext常量名描述作用域名称域对象类型PageScope当前页面中有效 pageContextPageContextRequestScope一次请求范围requestHttpServletRequestSessionscope一次会话范围sessionHttpSessionApplicationscope应用范围applicationServletContext

pageContext对象

在JSP 中,想要获取 JSP 隐式对象,可以使用 pageContext 对象,pageContext 对象时 Javax.servlet,isp.PageContext 类的实它代表当前JSP 页面的运行环境,并提供了一些 列用于获取其他隐式对象的方法。

方法功能JspWriter getOut()获取out 隐式对象Object getPage()获取 page 隐式对象ServletRequest getRequest()获取request隐式对象ServletResponse getResponse( )获取response隐式对象HttpSession getSession()获取 session 隐式对象ServletConfig getServletConfig()获取 configServletContext getServletContext( )获取application 隐式对象Exception getException()获取exception隐式对象

示例: 使用 pageContext 获取 request 对象

/*不能从子类转成父类对象,所以需要强制转换*/

HttpServletRequest request1=(HttpServletRequest)pageContext.getRequest();

String ip=request1.getRemoteAddr();

out .print(ip);

pageContext操作属性

方法名功能void setAttribute(String name, Object value, intscope)设置 pageContext 对象的属性Object getAttribute(String name,int scope)获取pageContext对象的属性void removeAttribute(String name,int scope)删除指定范围内名称为name的属性void removeAttribute(String name)删除所有范围内名称为name的属性Object findAttribute(String name)从4个域对象中查找名称为name的属性

pageContext 对象的作用范围有 4 个值

pageContext.PAGE SCOPE: 表示页面范围

pageContext.REQUEST SCOPE: 表示请求范围

pageContext.SESSION SCOPE: 表示会话范围

pageContext.APPLICATION SCOPE: 表示 Web 应用程序范围

/*查找是从最小范围的域对象开始找,如果找到了,就不继续往下找了,没有找到,则向范围更大的域对象中去找,找不到

则返回null*/

Object namel=pageContext.findAttribute("name");

out .print(name1);

//输出的是yyy

4.jsp标签

标签

作用: 为了把其他资源的输出内容插入到当前 JSP 页面的输出内容中

示例:

include.isp中的内容: this is include.jsp


注意: include 指今和标签的区别

< jsp:include>标签中要引入的资源和当前 JSP 页面是两个彼此独立的执行实体,即被动 态引入的资源必须能够被 Web 容器独行,而include 指令只自引入循JSP 格式 的文件,被引入文件5当前JSP 文件需要共同合并才翻译成一个 Serlet 源文件

标签中引入的资源是在运行时才包含的,而且只包含运行结果。而 incude 指今引入的资源是在编译时期包含的是源代码

标签运行原理与 RequestDispatcher.include)方法类似,即被包合的页面不 能改变响应状态码或者设置响应头,include 指令没有这方面的限制。

Session详解

什么是Session:

服务器会给每一个用户(浏览器)创建一个Session对象

比如我们现在都去访问百度,我们使用双核浏览器和谷歌浏览器同时访问百度这个网址,百度那边会有两个session,因为浏览器不一样,但是只要在一个浏览器里面一直用百度的话,就没有区别。我们用两个浏览器相当于是模拟两个客户端。

一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在。

用户登录之后,整个网站它都可以访问。(保存用户的信息、保存购物车的信息)

比如我们登录csdn之后,csdn网站上的内容都可以进行点击,不用重复登录。可以访问该用户权限下的所有网页。

如果退出用户之后,其中的好多页面都需要我们进行登录之后才可以使用。

分层模式完成登录和注册

创建数据库:

-- 判断存在即删除数据库

drop database if exists mydb;

-- 创建数据库

create database mydb;

-- 使用数据库

use mydb;

drop table if exists t_user;

-- 创建表

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;

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

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

2.1创建实体类

package com.zhao.bean;

public class User {

private Integer uid;

private String username;

private String password;

private String phone;

private String address;

public User() {

}

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.zhao.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(){

try {

//1.加载驱动包

Class.forName(driver);

//2.获得数据库连接对象

con=DriverManager.getConnection(url,user,password);

} catch (ClassNotFoundException | SQLException e) {

e.printStackTrace();

}

return 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,Connection con){

try {

if (pstm!=null){

pstm.close();

}

if (con!=null){

con.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

2.3创建接口

package com.zhao.Dao;

import com.zhao.bean.User;

import javax.jws.soap.SOAPBinding;

public interface UserDao {

/**

* 完成用户的登录操作

* @param username

* @param password

* @return数据库中查询到完整用户信息

*/

User login(String username,String password);

/**

* 完成用户信息注册

* @param user

* @return 插入

*

*/

int register(User user);

}

2.4实现接口

package com.zhao.Dao.impl;

import com.zhao.Dao.UserDao;

import com.zhao.bean.User;

import com.zhao.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 pstm=null;

private ResultSet rs=null;//结果集对象

private int row=0;

User login=null;

public User login(String username,String password){

try {

con= JDBCUtil.getCon();

//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.执行sql

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("password"));

login.setPhone(rs.getString("phone"));

login.setAddress(rs.getString("address"));

}

} catch (Exception e) {

e.printStackTrace();

} finally {

//8.关闭资源

JDBCUtil.close(rs, pstm, 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(?,?,?,?)";

//获取预处理对象

pstm=con.prepareStatement(sql);

//传参

pstm.setObject(1,user.getUsername());

pstm.setObject(2,user.getPassword());

pstm.setObject(3,user.getPhone());

pstm.setObject(4,user.getAddress());

//执行sql语句

row=pstm.executeUpdate();

} catch (Exception e) {

e.printStackTrace();

}finally {

JDBCUtil.close(pstm,con);

}

return row;

}

}

2.5完成登录页面

package com.zhao.servlet;

import com.zhao.Dao.UserDao;

import com.zhao.Dao.impl.UserDaoImpl;

import com.zhao.bean.User;

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;

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);

//3.业务处理--JDBC操作

UserDao userDao=new UserDaoImpl();

User login = userDao.login(username, password);

//4.判断业务处理结果,给前端做出响应

if (login!= null) {

//登录成功

response.sendRedirect("zhuye.jsp");

} else {

//登录失败

response.sendRedirect("error.jsp");

}

}

}

2.6完成注册页面

package com.zhao.servlet;

import com.zhao.Dao.UserDao;

import com.zhao.Dao.impl.UserDaoImpl;

import com.zhao.bean.User;

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");

request.setCharacterEncoding("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");

}

}

}

页面展示效果:

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: