美文网首页
4/21day38_jsp_mvc

4/21day38_jsp_mvc

作者: 蹦蹦跶跶的起床啊 | 来源:发表于2020-04-24 15:39 被阅读0次

    回顾

    1. session作用
            在一次会话中,多次请求间,共享数据,在服务器中存储
    
    2. session快速入门
        存数据
            HttpSession session = request.getSession();
            session.setAttribute(String name,Object value);
        取数据
            HttpSession session = request.getSession();
            Object object = session.getAttribute(String name);
        
        工作原理
            基于cookie技术
            
    3. session使用细节
        浏览器关闭,服务器不关闭,二次获取session数据是否一致?
            默认是不一致,
            因为浏览器关闭,cookie销毁....
        浏览器不关闭,服务器关闭,二次获取session数据是否一致?
            服务器正常关闭的情况下,是一致
            钝化(序列化)
            活化(反序列化)
        生命周期
            创建?
                浏览器携带jsessionid与服务器不匹配时创建
            销毁?
                非正常关闭
                为活跃30分钟
                自杀
            作用范围?
                在一次会话中,多次请求间
    4. 三大域对象
            ServletContext
            HttpSession
            HttpServletRequest
    
    5. 综合案例
        购物车
        用户登录
    

    JSP&MVC

    今日目标

    * jsp
        工作原理(servlet)
        脚本注释
        指令
        内置对象
        动作标签
        
    * mvc模式(初体验)
    

    一 JSP

    1.1 概述

    ​ 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)

    ​ JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,页面动态资源使用java代码,页面静态资源使用html标签。

    简单来说:可以在html标签中嵌套java代码

    作用:简化书写,展示动态页面

    1.2 快速入门

    需求

    ​ 在jsp页面,动态展示当前时间

    <%@ page import="java.util.Date" %>
    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>${NAME}</title>
      </head>
      <body>
     <%
        Date date = new Date();
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
       String currentTime = simpleDateFormat.format(date);
     %>
      <h3><% out.write(currentTime);%></h3>
      </body>
    </html>
    

    1.3 工作原理

    • JSP本质上就是一个Servlet

    1.4 脚本和注释

    1.4.1 脚本

    JSP通过脚本方式来定义java代码

    1. <% 代码 %>
            脚本片段,生成在service方法中,每次请求的时候都会执行
            
    2. <%! 代码 %>
            声明片段,在java代码中声明成员,放在jsp生成java文件中的成员位置
    
    3. <%=代码 %>
            输出脚本片段,相当于out.print("代码") 方法,输出到jsp页面
    

    1.4.2 注释

    1. html注释
            <!-- 注释静态资源 -->
            
    2. JSP注释
            <%-- 注释所有 --%>
    
    3. java注释(JSP脚本内使用)
            // 单行
            /* 多行 */
            /**文档 */
    

    注释作用范围

    注释 JSP源码 java源码 html源码
    html 可见 可见 可见
    java 可见 可见 不可见
    JSP 可见 不可见 不可见

    1.5 指令

    * 作用
            用于配置JSP页面,导入资源文件
    * 格式
            <%@ 指令名称 属性名1="属性值1" 属性名2="属性值2" ...%>
            
    * 三大指令
        1. page:配置JSP页面
        
        2. include:页面包含(静态)
        
        3. taglib:导入资源文件
    

    1.5.1 page指令

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
        contentType 相当于 response.setContentType(); 设置响应体的MIME类型和编码方式
        language    这哥们有点尴尬,目前仅支持java语言
        import      导入jar包
            <%@ page import="java.util.Date" %>
        errorPage   当前页面报错后,跳转指定错误提示页面
        isErrorPage 声明当前jsp页面是一个异常处理页面,打开异常开关
            false(默认)
            true:可以操作exception异常对象
    
    <%@ page import="java.util.Date" %>
    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="500.jsp" %>
    <html>
    <head>
        <title>demo2</title>
    </head>
    <body>
    <h3>page指令</h3>
    <%
        new Date();
        new SimpleDateFormat();
        Integer age = 1 / 0;
    %>
    </body>
    </html>
    

    500.jsp(异常处理页面)

    <%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
    <html>
    <head>
        <title>500</title>
    </head>
    <body>
    <h4>服务器繁忙,请稍后重试....</h4>
    <%
        // 获取错误信息,发送程序员,进行处理。。。
        out.print(exception.getMessage());
    %>
    </body>
    </html>
    

    1.5.2 include指令(静态包含)

    top.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>top.jsp</title>
    </head>
    <body>
    <div style="border: skyblue dashed 5px;height: 100px">头部</div>
    </body>
    </html>
    
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>demo3</title>
    </head>
    <body>
    <%@include file="top.jsp"%>
    <div style="border: red solid 5px;height: 400px">我是include静态包含,主体..</div>
    </body>
    </html>
    
    

    1.5.3 taglib指令(铺垫明天的知识..)

    • 明天我们会讲解apache提供的jstl标准标签库(手动导入)

    ① 导入jar包

    ② 通过taglib指令引入

    1.6 内置对象

    * 作用
            在JSP页面中不需要获取和创建,可以直接使用的对象
            
    * JSP一共有9个内置对象
        变量名               真实类型                  作用
        pageContext         PageContext              当前页面中共享数据(域对象)
        request             HttpServletRequest       一次请求中共享数据(域对象)
        session             HttpSession              一次会话中共享数据(域对象)
        application         ServletContext           整个web应用共享数据(域对象)
        -----------------------------------------------
        response            HttpServletResponse      响应对象
        page(this)              Object              当前页面(servlet)对象
        out                 JSPWriter                输出对象
        config              ServletConfig            servlet配置对象
        exception           Throwable                异常对象(默认关闭...)      
    
    * 常用
        1. pageContext
                1)当前页面的域对象
                2)获取其他八个内置对象
                
        2. request
                1)接收用户请求(参数)
                2)一次请求中域对象
                
        3. response
                1)设置响应
                    字节流
                    字符流
        4. out
                1)专门在jsp中处理字符流
                    print(); // 可以输出一切类型
                    write(); // 只能输出字符类型
    

    1.7 JSP动作标签

    * 作用
            简化JSP页面编码
        
    * 常用
        <jsp:include>:页面包含(动态)
            相当于
                request.getRequestDispatcher().include(request,response);
        <jsp:forward>:请求转发(页面跳转)
            相当于
                request.getRequestDispatcher().forword(request,response);
        <jsp:param>:参数传递
            其实这哥们是forward子标签
            使用request.getParameter() 获取参数
    

    1.7.1 动态包含

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>demo6</title>
    </head>
    <body>
    <jsp:include page="top.jsp"></jsp:include>
    <div style="border: green solid 5px;height: 400px">jsp的动态包含,主体</div>
    </body>
    </html>
    
    • 静态包含和动态包含区别

    在企业开发时,我们推荐使用静态包含,提升访问性能;注意:不能出现重名的变量。。。


    1.7.2 请求转发

    a.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>a</title>
    </head>
    <body>
    <%
        System.out.println("a.jsp执行了");
        request.setAttribute("username", "request域存值了");
    %>
    <jsp:forward page="b.jsp">
        <jsp:param name="name" value="jack"></jsp:param>
        <jsp:param name="age" value="18"></jsp:param>
    </jsp:forward>
    </body>
    </html>
    

    b.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>b</title>
    </head>
    <body>
    <%
        System.out.println("b.jsp执行了");
    
        // request域传递
        System.out.println(request.getAttribute("username"));
    
        // param标签传递
        System.out.println(request.getParameter("name"));
        System.out.println(request.getParameter("age"));
    %>
    </body>
    </html>
    
    

    二 MVC模式【思想】

    2.1 JSP发展史

    • 早期只有servlet,只能使用response输出html标签,非常麻烦。
    • 后来有了JSP,简化了servlet开发;如果过度使用JSP,在JSP页面中写了大量的java代码和html标签,造成难于维护,难于分工协作的场景。
    • 再后来为了弥补过度使用jsp的问题,我们使用servlet+jsp这套组合拳,利于分工协作。

    2.2 MVC介绍

    MVC设计模式: Model-View-Controller简写。

    MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑显示界面的设计方法。

    简单来说:前辈们总结的一套设计经验,适合在各种软件开发领域,目的:高内聚,低耦合

    * M:model(模型) JavaBean(1.处理业务逻辑、2.封装实体)
    
    * V:view(视图)  Jsp(展示数据)
    
    * C:controller(控制器)Servlet(1.接收请求、2.调用模型、3.转发视图)
    
    * 优缺点
        优点
            降低耦合性,方便维护和拓展,利于分工协作
        缺点
            使得项目架构变得复杂,对开发人员要求高
    

    - 课下作业

    老师下午总结

    面试题目:说出jsp的四大域对象,并且说出其作用范围

    • PageContext 在当前jsp页面去使用
    • request 一次请求内去去使用
    • session 一次会话内去使用
    • ServletContext 项目模块中去使用

    四大域的应用场景

    • PageContext : 这个域是在当前jsp页面上共享数据,这个域往往是用于jstl标签库

    • request域: 一次请求内去共享数据,如果某个数据仅用于本次请求的时候我们即可使用request

      域。 以后一般都是servlet存储数据的时候使用,然后转发给jsp.

    • session域 : 一次会话中共享数据, 一般用于存储登陆者信息。

    • servletContext : 服务器启动的时候存在,服务器关闭的时候销毁。 都没有使用该域的场景。 因为

      该域共享数据的生命周期太长了。 非常消耗内存

    相关文章

      网友评论

          本文标题:4/21day38_jsp_mvc

          本文链接:https://www.haomeiwen.com/subject/ejdfwhtx.html