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>
<% 代码 %>
脚本片段,生成在service方法中,每次请求的时候都会执行
<%! 代码 %>
声明片段,在java代码中声明成员,放在jsp生成java文件中的成员位置
<%=代码 %>
输出脚本片段,相当于out.print(“代码”) 方法,输出到jsp页面
html注释
JSP注释
<%-- 注释所有 --%>
java注释(JSP脚本内使用)
// 单行
/* 多行 */
/**文档 */
作用
用于配置JSP页面,导入资源文件
格式
<%@ 指令名称 属性名1=“属性值1” 属性名2=“属性值2” …%>
三大指令
page:配置JSP页面
include:页面包含(静态)
taglib:导入资源文件
<%@ 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>
把页面共同的信息,进行抽取
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>
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一共有9个内置对象
变量名 真实类型 作用
pageContext PageContext 当前页面中共享数据(域对象)
request HttpServletRequest 一次请求中共享数据(域对象)
session HttpSession 一次会话中共享数据(域对象)
application ServletContext 整个web应用共享数据(域对象)
---------------------------------------------------------------------------------------
response HttpServletResponse 响应对象
page(this) Object 当前页面(servlet)对象
out JSPWriter 输出对象
config ServletConfig servlet配置对象
exception Throwable 异常对象(默认关闭...)
pageContext
1)当前页面的域对象
2)获取其他八个内置对象
request
1)接收用户请求(参数)
2)一次请求中域对象
response
1)设置响应
字节流
字符流
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: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设计模式: Model-View-Controller简写。
MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的设计方法。
简单来说:前辈们总结的一套设计经验,适合在各种软件开发领域,目的:高内聚,低耦合
M:model(模型) JavaBean(1.处理业务逻辑、2.封装实体)
V:view(视图) Jsp(展示数据)
C:controller(控制器)Servlet(1.接收请求、2.调用模型、3.转发视图)
早期只有servlet,只能使用response输出html标签,非常麻烦。后来有了JSP,简化了servlet开发;如果过度使用JSP,在JSP页面中写了大量的java代码和html标签,造成难于维护,难于分工协作的场景。再后来为了弥补过度使用jsp的问题,我们使用servlet+jsp这套组合,利于分工协作。