JSP总结

本文深入解析JSP指令、动作标签、内置对象及EL表达式的应用,涵盖JSP指令如page、include、taglib,JSP动作标签如jsp:include、jsp:forward、jsp:param,以及JSP内置对象和EL表达式的详细使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSP

JSP从前端角度来看就是一个网页,从后端角度看来,是一个继承了Servlet的类.

JSP指令

<%@ 指令名字 %>

page指令

page指令的属性如下:

  1. language: 表明jsp页面中支持的编程语言
  2. contentType: 表明这个JSP文件的类型.
  3. pageEncoding: 表明JSP文件内容编码
    <%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%>
    
  4. extends: 表明指定jsp翻译成java文件后,继承的父类是谁,一般不用改
  5. import: 用来导包,一般不用手写
  6. session: 可选值true和false,用于控制在这个jsp页面里面,是否能够直接使用session对象
  7. errorPage: 指定错误的页面页面路径
  8. isErrorPage: 表明此页面到底是否为错误页面

include指令

include命令用于包含另外一个jsp的内容.
静态包含:把另外一个页面的所有内容拿过来一起输出.

<%@ include file="other02.jsp"%>

taglib指令

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

uri: 标签库路径
prefix : 标签库的别名

JSP动作标签

<jsp:include page=""></jsp:include>
<jsp:param value="" name=""/>
<jsp:forward page=""></jsp:forward>

jsp:include

动态包含: 不是把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来。

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

jsp:forward

请求转发:

<jsp:forward page=""other02.jsp""></jsp:forward>

这行代码等同于:

request.getRequestDispatcher("other02.jsp").forward(request, response);

jsp:param

在包含或跳转某个页面的时候,加入这个参数

<jsp:forward page="other02.jsp">
	<jsp:param value="beijing" name="address"/>
</jsp:forward>

在other02.jsp中显示参数

<br>收到的参数是:<br>
<%= request.getParameter("address")%>

JSP内置对象

内置对象: 可以直接在jsp页面中使用这些对象,不用创建.

作用域对象

作用域对象可以存值,他们的取值范围有限定. 可以使用setAttribute和getAttribute.

  1. pageContext -->PageContext
    作用域仅限于当前的页面.
  2. request -->HttpServletRequest
    作用域仅限于一次请求.
  3. session -->HttpSession
    作用域限于一次会话(多次请求与响应)
  4. application -->ServletContext
    作用域为整个工程

其他内置对象

  1. exception --> Throwable
  2. page -->Object
    是这个jsp翻译成的java类的实例对象
  3. out --> JspWriter
    jsp里的内容其实也是out对象输出的,
  4. response --> HttpServletResponse
  5. config --> ServletConfig

EL表达式

EL表达式是为了简化jsp里面写的java代码

写法格式: ${表达式 }

如果从作用域中取值,会先从小的作用域开始取.如果没有,就在大一层的作用域中取值.若所有作用域都取不到,则不显示.

EL表达式示例

  1. 取出4个作用域中存放的值。

    <%
    	pageContext.setAttribute("name", "page");
    	request.setAttribute("name", "request");
    	session.setAttribute("name", "session");
    	application.setAttribute("name", "application");
    %>
    按普通手段取值<br>
    <%= pageContext.getAttribute("name")%>
    <%= request.getAttribute("name")%>
    <%= session.getAttribute("name")%>
    <%= application.getAttribute("name")%>
    
    <br>使用EL表达式取出作用域中的值<br>
    ${ pageScope.name }
    ${ requestScope.name }
    ${ sessionScope.name }
    ${ applicationScope.name }
    
  2. 取出域中所存的数组

    <%
    	String [] a = {"aa","bb","cc","dd"};
    	pageContext.setAttribute("array", a);
    %>
    
    <br>使用EL表达式取出作用域中所存数组的值<br>
    ${array[0] } , ${array[1] },${array[2] },${array[3] }
    
  3. 取出域中所存的集合

    <%
    	Map map = new HashMap();
    	map.put("name", "zhangsna");
    	map.put("address","北京..");
    	map.put("address.aa","深圳..");
    	pageContext.setAttribute("map", map);
    %>
    
    <br>使用EL表达式取出作用域中所存集合的值<br>
    ${map.name} , ${map.age} , ${map.address} , ${map["address.aa"]}
    

取值细节:

  1. 要先向域中存值,才能取得值
  2. 向集合中取值方式:
    1. 如果所取的集合是有下标的,那么直接使用[]
    2. 如果没有下标,直接使用.的方式去取

JSTL

简化jsp的代码编写,替换 <%%> 写法,一般与EL表达式配合.

JSTL的导入

  1. 导入jar文件到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
  2. 在jsp页面上,使用taglib 指令,来引入标签库
  3. 注意: 如果想支持 EL表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持EL表达式.
    上边有jsp路径的都是1.1版本,一般我们引入的都是核心库/core
    上边有jsp路径的都是1.1版本,一般我们引入的都是核心库/core
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

JSTL常用标签

<c:set></c:set>
<c:if test=""></c:if>
<c:forEach></c:forEach>

c:set

c:set用来向域中声明一个变量

<!-- 声明一个对象name,对象的值zhangsan,存储到了session -->
<c:set var="name" value="zhangsan" scope="session"></c:set>
${sessionScope.name }

C:if

<c:if test="EL表达式判断条件"></c:if>

判断test里的表达式是否满足.若满足,执行c:if标签中的输出.c:if是没有else的。

<c:set var="age" value="18" ></c:set>
<c:if test="${ age > 26 }">
	年龄大于了26岁...
</c:if>

<c:if test="${ age <= 26 }">
	年龄小于了26岁...
</c:if>

可以用var属性和scope属性为判断结果赋值并存储.

<c:if test="${ age > 26 }" var="flag" scope="session">
	年龄大于了26岁...
</c:if>

c:forEach

从1 开始遍历到10. 得到的结果赋值给i,并存储到page域中,step设置步长为2
<c:forEach begin="1" end="10" var="i" step="2">
	${i }
</c:forEach>
<%
	List list = new ArrayList();
	list.add(new User("zhangsan", 18));
	list.add(new User("lisi", 28));
	list.add(new User("wangwu", 38));
	list.add(new User("maliu", 48));
	list.add(new User("qianqi", 58));
	pageContext.setAttribute("list", list);
%>

遍历集合中元素,
items表示被遍历的对象,必须写el表达式
var接收遍历出来的每一个元素
<c:forEach var="user" items="${list}">
	姓名:${user.name}, 年龄:${user.age}
</c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值