JSP&MVC架构设计模式

JSP概述

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

简单来说:可以在html标签中嵌套java代码
作用:简化书写,展示动态页面

快速入门

需求:在jsp页面,动态展示当前的时间

<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/4/21
  Time: 18:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    Date date = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    String format = simpleDateFormat.format(date);

%>
<h2><%out.print(format);%></h2>
</body>
</html>

工作原理

  • JSP本质上就是一个Servlet

脚本和注释

脚本

  1. <% 代码 %>
    脚本片段,生成在service方法中,每次请求的时候都会执行

  2. <%! 代码 %>
    声明片段,在java代码中声明成员,放在jsp生成java文件中的成员位置

  3. <%=代码 %>
    输出脚本片段,相当于out.print(“代码”) 方法,输出到jsp页面

注释

  1. html注释

  2. JSP注释
    <%-- 注释所有 --%>

  3. java注释(JSP脚本内使用)
    // 单行
    /* 多行 */
    /**文档 */

指令

  • 作用
    用于配置JSP页面,导入资源文件

  • 格式
    <%@ 指令名称 属性名1=“属性值1” 属性名2=“属性值2” …%>

  • 三大指令

    1. page:配置JSP页面

    2. include:页面包含(静态)

    3. taglib:导入资源文件

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>

异常处理页面

<%@ 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>

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>

taglib指令

apache提供的jstl标准标签库(手动导入),通过taglib指令引入

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>demo5</title>
</head>
<body>
<h2>taglib指令</h2>
<c:catch></c:catch>
</body>
</html>

内置对象

  • 作用
    在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(); // 只能输出字符类型

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>demo6</title>
</head>
<body>
<h3>JSP九大内置对象</h3>
<%
    //pageContext对象
    //域对象功能(范围是当前页面)
    pageContext.setAttribute("name","小明");



%>

<%
    String  attribute = (String) pageContext.getAttribute("name");
    out.print(attribute);

%>
</body>
</html>

JSP动作标签

  • 作用
    简化JSP页面编码

  • 常用
    jsp:include:页面包含(动态)
    相当于
    request.getRequestDispatcher().include(request,response);
    jsp:forward:请求转发(页面跳转)
    相当于
    request.getRequestDispatcher().forword(request,response);
    jsp:param:参数传递
    其实是forward子标签
    使用request.getParameter() 获取参数

动态包含

<%@ 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>

请求转发

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模式

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

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

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

  • M:model(模型) JavaBean(1.处理业务逻辑、2.封装实体)

  • V:view(视图) Jsp(展示数据)

  • C:controller(控制器)Servlet(1.接收请求、2.调用模型、3.转发视图)

  • 优缺点
    优点
    降低耦合性,方便维护和拓展,利于分工协作
    缺点
    使得项目架构变得复杂,对开发人员要求高
    JSP&MVC架构设计模式_第1张图片

JSP发展史

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

你可能感兴趣的:(JavaWeb,jsp,web,mvc,java,html)