目录

一,JSP介绍与使用

1,什么是JSP

2,JSP为什么会出现

3,JSP中如何嵌套java代码(了解即可,基本不会使用小脚本编写Java代码)

二,JSP工作原理

1,简单介绍

2,实际应用展示

三,JSP内置对象

1,内置对象详解

1.1 request对象

1.2 response对象

1.3 session对象

1.4 application对象

1.5 out 对象

1.6 pageContext 对象

1.7 config 对象

1.8 page 对象

1.9 exception 对象

2,jsp作用域

四,JSP指令

1,page指令

2,include指令

3,Taglib指令

五,常见状态码

六,EL表达式

1,什么Expression Language 表达式语言

2,EL表达式语法

3,EL中基础操作符 

七,JSTL

1,什么是JSTL

2,JSTL的作用和语法格式

3,核心标签

3.1 语法

3.2 分类

3.3 <c:set>

3.4 <c:out>

3.5 <c:remove>

3.6 <c:if>*

3.7 <c:forEach>*

4,格式化标签

4.1 fmt:formatDate*

4.2 fmt:parseDate

4.3 fmt:formatNumber

5,代码示例


一,JSP介绍与使用

1,什么是JSP

JSP全名为Java Server Pages,中⽂名叫java服务器⻚⾯,其根本是⼀个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与⼀起建⽴的⼀种动态⽹⻚技术标准

JSP技术有点类似ASP技术,它是在传统的⽹⻚HTML⽂件(*.htm,*.html)中插⼊Java程序段(Scriptlet)和JSP标记(tag),从⽽形成JSP⽂件,后缀名为(*.jsp)。

⽤JSP开发的Web应⽤是跨平台的,既能在Linux下运⾏,也能在其他操作系统上运⾏。
 
JSP将⽹⻚逻辑与⽹⻚设计的显示分离,⽀持可重⽤的基于组件的设计,使基于Web的应⽤程序的开发变得迅速和容易。

  • *.html 静态⻚⾯(包含固定的⻚⾯内容)
  • *.jsp 动态⻚⾯(⻚⾯数据可以动态更新,⽀持嵌套java代码和html代码,等于HTML+JAVA)

2,JSP为什么会出现

参考@木南山牙【什么是JSP技术,JSP和Servlet的区别和联系?】

  • 使用Servlet产生动态页面,需要在代码中用out.print()打印输出很多HTML标签返回至客户端浏览器界面进行显示。
  • 在Servlet中,不得不将静态显示的内容和动态产生内容的代码混合在一起。
  • 使用Servlet开发动态网页,程序员和网页编辑人员将无法一起工作。为了使得前后端分离并且减少代码的复杂和冗余,JSP技术应运而生。

servlet展示信息的不⽅便,引⼊了JSP。

JSP本质上也是⼀个servlet!!!!!!(原先的servlet是一个Java文件,而jsp却是另外一种文件)

JSP就是在HTML⻚⾯中嵌⼊了java代码。

3,JSP中如何嵌套java代码(了解即可,基本不会使用小脚本编写Java代码)

⼩脚本(<% java代码%>)

声明标签: <%!变量或者⽅法声明%>

表达式标签: <%= 表达式%> 在⻚⾯上显示的效果

程序代码标签: <%java代码%> ⻚⾯上动态展示内容

 注释

<!-- html注释内容,查看源码时能看到 -->

<%-- jsp注释,查看⻚⾯源码时看不到 --%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <!--html 注释(该注释在jsp页面中会显示出来)-->

    <%--jsp 注释--%>

    <%--程序代码标签--%>
    <%
      int a=10;
      int b=20;
    %>

    <%--表达式标签--%>
    a变量+b变量=<%=a+b%>

    <%--声明标签--%>
    <%!
      public void abc(){
        System.out.println("abc方法");
      }
    %>
    <% abc(); %>
  </body>
</html>

 

二,JSP工作原理

1,简单介绍

当浏览器访问http://localhost:8080/day9_1/index.jsp。

服务器发现后缀为.jsp,它会根据路径找到index.jsp⽂件,会将index.jsp翻译成index_jsp.java⽂件,对这个java⽂件进⾏编译,产⽣⼀个index_jsp.class⽂件,将class⽂件加载运⾏。

将JSP翻译成java⽂件,它是将JSP中的所有的HTML代码通过流进⾏输出,也就是说最终翻译成class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的⽅式写回浏览器。

所以在JSP中展示出了HTML代码

2,实际应用展示

1,将jsp文件放在之前创建过的一个webapps中项目文件夹里

2,查看work目录中,该项目对应的文件夹,可以发现为空

3,启动tomcat服务器,访问jsp页面

4,work目录对应项目文件夹中出现新内容

5,查看index_jsp.java文件

6,查看HttpJspBase

三,JSP内置对象

JSP中⼀共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception

需要引入的jar包

1,内置对象详解

1.1 request对象

request 对象是 javax.servlet.httpServletRequest类型的对象。

该对象代表了客户端的请求信息,主要⽤于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求⽅式以及请求参数等)。

request对象的作⽤域为⼀次请求。

1.2 response对象

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。

response对象也具有作⽤域,它只在JSP⻚⾯内有效。所属类型:HttpServletResponse

1.3 session对象

session 对象是由服务器⾃动创建的与⽤户请求相关的对象。

服务器为每个⽤户都⽣成⼀个session对象,⽤于保存该⽤户的信息,跟踪⽤户的操作状态。

session对象内部使⽤Map类来保存数据,因此保存数据的格式为 “Key/value”。 

session对象的value可以使复杂的对象类型,⽽不仅仅局限于字符串类型。

1.4 application对象

application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应⽤中都有效。

与session对象相⽐application对象⽣命周期更⻓,类似于系统的“全局变量”ServletContext

区别:

  • request:单次请求
  • session:浏览器访问期间(会话期间)
  • application:服务器启动期间,所存的数据可以跨浏览器

1.5 out 对象

out 对象⽤于在Web浏览器内输出信息,并且管理应⽤服务器上的输出缓冲区。

在使⽤ out 对象输出数据时,可以对数据缓冲区进⾏操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。

待数据输出完毕后,要及时关闭输出流。

out.print("<script type='text/javascript'>alert('⽤户名不存在');location.href='index.jsp'</script>");

1.6 pageContext 对象

pageContext 对象的作⽤是取得任何范围的参数,通过它可以获取 JSP⻚⾯的out、request、reponse、session、application 等对象。

pageContext对象的创建和初始化都是由容器来完成的,在JSP⻚⾯中可以直接使⽤ pageContext对象

1.7 config 对象

config 对象的主要作⽤是取得服务器的配置信息。

通过 pageConext对象的 getServletConfig() ⽅法可以获取⼀个config对象。

当⼀个Servlet 初始化时,容器把某些信息通过config对象传递给这个Servlet。

开发者可以在web.xml ⽂件中为应⽤程序环境中的Servlet程序和JSP⻚⾯提供初始化参数。

//将image路径转换成服务器端的路径
String url= config.getServletContext().getRealPath("/image");
<h1>url=<%=url %></h1>

1.8 page 对象

page 对象代表JSP本身,只有在JSP⻚⾯内才是合法的。

page隐含对象本质上包含当前 Servlet接⼝引⽤的变量,类似于Java编程中的 this 指针。

1.9 exception 对象

exception 对象的作⽤是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使⽤,在⼀般的JSP⻚⾯中使⽤该对象将⽆法编译JSP⽂件。

excepation对象和Java的所有对象⼀样,都具有系统提供的继承结构。

exception 对象⼏乎定义了所有异常情况。

在Java程序中,可以使⽤try/catch关键字来处理异常情况; 如果在JSP⻚⾯中出现没有捕获到的异常,就会⽣成 exception 对象,并把exception 对象传送到在page指令中设定的错误⻚⾯中,然后在错误⻚⾯中处理相应的 exception 对象。

(1)先在可能发⽣错误的⻚⾯中添加errorPage属性:

<%@ page pageEncoding="utf-8" errorPage="error.jsp" contentType="text/html;charset=UTF-8" language="java" %>

(2) 在error.jsp⻚⾯中设置isErrorPage="true" 的属性 (使⽤exception对象之前,需要先将当前⻚⾯设置成错误⻚⾯)

<%@ page language="java" isErrorPage="true" import="java.util.*" pageEncoding="UTF-8"%>

代码举例

1,test.jsp(因为代码出现除零错误,所以直接运行会报服务器内部错误)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%=6/0%>
</body>
</html>

2,为了不让用户看到这样杂乱的界面,可以设置errorPage属性,表示出错后跳转到新的页面

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="test2.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%=6/0%>
</body>
</html>

3,test2.jsp输出错误信息

<%@ page contentType="text/html;charset=UTF-8" language="java"
 isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    exception=<%=exception.getMessage() %>
</body>
</html>

 

2,jsp作用域

test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <% request.setAttribute("a1","aaa");%>
    request=<%=request.getAttribute("a1")%><br>

    <% session.setAttribute("b1","bbb");%>
    session=<%=  session.getAttribute("b1")%><br>
    
    <% application.setAttribute("c1","ccc");%>
    application=<%= application.getAttribute("c1")%><br>

    <% pageContext.setAttribute("d1","ddd");%>
    pageContext=<%=pageContext.getAttribute("d1")%><br>
  
    <a href="test2.jsp">test2.jsp</a><br>

</body>
</html>

test2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"
 isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

   <h1>test2.jsp</h1>
   request=<%=request.getAttribute("a1")%><br>

   session=<%=  session.getAttribute("b1")%><br>

   application=<%= application.getAttribute("c1")%><br>

   pageContext=<%=pageContext.getAttribute("d1")%><br>

</body>
</html>

 

四,JSP指令

JSP指令⽤来设置整个JSP⻚⾯相关的属性,如⽹⻚的编码⽅式和脚本语⾔。

语法格式如下:

<%@ directive attribute="value" %>

directive:指令名称 attribute 属性名 value:属性值

1,page指令

Page指令为容器提供当前⻚⾯的使⽤说明⼀个JSP⻚⾯可以包含多个page指令

Page指令的语法格式:

<%@ page attribute="value" %>

2,include指令

JSP可以通过include指令来包含其他⽂件。

被包含的⽂件可以是JSP⽂件、HTML⽂件或⽂本⽂件。包含的⽂件就好像是该JSP⽂件的⼀部分,会被同时编译执⾏。

Include指令的语法格式如下:

<%@ include file="⽂件相对 url 地址" %>

include 指令中的⽂件名实际上是⼀个相对的 URL 地址。

如果您没有给⽂件关联⼀个路径,JSP编译器默认在当前路径下寻找。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%@include file="top.jsp"%>
    <%@include file="middle.jsp"%>
    <%@include file="bottom.jsp"%>
</body>
</html>

 

3,Taglib指令

JSP API允许⽤户⾃定义标签,⼀个⾃定义标签库就是⾃定义标签的集合。

Taglib指令引⼊⼀个⾃定义标签集合的定义,包括库路径、⾃定义标签。

<%@ taglib uri="uri" prefix="" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀(可⾃定义)。

 

五,常见状态码

六,EL表达式

实际应用中,不会使用小脚本来实现页面的嵌套

1,什么Expression Language 表达式语言

最初定义于JSTL1.0部分

在JSP2.0中,EL从JSTL中剥离出来,放置在JSP规范中,称为JSP2.0规范的⼀部分

在JSP中使⽤EL表达式,可以简化对象和变量的访问是EL表达式

2,EL表达式语法

${需要展示信息的名字}

EL表达式如果想要读取变量,则该变量一定要在作用域中:pageContext,request,session,application

 

当表达式没有指定变量或者对象的范围时,那么容器会依次从pageContext—>request—>session—>application中查找该变量或对象,我们可以通过隐含对象获得指定作⽤域的值:

  • pageScope对象,⽤于获取当前⻚⾯的属性值
  • requestScope对象,⽤于获取请求范围的属性值
  • sessionScope对象,⽤于获取会话范围的属性值
  • applicationScope对象,⽤于获取程序范围的属性值

指定作用域获取语法:

${requestScope.key}
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <h1>top.jsp</h1>
   <%
     //如果在相同的key的前提下,不同的作用域,el表达式会选择展示哪个值?
       pageContext.setAttribute("a4","pageContext内容");
       request.setAttribute("a4","request内容");
       session.setAttribute("a4","session内容");
       application.setAttribute("a4","application内容");
   %>

   k1=${a3.k1}
   session-a4=${sessionScope.a4}<br>
   pageContext-a4=${pageScope.a4}<br>
   request-a4=${requestScope.a4}<br>
   application-a4=${applicationScope.a4}

</body>
</html>

 

3,EL中基础操作符 

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <h1>top.jsp</h1>
   <%
       //EL表达式如果想要读取变量,则该变量一定要在作用域中:pageContext,request,session,application
     int a=10;
     pageContext.setAttribute("a1",a);
     List list=new ArrayList();
     list.add("abc");
     pageContext.setAttribute("a2",list);
     Map map=new HashMap();
     map.put("k1","key");
     pageContext.setAttribute("a3",map);
     //如果在相同的key的前提下,不同的作用域,el表达式会选择展示哪个值?
       pageContext.setAttribute("a4","pageContext内容");
       request.setAttribute("a4","request内容");
       session.setAttribute("a4","session内容");
       application.setAttribute("a4","application内容");
   %>
    ${20+30}<br>
    ${20>30}<br>
    ${20<30}<br>
   ${20>30?"aaa":"bbb"}<br>
   a=${a1}<br>
   abc=${a2[0]}<br>
   k1=${a3.k1}
   session-a4=${sessionScope.a4}<br>
   pageContext-a4=${pageScope.a4}<br>
   request-a4=${requestScope.a4}<br>
  application-a4=${applicationScope.a4}

</body>
</html>

七,JSTL

1,什么是JSTL

JSP标准标签库(JSTL)是⼀个JSP标签集合,它封装了JSP应⽤的通⽤核⼼功能。

JSTL⽀持通⽤的、结构化的任务,⽐如迭代,条件判断,XML⽂档操作,国际化标签,SQL标签。 除了这些,它还提供了⼀个框架来使⽤集成JSTL的⾃定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别:核⼼标签、格式化标签、sql标签、xml标签、jstl函数

2,JSTL的作用和语法格式

作⽤:简化jsp⻚⾯编写代码

用法:

  • 1. 下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar ⽂件:standard.jar 和 jstl.jar ⽂件拷⻉到 /WEB-INF/lib/ 下。
  • 2. 在JSP⻚⾯中引⼊<%@ taglib prefix=”⻚⾯使⽤的名称” uri=”功能范围的路径”%>

3,核心标签

核心标签是最常⽤的 JSTL标签。

3.1 语法

 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3.2 分类

  • 表达式操作 out、set、remove、catch
  • 流程控制 if、choose、when、otherwise
  • 迭代操作 forEach、forTokens
  • URL操作 import、param、url、redirect
  • Set标签

3.3 <c:set>

主要⽤来将变量存储⾄JSP范围中 或是JavaBean的属性或Map对象中

3.4 <c:out>

主要⽤来显示数据的内容

3.5 <c:remove>

主要负责移除变量

3.6 <c:if>*

主要⽤于进⾏if判断,如果为true,则输出标签体中的内容

3.7 <c:forEach>*

循环控制,它可以将数组,集合(Collection)中的成员循序浏览⼀遍

4,格式化标签

4.1 fmt:formatDate*

作⽤:将⽇期类型格式化为指定模式的字符串

属性

  • value:将要被格式化的数据
  • pattern:格式化的模式,与SimpleDateFormat的参数设置⼀样
  • var:格式化后的字符串所要存放的变量,若不指定var,则会将格式化的结果直接显示在⻚⾯
  • scope:变量存放的域属性空间,默认page
  • type:其取值为date、time、both,表示给出的value是⽇期、时间、还是两者都包含,默认是date

4.2 fmt:parseDate

作⽤:⽤于将指定字符串转化为⽇期类型

<fmt:parseDate value="${now }" pattern="yyyy-MM-dd" var="today"/>
  • Value服务器获取的时间
  • Pattern:转换的格式
  • Var:⻚⾯显示的变量

4.3 fmt:formatNumber

按照指定格式对数字进⾏格式化

属性

  • maxIntegerDigits:整数部分最多的位数
  • minIntegerDigits:整数部分最少的位数
  • maxFrctionDigits:⼩数部分最多的位数
  • minFrctionDigits:⼩数部分最少的位数
  • var:存储格式化结果的变量
  • scope:var属性的作⽤域
  • integerOnly:是否只解析整型数true或者浮点数false

5,代码示例

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>jstl</h1>
   
    <c:set var="uname" value="张三" scope="session" ></c:set>
    <c:out value="${sessionScope.uname}"></c:out>

    <c:if test="${uname=='张三'}">
        这是张三
    </c:if>

    <c:choose>
        <c:when test="${uname=='张三'}">
            张三
        </c:when>
        <c:otherwise>
            不是张三
        </c:otherwise>
    </c:choose>
  
    <%
        List list=new ArrayList();
        list.add("abc");
        list.add("bcd");
        list.add("l李四");
        pageContext.setAttribute("ulist",list);
    %>
  
    <h4>循环数据</h4>
    
    <c:forEach items="${ulist}" var="user" varStatus="sta">
        <!-- count从1开始,index从0开始 -->
        ${sta.count}-${sta.index}--->   ${user}<br>
    </c:forEach>
   
    <% pageContext.setAttribute("mytime",new Date()); %>

    date=<fmt:formatDate value="${mytime}" pattern="yyyy-MM-dd"></fmt:formatDate>

</body>
</html>

章节汇总在这里(づ ̄3 ̄)づ╭❤~@&再见萤火虫&【06-JavaWEB】


对学习Java感兴趣的同学欢迎加入QQ学习交流群:1126298731

有问题欢迎提问,大家一起在学习Java的路上打怪升级!(o゜▽゜)o☆[BINGO!]

 

 

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐