JSP
JSP
- Java Server Pages
JSP原理
- 在页面中嵌入Java代码,为用户提供动态数据
- JSP最终也会转换成为一个Java类,本质上就是一个Servlet
- 内置方法:
public void _jspInit();//初始化
public void _jspDestroy();//销毁
public void _jspService(request,response);//JSPService
- 内置对象:
final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //Session
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
HttpServletRequest request; //请求
HTTPServletResponse response; //响应
- 输出页面前增加的代码:
response.setContentType("text/html"); //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
- 以上对象可以在JSP页面中直接使用
- Java代码原封不动,HTML转换为out.write()
JSP基础语法
- 分别导入Servlet,JSP,JSTL表达式,standard标签库的maven依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
-
注释:
<%--xxx--%> -
JSP表达式:
<%=变量或表达式%>,将程序的结果输出到客户端- EL表达式:$
-
JSP脚本片段:
<% Java代码,可以使用JSP内置对象 %> -
JSP声明:
<%! service方法外的类中的代码 %>
JSP指令
- jsp文件开头加上:
<%@ page...%>,设置页面参数,导入java包等
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page @improt... %>
-
设置错误页面
-
<%@ page isErrorPage="true" %> -
<error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page>
-
-
通用页面:header、footer等,通过include导入
-
<%@include file="common/header.jsp"%> <%--将两个页面合二为一,直接是out.write()--%> <jsp:include page="/commen/footer.jsp"/> <%--通过java方法拼接页面,内外变量互不影响--%>
-
九大内置对象
- PageContext
- Request
- Response
- Session
- Application:ServletContext
- config:ServletConfig
- out
- page
- exception
作用域
-
setAttribute("name", "value"),不同对象作用域不同
- pageContext:保存的数据只在一个页面中有效
- request:保存的数据只在一次请求中有效,请求转发会携带这个数据
- session:保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
- application:保存的数据只在服务器中有效,从打开服务器到关闭服务器
-
pageContext.findAttribute("name"):作用域从底层到高层寻找
- page->request->session->application
-
pageContext.setAttribute("name", "value", scope):
- scope:PAGE_SCOPE=1,REQUEST_SCOPE=2,SESSION_SCOPE=3,APPLICATION_SCOPE=4
页面跳转
- pageContext.forward("/index.jsp"):地址栏不会变(只要不是重定向,地址栏都不变)
- 等同于request.getRequestDispatcher("/index.jsp").forward(request, response)
JSP标签、JSTL标签、EL表达式
EL表达式
- Expression Language
- 作用:获取数据、执行运算、获取web开发的常用对象、调用java方法
- 获取表单中的数据:
${param.参数名}
- 获取表单中的数据:
- 形式:${}
JSP标签
-
<jsp:include page="index.jsp"></jsp:include> -
<jsp:forward page="index.jsp"> <jsp:param name="key1" value="value1"/> <jsp:param name="key2" value="value2"/> </jsp:forward>- 通过
<%=request.getParameter("key")>取参数
- 通过
JSTL标签
-
为了HTML标签的补足,自定义了许多标签,标签的功能和Java代码一样
-
核心标签、格式化标签、SQL标签、XML标签
核心标签
- 引用方式:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:out>:等同于<%=...><c:set>:用于保存数据<c:remove>:用于删除数据<c:if>:与if相同<c:choose>,<c:when>,<c:otherwise>:与switch相同<c:forEach>:迭代<c:url>:创造url
JSP调用JavaBean
<jsp:useBean id="people" class="People" scope="page"></jsp:useBean>
<jsp:setProperty name="people" property="id" value="1"></jsp:setProperty>
<jsp:getProperty name="people" property="id"></jsp:getProperty>

浙公网安备 33010602011771号