jsp1

maven依赖

<dependencies>
  <!-- servlet -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
  </dependency>
  <!-- jsp支持 -->
  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
  </dependency>
  <!-- JSTL表达式支持 -->
  <dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
  </dependency>
  <!-- standard标签库 -->
  <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
  </dependency>
</dependencies> 

jsp

Java Servr Pages -> java服务器页面

jsp本质是一个servlet类,实现的为jsp转servlet代码,实际的html页面仍然为resp的输出流

1. 标准使用

jsp表达式 和 jsp代码片段 ,以及定义全局的jsp片段

jsp注释方式<%-- --%>
jsp表达式<%= %>
jsp代码片段<% %>
全局定义的jsp片段<%! %>
el表达式${ }

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%--导入java中的包--%>
<%@ page import="java.util.Date" %>

<html>
  <body>
    <h2>Hello World!</h2>

    <%--jsp表达式,这里的内容会直接展示在页面上--%>
    <%=new Date()%>

    <%--jsp代码片段,这里直接执行java代码,out为resp的输出流,可以直接输出--%>
    <%
    request.setAttribute("age",18);
    out.println("这里用来书写java脚本");
    %>

    <%--全局的jsp片段--%>
    <%!
  //...
  %>

    <%-- el表达式,取数据,
  范围优先级由高到低依次是:
  Page、Request、Session和Application --%>
    ${age}

  </body>
</html>

2. 拆代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>

<%-- 特殊写法拆代码 --%>
  
<% for (int i = 0; i < 5; i++) { %>
  
<h1>Hello World!</h1>
  
<%}%>

</body>
</html>

3. 自定义错误页面

3.1 在页面中指定异常页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 指定异常页面 --%>
<%@page errorPage="/error/500.jsp" %>
<html>
  <body>
    <h1>主体</h1>
    
    <%-- 手动制造异常 --%>
    <%=1/0%>
    
  </body>
</html>

3.2 web.xml中设置异常页面

web.xml

<!-- 错误页面设置 -->
<error-page>
  <error-code>500</error-code>
  <location>/error/500.jsp</location>
</error-page>
<error-page>
  <error-code>404</error-code>
  <location>/error/404.jsp</location>
</error-page>

4. 模块化

在一个jsp文件中导入引用其他jsp文件

4.1 使用 <%@include

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@include file="common/header.jsp"%>
<html>
  <body>
    <h1>主体</h1>
  </body>
</html>
<%@include file="common/footer.jsp"%>

header.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>
    <h1>header</h1>
  </body>
</html>

footer.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>
    <h1>footer</h1>
  </body>
</html>

访问index.jsp的结果

4.2 使用<jsp:include

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--<%@include file="common/header.jsp"%>--%>
<jsp:include page="common/header.jsp"/>
<html>
<body>
<h1>主体</h1>
</body>
</html>
<%--<%@include file="common/footer.jsp"%>--%>
<jsp:include page="common/footer.jsp"/>

区别:

<%@include 是将三个文件直接拼接成一个文件,可能会出现变量名重复定义等问题

<jsp:include 才是采用相互引用的方式,此为常用

5. 9大内置对象

jsp已经封装好的对象内部可以直接使用

  1. PageContext
  2. Request
  3. Response
  4. Session
  5. Application 【SerlvetContext】
  6. config 【SerlvetConfig】
  7. out
  8. page
  9. exception
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>

    <%-- 四种存储于数据的方法 --%>
    <%
    //数据存于页面
    pageContext.setAttribute("dataPage","pageContext");
    //数据存于请求,可以被请求转发
    request.setAttribute("dataRequest","request");
    //数据存于一次会话,从打开浏览器到关闭
    session.setAttribute("dataSession","session");
    //数据存于服务器,从打开服务器到关闭
    application.setAttribute("dataApplication","application");
    %>

    <%-- 统一寻找获取数据的方法 --%>
    <%
    String d1 = (String)pageContext.findAttribute("dataPage");
    String d2 = (String)pageContext.findAttribute("dataRequest");
    String d3 = (String)pageContext.findAttribute("dataSession");
    String d4=(String)pageContext.findAttribute("dataApplication");
    %>

    <%-- 使用el表达式输出,这里取出的是 存储起来的数据 --%>
    <h3>${dataPage}</h3>
    <h3>${dataRequest}</h3>
    <h3>${dataSession}</h3>
    <h3>${dataApplication}</h3>
    <h3>${data5}</h3>  <%--无效--%>

  </body>
</html>

简单转发

pageContext.forward("/success.jsp");

通用存储方法(不用了)

pageContext.setAttribute("data","str",PageContext.PAGE_SCOPE);

6. JSP标签JSTL标签EL表达式

6.1 JSP标签

导入页面

<jsp:include page="page2.jsp"/>

请求转发

<jsp:forward page="common/header.jsp"></jsp:forward>

携参请求转发

<jsp:forward page="page2.jsp">
    <jsp:param name="key1" value="v1"/>
    <jsp:param name="key2" value="v2"/>
</jsp:forward>

page2.jsp中获取参数

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <body>
    <%=request.getParameter("key1")%>
    <%=request.getParameter("key2")%>
  </body>
</html>

jsp创建对象,通过jsp标签创建对象,设置参数,获取对象参数(不用2)

<jsp:useBean id="newUser"class="com.anyi·pojo.User" scope="page"/>

<jsp:setProperty name="newUser" property="username" value="zhangsan"/>
<jsp:setProperty name="newUser"property="password"value="123456"/>

用户名:<jsp:getProperty name="newUser" property="username"/>
密码:<jsp:getProperty name="newUser" property="password"/>

6.2 JSTL标签

使用的目的,为了方便使用标签写java代码

引入JSTL核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

使用方式:

  1. 引入标签库
  2. 使用标签

在Tomcat也需要引入jstl的包,否则会报错:JSTL解析错误

6.2.1 选择实现
<c:if test="${list.size()>0}" var="ifVal">
    <c:out value="true"/>
</c:if>

<c:out value="${ifVal}"/>
6.2.2 循环实现

c:forEach : var 遍历的值,items要遍历的对象

<%
    ArrayList<Integer> list = new ArrayList<>();
    list.add(0);
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    request.setAttribute("list",list);
%>

<c:forEach var="n" items="${list}">
    <c:out value="${n}"/>
</c:forEach>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,348评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,122评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,936评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,427评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,467评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,785评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,931评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,696评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,141评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,483评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,625评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,291评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,892评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,492评论 2 348

推荐阅读更多精彩内容

  • jsp概述 jsp全称是 Java Server Page,它和servlet技术一样,都是SUN公司定义的一种用...
    持续进步者阅读 617评论 0 2
  • 一、jsp介绍 jsp作用jsp全称java server pages(java服务器页面),本质是一个servl...
    圣贤与无赖阅读 1,244评论 0 14
  • JSP Java Server Page = html + java脚本 + jsp动态标签Jsp的执行流程:JS...
    梦蓝樱飞2020阅读 166评论 0 1
  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,421评论 0 13
  • jsp属于动态网页技术的一种(另有servlet、jsp、PHP、asp等等) 1、jsp是什么 java ser...
    panda_Hi阅读 707评论 0 0