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——从源码分析


下一篇:JSP 相关问题