一学就会的JSP

本文详细介绍了JSP中的模板元素、表达式、脚本片段、注释和指令,强调了它们在Servlet翻译过程中的作用。此外,还探讨了EL表达式用于从域中获取数据的功能,并通过示例展示了其用法。文章进一步介绍了JSTL标签库,特别是`<c:set>`标签用于设置域属性的操作。最后,解释了JSP本质是一个Servlet的原因,指出JSP文件在首次访问时会被翻译成Servlet程序,并在后续访问中直接运行。
摘要由CSDN通过智能技术生成

JSP模板元素

模板元素是指JSP中属于HTML的内容

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP入门</title>
</head>
<body>
	<h1>HELLO JSP!!!!</h1>
</body>
</html>

上述有色彩的属于HTML的内容,所以是模板元素
最上边两行属于JSP中独有的内容
模板元素在翻译后的Servlet程序中,会被直接用out.write原封不动的发送给浏览器,由浏览器解析

JSP表达式

表达式的格式:<%= 常量/变量/表达式 %>
表达式中不能写Java语句,也不能出现分号
作用:计算表达式的结果,将结果输出到浏览器上,由浏览器解析
例如:
在这里插入图片描述

JSP脚本片段

脚本片段的格式:<% 如果Java语句 %>
作用:在翻译后的servlet中,脚本片段中的Java代码,会被直接运行对应位置
例如:在JSP中代码如下:

<%
for(int i=0;i<5;i++){
out.write(“HELLO
”);
}
%>
在翻译后的Servlet中代码如下:
out.write("\t \r\n");
out.write("\t");
for(int i=0;i<5;i++){
out.write(“HELLO
”);
}
另外,在某一个脚本片段中的Java代码可以是不完整的,但是在JSP中所有的脚本片段加载一起,最终组合起来必须要是完整的Java代码
例如:在JSP文件中写如下代码

<%for(int i=0;i<5;i++){%>
<%out.write(“HELLO
”);%>
<%}%>
在翻译后的Servlet程序中
out.write("\t \r\n");
out.write("\t");
for(int i=0;i<5;i++){
out.write(’\r’);
out.write(’\n’);
out.write(’ ');
out.write(“HELLO
”);
out.write("\t\t\r\n");
out.write("\t");
}

JSP注释

注释格式:<%-- 注释的内容 -->
作用:为代码添加声明,可以将一些暂时用不到的代码注释掉,在JSP翻译时,JSP注释不会参与翻译,而是被直接丢弃

注意,注释时,不能交叉嵌套

JSP指令

指令的格式:<%@ 指令名称 若干的属性声明 %>
作用:用于指挥JSP解析引擎的工作,如何将一个JSP翻译成为一个Servlet程序
1.page指令—用于声明JSP文件的基本属性信息
<%@page import=“java.util.Date”%>
–import属性用于导包,如果不导包,也可以在使用类时,把包路径补全,如:
new java.util.Date();

JSP标签技术(了解)

jsp的优点是可以在HTML中写java代码,导致jsp特别得流行,所以就有的人只用JSP开发,但是这么一做,会导致大量的项目都太乱了,特别难维护
于是sun公司发布JSP2.0版本,提出了标签技术,并且推荐使用标签来替代JSP中的java代码,并且推荐,在JSP2.0版本后,就不要在JSP中出现任何一行java代码

EL表达式

格式:${ 常量/表达式/变量 }(放在EL表达式中的变量,需要先存入到域中,才可以获取到域中的值)
作用:
(1)计算放在EL表达式中的表达式的结果,将结果输出到当前位置
(2)主要作用:用于从域对象中获取数据,将获取到的数据输出到当前位置

<%@page import="com.tedu.pojo.User"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL表达式</title>
</head>
<body>
	<h3>1.获取常量、表达式、变量的值</h3>
	<%="Hello" %><br/>
	${ "Hello EL" }<br/>
	<%=123+456 %><br/><!-- 输出表达式,是先计算后输出 -->
	${ 123+456 }<br/><!-- 如果发生异常,可以先剪切,然后保存,再粘进来 -->
	123+456<br/><!-- 写什么输出什么 -->
	<%
		/* jsp的脚本片段:写java代码 */
		/* 声明变量 */
		String name="农夫山泉有点甜";
		request.setAttribute("name1", name);
		/* name是变量的名称 name1是变量存储到域中的名称 */
	%>
	<%= name %><br/><!-- jsp表达式可以直接输出变量,但是只能输出在当前jsp页面声明的变量 -->
	${ name1 }<br/><!-- el表达式输出变量主要针对的是跳转发送过来的变量 -->
	<!-- 
	在EL表达式中书写变量时,底层会根据存储到域中的变量的名称到作用域中寻找
	四大作用域从小到大排序:pageContext<request<session<application
	如果找不到,就什么也不输出,如果找到了,就直接输出对应的值
	 -->
	<h3>2.获取作用域中数组或者集合中的元素</h3>
	<%
		//声明一个数组,并为数组添加元素,将数组保存到域中
		String[] names={"张三","李四","王五","赵六"};
		request.setAttribute("FourCoolGuys", names);
	%>
	<!-- 使用EL表达式获取域中数组中的元素 -->
	<!-- 可以直接使用域中的名称[下标] -->
	${ FourCoolGuys[0] }<br/>
	${ FourCoolGuys[1] }<br/>
	${ FourCoolGuys[2] }<br/>
	${ FourCoolGuys[3] }<br/>
	<h3>3.获取作用域中的map集合中的值</h3>
	<%
		//声明一个map集合,并为map集合添加元素,将map集合存储到域中
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("name","小李");
		map.put("age",18);
		map.put("desc","小李永远18");
		request.setAttribute("LCY", map);
	%>
	<!-- 使用EL表达式获取域中的map集合中的值 -->
	${ LCY.get("name") }<br/><!-- 域中的名字.get(key) -->
	${ LCY.age }<br/><!-- 域中的名字.key -->
	${ LCY["desc"] }
	<h3>4.获取作用域中的实体对象的属性值</h3>
	<%
		//生成User对象,然后将实体对象存入到域中
		User user=new User();
		user.setName("老安");
		user.setAge(18);
		user.setDesc("老安不哭,站起来");
		request.setAttribute("YYL",user);
	%>
	<!-- 使用EL表达式,获取域中实体对象中的属性值 -->
	${ YYL.getName() }<br/>
	${ YYL.getAge() }<br/>
	${ YYL.getDesc() }<br/>
	<!-- 下面的方式是对上面的方式的简写 -->
	${ YYL.name }<br/>
	${ YYL.age }<br/>
	${ YYL.desc }<br/>
	<br/><br/><br/><br/><br/><br/><br/><br/>
</body>
</html>

JSTL标签库

JSTL标签是为了JAVAWEB开发人员提供的一套标准通用的标签库,这个JSTL标签库和EL表达式配置使用可以替代JSP中绝大部分的java代码
在使用JSTL标签库之前,我们需要完成
(1)导入JSTL的开发包
在这里插入图片描述

将JSTL-1.2.jar放在WEB_INF/lib文件夹中,会总到Build

(2)在使用了JSTL标签库的JSP中引入JSTL
在这里插入图片描述

<c:set>标签
用于往域中添加属性,或者修改域中已有的属性
c:set标签常用属性总结:
(1)var属性—用于指定存入作用域中的属性的名称
(2)value属性—用于指定存入到作用域中的属性的值
(3)scope属性—用于指定属性存入到哪一个作用域中,可以取值:
a)page – pageContext域
b)request – request域
c)session – session域
d)application – application域

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 在当前JSP中引入JSTL标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL标签库</title>
</head>
<body>
	<h1>c:set标签</h1>
	<h3>1.用于往request域中添加属性(name)</h3>
	<%--
		String name="小陈";
		request.setAttribute("name", name);
	--%>
	<c:set var="name" value="小陈"  scope="request"/>
	${ name }
	<h3>2.用于往request域中修改属性(name)的值为小陈真帅</h3>
	<c:set var="name" value="小陈真帅"  scope="request"/>
	${ name }
</body>
</html>

为什么JSP的本质是一个Servlet?

1.当我们第一次访问JSP页面时,JSP文件会被底层默认翻译成为Servlet程序
在服务器发布路径的work文件夹下,可以找到两个文件,.class和.java文件,这两个文件就是在访问jsp文件时,自动生成的
在这里插入图片描述

打开.java文件,可以看到有如下代码

out.write("\r\n");
      out.write("<!DOCTYPE html>\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("<meta charset=\"UTF-8\">\r\n");
      out.write("<title>JSP入门</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("\t<h1>HELLO JSP!!!!</h1>\r\n");
      out.write("</body>\r\n");
      out.write("</html>");

所以访问JSP时,底层会自动将JSP中的文本用out.write向网页输出,所以才成为了一个HTML
2.当我们第二次访问JSP文件时,会直接加载Java文件,编译为class文件,然后运行。
(hello.jsp => hello_JSP.java => hello_JSP.class)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值