Javascript

JSP快速入门

本文主要是介绍JSP快速入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

JSP

文章目录

  • JSP
    • 一、概述
    • 二、定义方式
      • 2.1 注释
      • 2.2 定义Java代码
      • 2.3 指令
        • 2.3.1 page指令
        • 2.3.2 include指令
        • 2.3.3 taglib指令
        • 2.3.4 forward指令
    • 三、内置对象
      • 3.1 pageContext
      • 3.2 request
      • 3.3 application
      • 3.4 session
      • 3.5 response
      • 3.6 page
      • 3.7 out
      • 3.8 config
      • 3.9 exception
    • 四、路径问题
      • 4.1 相对路径
      • 4.2 绝对路径
      • 4.3 JSP中自带的全局路径声明
    • 五、EL
      • 5.1 概述
      • 5.2 运算符
      • 5.3 获取值
      • 5.4 隐式对象
    • 六、JSTL
      • 6.1 概述
      • 6.2 使用
      • 6.3 常用JSTL标签
        • out
        • set
        • remove
        • if
        • choose
        • foreach

一、概述

JavaServerPages: Java服务器页面 ,是一个一种动态网页技术,既可以定义HTML页面,又可以定义Java代码;简化了Servlet中Responce :: getWriter().write(),便于书写展示页面。
JSP运行时自动创建了一个继承自HttpServlet的类,本质上是一个Servlet类。

  1. 服务器解析请求消息,查找是否有index.jsp资源
  2. 若找到,会将index.jsp转换为对应的index.java文件
  3. 编译index.java文件,生成index.class字节码文件
  4. 由字节码文件提供访问

二、定义方式

2.1 注释

//

  • 只能注释java代码
  • 还会被编译为字节码文件,但不会被加载到html页面中

<!-- -->

  • 只能注释html代码片段
  • 响应时还会向浏览器发送被注释的代码片段,但浏览器不解析

<%-- --%>

  • 可以注释所有JSP代码
  • 响应时不会发送代码片段

2.2 定义Java代码

<% %> 局部代码块

定义的java代码在service()方法中 ,service方法中可以定义什么,该脚本中就可以定义什么

<%! %> 全局代码块

定义的java代码在转换后的java类的成员位置 ,用于定义成员方法、成员变量(由于多线程安全问题不建议定义)、静态代码块…

<%= %> 脚本调用方式

out.print(代码 );
定义的java代码在service()方法的输出语句中 ,会输出到页面上,输出语句中可以定义什么,该脚本中就可以定义什么(可以放有返回值的方法)

2.3 指令

用于配置JSP页面,或导入资源文件,不同属性空格隔开

<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>

2.3.1 page指令

contentType : 等效于Response :: serContentType(); 设置响应体的MIME类型与字符集

<%@ page contentType="text/html,charset=GBK"%>

language :JSP页面要被转义成的语言,现在只支持Java

session : JSP页面中是否有session对象,默认为true

import :导包

<%@ page import="java.util.*"%>

errorPage : 指定当前页面出现异常后跳转的页面

<%@ page errorPage="error.jap"%>

isErrorPage : 赋值为[true] 标记标记当前JSP页面为错误页面,可以使用 exception 内置对象

isELIgnored :赋值为[true]时忽略整个JSP页面的EL表达式

2.3.2 include指令

导入页面的资源文件,如多个页面同时使用某一页面时

静态导入

<%@include file="相对位置"%>

被导入的页面不会被转换为新的Servlet文件,而是与当前页面直接合并;
运行效率高,但两个页面会耦合到一起,不利于维护;还会有命名重复的问题

动态导入

<jsp:include file="相对位置"></jsp:include>

被导入的页面被转换为新的Servlet文件,与当前页面解耦

2.3.3 taglib指令

导入资源,如标签库

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

prefix:自定义的前缀名,使用标签库时用<前缀名:>

2.3.4 forward指令

实现JSP页面的请求转发

<jsp:forword page="相对位置">
    <jsp:param name="key" value="value">
    </jsp:param>
</jap:forword>

注: forward标签中间除了parame标签外不能添加任何字符;

转发到的页面中通过Object << Request :: getParameter(String name) 方法获取属性键值对

三、内置对象

在JSP页面中不需要创建,可以直接使用的对象,JSP页面转换为Servlet后已经被声明并初始化,在JSP中使用时调用的是变量名。不能在全局代码块中使用。

3.1 pageContext

pageContext类 ,(域对象)【在当前页面共享数据】。表示页面上下文的对象,它封装了当前页面的运行信息,也封装了其他8个内置对象,可以通过pageContext :: getXxx() 方法获取。
生命周期与当前页面同步,随着页面的关闭而消亡。

3.2 request

HttpServletRequest 类 ,(域对象)【在一次请求访问的多个资源间共享数据】(请求转发)。由tomcat创建,一个请求对应一个request对象。

3.3 application

ServletContext 类 ,(域对象)【所有用户间共享数据】。一个web项目只有一个application对象。
生命周期与服务器同步,伴随着服务器的关闭而消亡。

3.4 session

HttpSession 类 ,(域对象)【在一次会话的多个请求间共享数据】。一次会话对应一个session对象。

3.5 response

HttpServletResponse 类 ,响应请求数据,将处理结果返回给浏览器、重定向

3.6 page

Object 类 ,代表当前Servlet类的对象,相当于this

3.7 out

JspWriter 类 ,带有缓冲区的字符输出流对象。可以将数据输出到页面上,效率高于Response ::getWriter().write()

在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据

response.getWriter()数据输出永远在out.write()之前

3.8 config

ServletConfig 类 ,Servlet的配置对象,可以用来获取web.xml中的配置数据

3.9 exception

Throwable 类 ,异常对象,存储当前运行的异常信息。必须在page指令中标记当前页面为异常页面才会有

四、路径问题

4.1 相对路径

相对于当前资源的路径。使用后,目标路径不能随便更改;使用[…/]方式退出目录时,如果位置比较深操作麻烦

4.2 绝对路径

在请求路径前加上[/]表示当前服务器的根路径,使用时需添加[/虚拟项目名/资源目录]

/Login/a/login_check

4.3 JSP中自带的全局路径声明

<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()
        +":"+request.getServerPort()+path+"/";
%>
-----------------------------
<head>
<base href="<%=basePath>">
</head>

添加资源路径时,从当前项目的web目录下添加即可

/Login/a/login_check >> a/login_check

五、EL

5.1 概述

ExpressionLanguage 表达式语言 ,用于简化JSP页面中获取作用域和请求数据的代码编写。使用EL表达式后JSP页面不用再导包或进行类型强制转换,使层次结构清晰。
JSP默认支持EL表达式语言。

语法:${expression}

忽略JSP页面的表达式:

  • 在page指令中为isELIgnored属性赋值为“true”,来忽略整个页面的EL表达式
  • \${expression},来忽略一条特定的EL表达式,相当于将[$]字符进行了转义

5.2 运算符

算数运算符:
+ 、-、 *、 /、div、 %、mod

【+】只表示数值运算相加,不表示字符串拼接

&{1+“1”} == 2

比较运算符:
> 、<、 >=、 <=、 ==、 !=

逻辑运算符:
&&、and、 ||、or、 !、not

空运算符:
empty :用于判断字符串、集合、数组对象是否为null或者长度是否为0,返回Boolean类型

  • ${empty list}:判断list集合是否为null或者长度为0
  • ${not empty str}:判断字符串str是否不为null 并且 长度>0

5.3 获取值

EL表达式只能从域对象中获取值,没有获取到值时返回空字符串。

${域名称.键名} :从指定的域对象中获取键的值

${键名} :由作用域最小的域对象开始,依次查找键的值

域对象由小到大的域名称:

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

获取对象的属性: ${域名称.键名.属性名}

获取List集合的值: ${域名称.键名[索引]}

获取Map集合的值: ${域名称.键名.key名称} 或: ${域名称.键名["key名称"]}

获取用户请求数据: ${parame.键名}未获取到值时返回null

获取请求头数据: Map<String,String> << ${header} 请求头的所有键值对映射

Map<String,String[ ]> << ${headerValues["accept-language"]} 请求头某一键对应的多个值

String << ${header["host"]} 请求头某一键的值

获取Cookie数据:

String << ${cookie.JSESSIONID. name}

String << ${cookie.JSESSIONID. value}

5.4 隐式对象

EL共有11个隐式对象, pageContext 获取jsp其他八个内置对象

${pageContext.request.contextPath}:动态获取虚拟目录

六、JSTL

6.1 概述

JavaServerPagesTagLibrary JSP标准标签库 ,由Apache开源组织提供,用于扩展EL表达式。

JSTL是标签语言,但不是JSP内置的,使用时需要导包并指定标签库。

6.2 使用

  • 导入jstl相关jar包
  • 引入标签库<%@ taglib prefix=“c” uri=" http://java.sun.com/jsp/jstl/core " %>
  • 使用标签:< 前缀:标签名>< /前缀:标签名>

6.3 常用JSTL标签

out

将内容输出到页面上

<c:out value="PrintByJSTL" default="Default"></c:out >

value:要输出的内容;default:默认输出的内容

set

向四个域对象中赋值

<c: set var="key" value="value" scope="request"></c: set>

var:属性的键名;value:属性的值;scope:指定域对象,不赋值时默认为pageContext

remove

删除域对象中的值

<c:remove var="key" scpoe="request"></c:remove>

var:属性的键名;scope:指定删除的域对象,不赋值时默认将所有域对象中属性名为"key"的值删除

if

if语句,if标签没有else,可以定义多个if标签达到目的

<c:if test="${a>5}" var="falg" scope="request">执行</c:if>

test:填写逻辑表达式;var:条件表达式的结果存储变量名;scope:条件表达式的结果变量的作用域

choose

switch语句,多重判断

<c:choose>
	<c:when test="${age>10}">
    	11
    </c:when>
    <c:when test="${age>20}">
    	21
    </c:when>
    <c:otherwise>
    	1
    </c:otherwise>
</c:choose>

foreach

for 语句

循环重复操作

<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
    ${i} ${s.index} ${s.count}<br>
</c:forEach>

遍历容器内容

<c:forEach items="${requestScope.list}" var="str" varStatus="s">
    ${str} ${s.index} ${s.count}<br>
</c:forEach>
  • begin:开始值(包含)
  • end:结束值(包含)
  • var:迭代的变量名
  • step:变量增长量 不赋值时默认为1
  • items:容器对象
  • varStatus:循环状态
    • index:容器中元素的索引,从0开始
    • count:循环次数,从1开始
这篇关于JSP快速入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!