美文网首页
第6章 JSP

第6章 JSP

作者: yangsg | 来源:发表于2019-05-21 11:45 被阅读0次

1. JSP基础理论

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的
一种用于开发动态web资源的技术。
JSP技术的特点:

  • JSP是一种服务器端脚本语言,其出现降低了Servlet编写页面的难度。JSP本质上就是Servlet,实际上JSP是首先被翻译成Servlet后才编译运行的,因此JSP能够实现Servlet所能够实现的所有功能。
  • 相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

第一次访问JSP

第一次访问JSP

后续访问JSP

后续访问JSP

2. JSP的组成元素

2.1 DHTML静态内容

包含HTML静态网页,CSS样式表,Javascript客户端脚本等静态资源


2.2 JSP脚本
2.2.1 Java脚本

在JSP页面上以<% %>表现,在其中编写Java代码,实现动态效果。其中包含了9个隐式对象,不用声明即可直接使用

<%
  Object o = request.getAttribute("key");
%>

9个隐式对象分别如下:

  • pageContext page作用域
  • request request作用域和请求对象
  • session session作用域
  • application application作用域
  • response 响应对象
  • page 相当于JSP翻译成Java文件中的this
  • config web服务器配置对象
  • out Java文件中输出动态网页的out对象
  • exception JSP中的异常对象,仅限于JSP定义为isErrorPage=true时使用
2.2.2 输出脚本

在JSP页面上以<%= %>表现,用于将变量或者表达式的值显示在网页上

<%
  int a = 3;
  int b = 4;
%>
值:<%= a+b %>
2.2.3 声明脚本

在JSP页面上以<%! %>表现,用于声明类级别的属性或者方法

<%
   x = 3;
   int x = 5;    //jsp_service方法中声明的局部变量
%>
<%!
    int x = 10; //JSP翻译成Java文件中声明属性变量
%>
<%= x %> //5
<%= this.x %> //3

翻译成Java代码

public class XXX_jsp{
  int x = 10;
  public void jsp_service(){
    x = 3;  //相当于this.x = 3;
    int x = 5;  //局部变量
    out.println(x);   //局部变量的优先级高 5
    out.println(this.x);   //属性变量  3
  }
}
2.2.4 注释脚本

在JSP页面上以<%-- --%>表现为JSP的注释。
在JSP页面上,常见有3中注释方式

  • <%-- --%> JSP注释
    JSP注释在JSP翻译成Java过程中被忽略
  • <% // %> Java注释
    Java注释在Java文件编译成class文件过程中被忽略
  • <!-- -- > HTML注释
    始终不会被忽略,会被响应给客户端

在实际工作中尽量不要使用HTML注释,这部分实际上会响应给客户端,它会占用网络资源,同时如果客户端的使用者了解原理,可以通过“查看源”方式获取这部分被注释掉的代码,如果其中包含了敏感链接信息等内容,可能会造成一些商业风险。


2.3 JSP指令

在JSP页面上以<%@ %>表现。

2.3.1 page指令

page指令可以出现多次(仅限在引入Java文件时),用于表示JSP页面的一些基本设置信息,

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

常用的属性

常用属性 用途 取值 必要项
language 服务器脚本语言的类型 只能是java
contentType 静态资源的响应类型 text/html; charset=UTF-8
pageEncoding JSP的字符集 各种字符集,比如UTF-8
import Java语言的引包 相当于Java代码中的import,可以出现多次
errorPage JSP的错误页指向 其他JSP页面(必须是isErrorPage=true)
isErrorPage 声明JSP自身是否为一个错误页,允许该JSP使用exception隐式对象 true或false
2.3.2 taglib指令

taglib指令可以出现多次,用于引入第三方的标签库,比如JSTL标签库和自定义标签库

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

常用的属性

常用属性 用途 取值 必要项
prefix 被引入标签库在JSP页面上使用的前缀名 字符串
uri 被引入标签库声明的uri 表示url的字符串
tagdir 用于指定tag文件目录 绝对路径
2.3.3 include指令

include指令可以出现多次,在页面上引入另一个JSP的内容。比如菜单这种在很多JSP页面都出现的内容就可以使用include指令来引入,一次修改处处生效。

<%@ include file="" %>   
常用属性 用途 取值 必要项
file 引入JSP文件的站内地址 表示站内地址的url的字符串

2.4 JSP动作
2.4.1 include动作

与JSP指令的功能实际效果是一致的,在页面上引入另一个JSP的内容。

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

include指令与include动作的区别
include指令:将两个JSP的代码融合至一起。
include动作:两个JSP有各自独立的编译和输出

2.4.2 forward动作

相当于在JSP页面上进行请求转发,当JSP执行到这句代码时,立即进行请求转发

<jsp:forward page="站内路径"></jsp:forward>
2.4.3 param动作

在请求转发的过程中传递数据,通过getParameter可以取得这些数据

<jsp:forward page="站内路径">
  <jsp:param value="abc" name="haha"/>
  <jsp:param value="123" name="xixi"/>
</jsp:forward>
2.4.4 useBean动作

从某个作用域中取得数据

<jsp:useBean id="online" class="com.neuedu.po.EmployeesPO" scope="session"></jsp:useBean>
常用属性 用途 取值 必要项
id 作用域中的key和变量名 字符串
class 取出变量的类型 表示类路径的字符串
scope 作用域 page,request,session,application

在JSP页面中声明某个变量


3. EL表达式

3.1 在作用域中取值

取得的是某个属性的值,要求该属性必须有相应的set和get方法

${sessionScope.online}  //取得session作用域中key是online的对象的值
${sessionScope.online.ename} //取得session作用域中key是online的对象的ename属性的值
${haha} //取得request作用域中key是haha的对象的值
${requestScope.haha} //取得request作用域中key是haha的对象的值

EL表达式中作用域的隐式对象

EL表达式隐式对象 作用域
pageScope page作用域
requestScope(默认) request作用域
sessionScope session作用域
applicationScope application作用域
3.2 基础的运算

EL表达式可以进行基础的运算,比如:四则运算和比较运算

${sessionScope.online.sex == 1}  //显示sex属性的值是否为1
${2+3}  //计算2+3的结果并显示
${2+3 > 4} //显示2+3>4的比较结果
3.3 web的基础信息
${pageContext.request.contextPath}  //系统的root的名字

4. JSTL标签

在工程中导入jstl的jar包,在JSP页面上使用taglib指令引入标签库

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

着重介绍下面三种常用的标签,其他的略过

4.1 迭代标签(core库)

for...each

<c:forEach var="po" items="${elist}">
</c:forEach>

相当于

for(EmployeesPO po : (List<EmployeesPO>)request.getAttribute("elist")){
}

for

<c:forEach begin="0" end="5" step="1">
</c:forEach>

相当于

for(int i = 0; i < 5; i++){
}
4.2 条件标签(core库)

单独if

<c:if test="${5 > 2}">
</c:if>

相当于

if(5 > 2){
}

多重分支

<c:choose>
    <c:when test="${po.sex == 1}">
        男
    </c:when>
    <c:when test="${po.sex == 2}">
        女
    </c:when>
    <c:otherwise>
        保密
    </c:otherwise>
</c:choose>

相当于

if(po.getSex() == 1){
  男
}else if(po.getSex() == 2){
  女
}else{
  保密
}
4.3 日期格式标签(fmt库)

用于日期格式化的显示
将po.getBirthday()表示的date对象,按照yyyy年MM月dd日的格式进行显示

<fmt:formatDate value="${po.birthday}" pattern="yyyy年MM月dd日"/>

相关文章

网友评论

      本文标题:第6章 JSP

      本文链接:https://www.haomeiwen.com/subject/jzhdzqtx.html