欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb之JSP

程序员文章站 2022-06-01 22:24:50
...

JSP学习

1,JSP定义

JSP(全称JavaServer Pages)是由Sun公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTMLXML或其他格式文档的Web网页,然后返回给请求者。JSP技术Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

2,JSP原理

JSP原理本质是JavaServlet代码

在代码层面上:

JavaWeb之JSP

打包后仍然是一个index.jsp文件

而在tomcat服务器中,会被转化成一个Java文件,这里以我的路径为例

C:\Users\MACHENIKE.IntelliJIdea2019.3\system\tomcat\Unnamed_JavaWebStudy_2\work\Catalina\localhost\ServletConfig_war\org\apache\jsp

JavaWeb之JSP

打开Java文件可以发现中含有一个index_jsp类,他继承了HttpJspBase,本质是一个Servlet文件

整体过程分析:

JavaWeb之JSP

3,JSP语法

3.1,默认产生得JSP代码

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

</body>
</html>

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

设置为HTML 中文 JAVA语言编码

3.2,脚本片段

<%
out.println("Your IP address is " + request.getRemoteAddr());
%>

我们通常在<% %>中写入java代码,实现脚本片段功能

与其等价得xml代码

<jsp:scriptlet>
   代码片段
</jsp:scriptlet>

3.3,JSP声明

<%! declaration; [ declaration; ]+ ... %>

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。

等价XML代码:

<jsp:declaration>
   代码片段
</jsp:declaration>

3.4,JSP表达式

<%= 表达式 %>
<p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>

表达式的值会被转化为String,可以被放在HTML标签中

3.5,JSP注释

<%-- 注释 --%>

JSP注释,注释内容不会被发送至浏览器甚至不会被编译

HTML注释,通过浏览器查看网页源代码时可以看见注释内容

3.6,JSP指令

JSP指令用来设置与整个JSP页面相关的属性。

<%@ directive attribute="value" %>

<%@ page ... %>
定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %>
包含其他文件
<%@ taglib ... %>
引入标签库的定义,可以是自定义标签

应用1:定制ErrorPage ,这里相当于自定义了当前JSP的500错误画面

<%@page errorPage="MyFirstJSP.jsp" %>

当然我们也可以在WEB.xml中进行错误页面的配置

error-code:错误代码

location:错误页面位置

<error-page>
    <error-code>404</error-code>
    <location></location>
</error-page>

应用2:实现多JSP页面的拼接,可以多页面中部分元素的复用

<%@ include file="head.jsp"%>
<p>BODY</p>
<%@include file="foot.jsp"%>

JavaWeb之JSP

通过发现源代码,我们可以发现,这种方式的本质是把两个页面完全合二为一了

JavaWeb之JSP

JavaWeb之JSP

当然我们也可以通过另一种方法实现JSP标签

<jsp:include page="head.jsp"/>
<p>BODY</p>
<jsp:include page="foot.jsp"/>

实现效果是相同的,但是本质却不一样

JavaWeb之JSP

合并后本质仍然是三个页面,三个页面的变量互不影响

3.7,JSP行为

JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。

JSP行为标签与JavaBean的使用:

jsp:useBean 寻找和初始化一个JavaBean组件

jsp:setProperty 设置JavaBean的值

jsp:getProperty 将 JavaBean组件的值插入到 output中

这种实现方式相当于对一个实体类进行get/set操作

JSP行为标签实现页面转发:

jsp:forward:从一个JSP文件向另一个文件传递一个包含用户请求的request对象

3.8,JSP隐藏对象

JavaWeb之JSP

request:HttpServletRequest类的实例

response:HttpServletResponse类的实例

out: PrintWriter类的实例,用于把结果输出至网页上

session:HttpSession类的实例

application:ServletContext类的实例,与应用上下文有关

config:ServletConfig类的实例

pageContext:PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问

page:类似于Java类中的this关键字

Exception:Exception类的对象,代表发生错误的JSP页面中对应的异常对象

3.9,控制与判断

基本在<%%>中的写法是和Java代码相同,但可以和HTML标签组合,变得灵活(例如在两个<%%>中插入HTML标签,从而实现标签的循环显示等等)

4,WEB作用域(scope)详解

JavaWeb之JSP

5,JSTL

5.1,EL表达式

5.1.1,导入Maven依赖

dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

5.1.2,EL基本

${表达式}
  1. JSP EL允许您指定一个表达式来表示属性值
  2. JSP EL 计算这个表达式,并且产生一个替代品来代替表达式的值。

5.1.3,EL通用操作符

.[]

这两个操作符允许您通过内嵌的JSP对象访问各种各样的JavaBean属性。

EL中的基础运算符支持Java中绝大多数运算符

5.1.4,EL函数

JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:

${ns:func(param1, param2, ...)}

ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数,param2指的是第二个参数

这一块主要搭配JSTL使用

5.1.5,EL隐含对象

这一点和JSP相同,EL具有11个隐藏对象,可以方便我们实现很多功能

pageScope: page 作用域

requestScope: request 作用域

sessionScope: session 作用域

applicationScope: application 作用域

这四个主要用于获取不同作用域中的数据,当我们不指定作用域时,它会按在顺序不断往上找,直到找不到,返回为空

param: Request 对象的参数,字符串

paramValues : Request对象的参数,字符串集合

这两个主要用来获取,前端传来的参数

initParam: 上下文初始化参数

cookie: Cookie值

pageContext : 当前页面的pageContext,我们可以通过pageContext访问到当前页面的各个元素,相当于我们可以利用这个隐藏对象,获取JSP的各个隐藏对象

header: HTTP 信息头,字符串

headerValues: HTTP 信息头,字符串集合

5.2,JSTL标签

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能

JSTL弥补HTML标签在JSP中不足

5.2.1,导包Again

<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

5.2.1,核心标签举例

导入核心标签库:

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

核心标签是最常用的 JSTL标签

这里举几个例子,反正用的时候直接查就行

<%--用于在JSP中显示数据,就像<%= ... >--%>
<c:out value="data"/>
<%--设置变量,执行if语句--%>
<c:set var="salary" scope="session" value="${2000*2}"/>
     <c:if test="${salary > 2000}">

    <p>我的工资为: <c:out value="${salary}"/><p>

    </c:if>
<%--Swich case类型--%>
        <c:choose>
        <c:when test="<boolean>">
        ...
        </c:when>
        <c:when test="<boolean>">
        ...
        </c:when>
        ...
        ...
        <c:otherwise>
        ...
        </c:otherwise>
        </c:choose>


<%--循环迭代--%>
        <c:forEach var="i" begin="1" end="5">
        Item <c:out value="${i}"/><p>
        </c:forEach>
相关标签: JavaWeb java