JSP和MVC模型

一 JSP

01 基础理论

1、JSP 概念

1. JSP 是什么呢?
    三个单词的缩写: Java Server Page, 就是 java 服务端的页面。
​
2. 如何去理解他?
    可以理解成为一个特殊的页面。
    在这个页面当中,既可以书写 HTML (CSS和JavaScript) 也可以书写 Java
​
3. JSP有什么作用呢?
    简化代码的书写。
    你可以在一个项目当中,全程使用 JSP 完成。

2、快速入门

案例代码 位置 web/page/helloworld.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>HelloWorld Jsp</title>
</head>
<body>

    <%--
        这是HTML代码的写法
    --%>
    <h1>hello I am a JSP for HTML</h1>

    <%--
        下面我们采用 Java 代码的写法
    --%>
    <%
        System.out.println("hello I am a JSP for Java");
        out.println("hello I am a Java To Page");
    %>

</body>

访问的地址

http://localhost:8080/JavaWebDay18/page/helloworld.jsp

02 JSP的原理

1、找到位置

打开 war包编译后的代码

 找到文件夹 work ---> Catalina --> localhost --> JavaWebDay18

查看得到的效果  

2、原理结论

JSP 底层就是一个 Servlet 
----------------------------------
JSP 的父亲是 HttpJspBase
JSP 的爷爷是 HttpServlet
JSP 的祖宗是 Servlet

底层原理过程图

03 JSP脚本

1、基础说明

四种脚本的写法:
    1. 注释:      <%--  这是注释 --%>
    2. Java代码:  <%  String name = "局部变量";  %>
    3. Java代码:  <%! String name = "成员变量";  %>
    4. Java代码:  <%= "便捷的打印输出,相当于是 out.println" %>

2、案例演示

注释

位置: web/page/foot1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>演示脚本1</title>
</head>
<body>

<%--  这是JSP的注释的代码, HTML页面源代码没有,Java底层也没有  --%>

<!--  这是HTML的注释代码, HTML页面源代码有的, Java底层代码也有  -->

建议后期采用 JSP的注释写法

</body>
</html>

成员变量和局部变量

位置: web/page/foot2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>演示脚本2</title>
</head>
<body>

演示成员变量 和 局部变量 (建议采用局部变量)

<%!
    String nameChengYuan = "我是成员变量,展示在Java底层的成员位置";
%>

<%
    String nameJuBu = "我是局部变量, 展示在Java底层的局部位置 service方法中";
%>

</body>
</html>

输出页面操作

位置 web/page/foot03.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>演示脚本3</title>
</head>
<body>

对于 out.print() 和 response.getWriter().println()
存在先后顺序的问题。
JSP 会先将所有的输出,加载在一起之后,再去按照方法顺序输出。
response.getWriter().println() 一定是在 out.print() 前面
后期的使用方式是:
要么统一使用 response.getWriter().println()
要么统一使用 out.print()
不要混合使用,一般建议采用 out.print() 因为可以简化为 = 

<%=  "川哥呀,你是如此的帅,相当于是 out.print()" %>

<%
    out.print("嘻嘻,我也是out.print()");
%>

<%
    response.getWriter().println("我是响应的输出");
%>

</body>
</html>

04 JSP内置对象

1、基础说明

什么是 内置对象呢?
    内置对象: 在 JSP 当中,不用创建对象,内部自动存在,就可以直接使用的。
    简单一点说: 不需要创建对象, 直接可以在 JSP 页面当中使用的

表格展示九个内置对象

编号内置对象的名称代码的真实类型作用说明
1pageContextjavax.servlet.jsp.PageContext页面域,获取其他八个内置对象, 还可以实现,页面数据的共享
2sessionjavax.servlet.http.HttpSession会话域,一次会话,多个请求的数据共享
3applicationjavax.servlet.ServletContext应用域,所有用户之间的数据共享
4configjavax.servlet.ServletConfigServlet 的配置对象
5outjavax.servlet.jsp.JspWriter输出对象,将数据输出到页面上面
6pagejava.lang.Object当前页面 Servlet 本质的对象 this
7requestjavax.servlet.http.HttpServletRequest请求域,一次请求的数据共享
8responsejavax.servlet.http.HttpServletResponse响应对象,回复数据给客户端浏览器
9exceptionjavax.lang.Throwable异常的对象

2、案例演示

小技巧,通过 pageContext 对象,获取到其他的八个内置对象。

位置 web/page/innerobject.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>展示JSP的内置对象</title>
</head>
<body>


展示 JSP的九大内置对象

<%
    //通过页面域,获取请求域
    out.println("<br>获取请求域对象, request = " + pageContext.getRequest());
    //通过页面域,获取会话域
    out.println("<br>获取会话域对象, session = " + pageContext.getSession());
    //通过页面域,获取应用域
    out.println("<br>获取应用域对象, application = " + pageContext.getServletContext());
    out.print("<br>=====================");
    //通过页面域,获取到配置对象
    out.println("<br>获取配置对象, config = " + pageContext.getServletConfig());
    //通过页面域,获取到页面对象
    out.println("<br>获取页面对象, page = " + pageContext.getPage());
    //通过页面域,获取到输出对象
    out.println("<br>获取输出对象, out = " + pageContext.getOut());
    out.print("<br>-------------------");
    //通过页面域,获取到响应对象
    out.println("<br>获取响应对象, response = " + pageContext.getResponse());
    //通过页面域,获取到异常对象
    out.println("<br>获取异常对象, exception = " + pageContext.getException());

%>

</body>
</html>

05 JSP四大域对象

1、基础说明

四大域名称四大域范围
ServletContext应用域 application(在整个服务器有效,页面关闭了,下次启动还有效)
Session会话域(在一次会话当中有效,页面关闭了,下次启动,默认失效。如果下次想生效,设置有效期)
Request请求域(在单次请求当中有效,多次请求,则失效)
PageContext页面域(只在当前页面有效,切换页面则无效了)

说明:

大家重点需要掌握的是 两个域对象。

会话域 Session 和 请求域 Resquest

问题:

请求转发采用谁? 请求重定向采用谁?

请求转发,优先考虑 请求域 Request 也可以使用 会话域 Session

请求重定向,只能考虑 会话域 Session

备注: 请求转发是一次请求,请求重定向是多次请求

2、常用的方法

1. 存值 可以 修改值
    void setAttribute(String,Object)
    
2. 取值
    Object getAttribute(String)
    
3. 删除值
    void  removeAttribute(String)

06 JSP三个指令

1、基础说明

1. 指令有什么作用?
    指令是用来完成页面配置,导入资源文件的。
​
2. 指令如何使用?
    <%@ 指令的名称  属性名称1=属性值1  属性名称2=属性值2  属性名称3=属性值3  %>
​
3. 常见的指令有哪些?
    page    指令
    include 指令
    taglib  指令

2、page指令

表格说明

属性作用
contentType响应类型支持的类型和设置的编码格式
language使用的语言,默认是 java
errorpage当页面出现了错误异常之后,可以跳转到指定的错误页面
isErrorPage是否抓取异常,如果为true 页面当中,就可以使用 exception 对象,默认是 false
import可以进行导包的操作。 import java.util.Random
session是否帮我们创建 HttpSession 的对象,默认情况下是 true
pageEncoding翻译 jsp 的时候,采用的编码格式
buffer设置 JspWriter 输出到 jsp 页面,缓存区域的大小,默认值是 8KB
isELgnored设置是否忽略 EL表达式 默认情况下是 false 表示不忽略

案例代码

位置 web/page/orderpage01.jsp

<%--
    访问地址:
        http://localhost:8080/JavaWebDay18/page/orderpage01.jsp
        1. contentType 响应类型支持的类型和设置的编码格式
        2. errorpage 当页面出现了错误异常之后,可以跳转到指定的错误页面
        3. import="java.util.ArrayList"  导包的操作

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="error500.jsp" %>

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    hello 川哥,我要和你生猴子 <br>
    <%
        List<String> mlist = new ArrayList<>();
        mlist.add("迪丽热巴");
        mlist.add("古力娜扎");
        mlist.add("马尔扎哈");
    %>

    <%--
        页面展示
    --%>
    <%= mlist.get(8) %>
</body>
</html>

位置 web/page/error500.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isErrorPage="true" %>
<html>
<head>
    <title>出现错误后,展示的页面</title>
</head>
<body>

<h1> 兄弟,今天程序有点忙... </h1>

<%
    //试着抓取到异常。
    Exception e = pageContext.getException();
    //判断防止为空的情况
    if (e == null) {
        out.print("<h3 style='color:green'> 没有抓到异常 </h3>");
    } else {
        out.print("<h3 style='color:red'>" + e.getMessage() + " </h3>");
    }
%>

<img src="face.png">

</body>
</html>

3、include指令

说明

include 指令,可以实现 jsp 页面的包含效果,在一个jsp页面当中,包含另外的一个jsp页面

位置 web/page/orderpage02.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>常用指令02</title>
</head>
<body>
<h1> hello Every Body 我是2222 </h1>
</body>
</html>

位置 web/page/orderpage03.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="orderpage02.jsp"%>

<html>
<head>
    <title>常用指令03</title>
</head>
<body>

<h1> hello Every Body 我是3333 </h1>

在 03页面当中,包括有 02的内容。

</body>
</html>

4、taglib 指令

说明

作用:
    可以去引入外部的标签库。
    
例如:
    我们后面学习 jstl 就是外部标签库,不是 JSP 内部定义的标签,而是第三方定义的标签。
    相当于是 我们前面学习的 jar 包,是三方的定义,不是自己写的。
    
语法:
    <%@ taglib  uri="标签库的地址"  prefix="前缀名称"  %>

案例 位置 web/page/orderpage04.jsp

<%--
    访问地址:  http://localhost:8080/JavaWebDay18/page/orderpage04.jsp
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

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

<html>
<head>
    <title>常用指令4</title>
</head>
<body>

</body>
</html>

需要在 web/WEB-INF 新建 lib 文件夹导入jar包

javax.servlet.jsp.jstl.jar
jstl-impl.jar

二 MVC模型

01 基础理论

1、概念介绍

MVC 是三个英语单词的缩写:
​
[1] M:module 模型, 用于数据的封装操作,封装的是数据的模型,JavaBean 对象
[2] V:view   视图, 用于显示数据, 动态页面 JSP 和 静态页面 HTML
[3] C:controller 控制器, 用来处理请求和响应, 例如: Servlet

动态页面 和 静态页面 有什么区别?

动态页面:随着时间的变化,页面当中数据的内容会发生变化,例如: 新闻页面,新闻随时会改变。

静态页面:固定写死的效果,不会发生改变。

2、流程说明

02 登录案例

1、前台页面

位置 web/login/qian.jsp

<%--
    http://localhost:8080/JavaWebDay18/login/qian.jsp
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录的前台页面</title>
</head>
<body>

<%--
    定义 form 表单,做表单的提交操作
--%>
<h1> 采用GET的方式登录 </h1>
<form method="get" action="/JavaWebDay18/login/hou.jsp">
    <input type="text" name="username" placeholder="请输入账号">
    <input type="text" name="password" placeholder="请输入密码">
    <input type="submit" value="GET提交数据到服务器">
</form>

<hr>

<h1> 采用POST的方式登录 </h1>
<form method="post" action="/JavaWebDay18/login/hou.jsp">
    <input type="text" name="username" placeholder="请输入账号">
    <input type="text" name="password" placeholder="请输入密码">
    <input type="submit" value="POST提交数据到服务器">
</form>


</body>
</html>

位置 web/login/hou.jsp

<%--
    http://localhost:8080/JavaWebDay18/login/hou.jsp
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>后台页面</title>
</head>
<body>

<%--
    获取到数据
--%>
<%
    //获取到前台页面发送过来的数据
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    //获取到请求的方式,看是GET还是POST
    String method = request.getMethod();
    String message = "请求方式是:"+method;
    //判断是否符合要求
    if ("zhangsan".equals(username) && "123".equals(password)){
        message += ",登录成功,欢迎你:zhangsan";
        out.print("<span style='color:green'> "+message+" </span>");
    }else{
        message += "登录失败";
        out.print("<span style='color:red'> "+message+" </span>");
    }
%>


</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚几哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值