1.什么是jsp
jsp的本质是servlet
.jsp->.java(servlet)->.class->servlet实例
JSP(Java Server Page)是Java服务端的页面,所以它是动态的,它是需要经过JDK编译后把内容发给客户端去显示,Java文件编译后会产生一个class文件,最终执行的就是这个class文件。
可以粗略的认为:jsp=html+java
jsp与html的不同:
- jsp需要tomcat来运行 html不需要,只要浏览器即可
- jsp是动态的,html是静态的
jsp包含脚本元素、指令元素、动作元素
2.jsp基本语法
<!-- JSP脚本 -->
<% %>
<!-- Jsp声明全局变量 -->
<%! %>
<!-- jsp局部变量 -->
<% %>
<!-- jsp表达式 -->
<%=1+1 %>>
<!-- jsp注释 -->
<%-- 我是jsp注释--%><!-- 特点:f12中不可见-->
3.jsp指令
page、include、taglib(此处暂不讲解)
<%@ page language="java" contentType="text/html; charset=utf8"
pageEncoding="utf8"%>
<%@page import="" %s>
page指令的常用属性:
属性 | 含义 |
---|---|
import | 导入要使用的java类 |
contentType | 指定文档类型、页面编码方式 |
extends | 指定继承自某个类 |
autoFlash | 自动刷新,默认为true |
language | 指定语言 |
buffer | 指定out对象使用缓冲区的大小 |
session | 是否启用会话,默认为true |
isThreadSafe | 是否线程同步 |
include:静态的jsp指令
<%@include file="" %>
4.动作元素
jsp:include
<jsp:include page="相对 URL 地址" flush="true" />
jsp:useBean
<jsp:useBean id="name" class="package.class" />
jsp:setProperty
<jsp:useBean id="myName" ... >
...
<jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>
jsp:getProperty
<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>
jsp:forward
<jsp:forward page="相对 URL 地址" />
5.四大作用域
pageContext 作用范围:当前jsp页面范围
<body>
<%pageContext.setAttribute("pageContextScope", "aaa");
String aaa=(String)pageContext.getAttribute("pageContextScope");
%>
<h1>pageContextScope:<%=aaa %></h1>
</body>
request 一次请求有效
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//super.doPost(req, resp);
req.setAttribute("requestScope", "bbb");
//通过转发的方式(有效)
req.getRequestDispatcher("inner.jsp").forward(req,resp);
//通过重定向
//resp.sendRedirect("inner.jsp");
}
<body>
<% pageContext.setAttribute("pageContextScope", "aaa");
String aaa=(String)pageContext.getAttribute("pageContextScope");
String bbb=(String) request.getAttribute("requestScope");
%>
<h1>pageContextScope:<%=aaa %></h1>
<h1>requestScope:<%=bbb %></h1>
</body>
运行如下图:
如果通过重定向的方法则接收不到requestScope
因为重定向的二次请求之间无法共享
//通过重定向
resp.sendRedirect(req.getContextPath()+"/inner.jsp");
效果如下图所示:
session 一次会话有效(关闭浏览器失效)
//通过session
req.getSession().setAttribute("sessionScope", "ccc");
效果如下图:
application(servletContext) 整个web应用有效(服务器重启或关闭失效)
//通过servletContext
req.getServletContext().setAttribute("servletContextScope", "ddd");
6.九大内置对象
内置对象:由jsp自动创建的对象,可以直接使用
对象 | 说明 |
---|---|
request | |
response | |
session | session=“true” |
application | |
config | |
exception | isErrorPage=“false” |
out | javax.servlet.jsp.JapWriter |
pageContext | |
page |