JSP,el技术和jstl技术的基础知识点

jsp

一.JSP的介绍

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

JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

二.脚本和注释(开发一般不用)

jsp:脚本:<%java代码%>

​ <%=java变量或表达方式%>

​ <%!java代码%> 里面写成员变量或者方法

JSP中的注释分为三种:
HTML注释: 可以在页面中可见
JSP注释: <%-- 这是JSP注释 --%> 只能在jsp页面中可见
Java注释:只能在小脚本中写 可以在翻译成的Servlet中可见

//在jsp中显示出9*9乘法表
<%
	for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
%>
	<%=j+"*"+i+"="+(j*i) %>&nbsp;&nbsp;&nbsp;&nbsp;

<%
		}
%>
	<%="<br>" %>
	
<%			
	}
%>

三.jsp指令

1.jsp指令的写法

<%@ page  contentType="text/html; charset=UTF-8" %>
<%@ 指令名 属性="属性内容" %>

2.指令的种类与包含的属性

jsp指令(3个):page,include,taglib

(1)page的属性

  • language jsp的小脚本使用的是那种语言,(这个属性不起作用,只能用Java语句)
  • contentType 浏览器以什么格式打开当前输出的页面,就是response.setContentType(“text/html; charset=UTF-8”)
  • pageEncoding 当前页面中可以写什么格式的语言。如果有contentType,这个属性可以不写
  • buffer 是out内置对象输出的缓冲区,一般默认值是8KB
  • import 导入java需要的指定包
  • session=“true” 是否开启直接回话。如果是false,不能直接使用session这个内置对象的
  • errorPage 如果当前页面出现了异常,跳转到哪个异常处理页面
  • isErrorPage: 是否是异常处理页面

(2)include的属性

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

(3)targlib的属性

<%@ targlib prefix="c" uri=""%>

四.JSP的内置对象(9个)

request: HttpServletRequest的对象

response: HttpServletresponse的对象

pageContext: PageContext的对象(当前页面上下文的对象)

session: HttpSession的对象

application: ServletContext的对象

config: ServletConfig的对象

out: jsp的输出对象 PageWriter

page: 当jsp被翻译成Servlet时,Servlet的对象

exception:异常的对象

五.jsp四大域对象

jsp四大域对象:==Servlet三大域对象+pageContext

application :整个Web应用

session :一次会话

request :一次请求

pageContext:当前jsp页面范围

六.pageContext的作用

pageContext的作用:
1:可以获取其它的八个内置对象。
后面会使用EL表达式来完成对小脚本的替代,EL表示有11个隐式对象
在这里面jsp的内置对象只有一个pageContext。这时可以在EL表达式中获取其它八个JSP
的内置对象。

2:可以获取其它的三个域对象的值。

 pageContext.getRequest();
 pageContext.getSession();

七.动态包含与静态包含

JSP的动作:使用的是jsp内置的标签完成的servlet的某些功能
jsp:标签名</jsp:标签名>
forward: servlet中是请求转发,这里也是一样的。
<jsp:forward page=“index.jsp”></jsp:forward>
include: 请求包含
三大指令中有个包含指令
<%@ include file="" %> 静态包含
<jsp:include page=""></jsp:include> 动态包含

区别:
1:静态包含中,被包含的jsp页面是不会单独翻译成一个servlet的。
将被包含页面中的所有东西都挪动到了主页面的service方法中,导致主页面代码混乱。
2:动态包含中,被包含的jsp页面会单独翻译成一个servlet。
在主页jsp翻译成的servlet中通过代码来引入被包含页面的。
service方法比较整洁,同时效率稍微高

八.EL技术

1.el的简单写法

在jsp页面中使用el技术,可以不用谢脚本,书写格式为${}

EL表达式来完成基本四则运算<br>
${1+1} <br>
${1-1} <br>
${2*2} <br>
${8/3} <br>
${8%3} <br>
${1==1} <br>//返回一个true
${empty a}<br> 
${not empty b}<br>
EL表达式还可以在JS代码中写,需要用引号括起来
<button οnclick="fun()">点 </button>
<script>
   function fun(){
      var s="${123}";
      alert(s);
   }
</script>
</body>
</html>

2.EL从域中提取数据

先创建一个Servlet来储存数据

HttpSession session = request.getSession();
//普通字符串
session.setAttribute("userName", "张飞");
//User对象的,先创建了一个User的类,有名字和年龄两个变量
session.setAttribute("sessionUser", new User("李白", 22));
//List<String>
List<String> strList=new ArrayList<String>();
		 strList.add("tom");
		 strList.add("jerry");
		 strList.add("mama");
		 session.setAttribute("sessionListStr", strList);
//List<User>
List<User> userList=new ArrayList<User>();
		 userList.add(new User("a", 16));
		 userList.add(new User("b", 15));
		 userList.add(new User("С", 15));
		 session.setAttribute("userList", userList);
//Map<String,String>
Map<String,String> strMap=new HashMap<>(); 
		 strMap.put("userName", "lala");
		 strMap.put("userAge", "18");
		 session.setAttribute("strMap", strMap);
//EL获得Map<String,User>
Map<String,User> mapUser=new HashMap<String, User>();
		 mapUser.put("user1", new User("aa", 22));
		 mapUser.put("user2", new User("bb", 25));
		 session.setAttribute("mapUser", mapUser);
//转向
		 request.getRequestDispatcher("el_demo2.jsp").forward(request, response);

取出域中的值:

EL最主要的作用是获得四大域中的数据,格式****${EL表达式}****

EL获得pageContext域中的值:$(pageContextScope.key);

EL获得request域中的值:$(requestScope.key);

EL获得session域中的值:$(sessionScope.key);

EL获得application域中的值:$(applicationScope.key);

EL从四个域中获得某个值$(key);

对于session.setAttribute(“strMap”, strMap);而言,括号中前者是key

示例:

1)EL获得普通字符串

${sessionScope.userName}

2)EL获得User对象的值

//[sessionScope.Key(自己定义的)]大括号中获取的是User对象,然后想获取什么变量就.变量
${sessionScope.sessionUser.username}

3)EL获得List的值

//sessionScope.Key(自己定义的).get(集合角标)
${sessionScope.sessionUser.get(0)}

4)EL获得List的值

${sessionScope.userList[0].userName}

5)EL获得Map<String,String>的值

${sessionScope.strMap.userName}

6)EL获得Map<String,User>的值

${sessionScope.mapUser.user2.userName}

3.EL的内置对象

pageScope

requestScope

sessionScope

applicationScope

---- 获取JSP中域中的数据

param,paramValues - 接收参数.

header,headerValues - 获取请求头信息

initParam - 获取全局初始化参数

cookie - WEB开发中cookie

pageContext - WEB开发中的pageContext.

注:加粗是需要特别记忆的

****${ pageContext.request.contextPath }****获取的是程序名字

<link rel="stylesheet" href="${ pageContext.request.contextPath }/css/a.css" />

九.JSTL技术

1.常用的标签库

标签库:Core

prefix:“c”

uri:“http://java.sun.com/jsp/jstl/core”

注意:选uri中存在jstl的一个

使用的时候需要

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

2.需要用到的jar包

两个:standard.jar jstl.jar

3.标签的写法

<c:if>   如果标签
<c:foreach>    循环标签

(1)对于<c: if>而言:

test指判断条件,判断条件一定要使用el表达式书写

c:if 没有else,想要写相反的条件,就再来一个

<c:if test="${1>0}">
 	hello
 </c:if>
 <c:if test="${1<=0}">
 	haha
 </c:if>

(2)对于<c: for>

begin+end+items+var 等价与fori循环
items是需要被循环的数组或集合
begin:从第几个开始循环(包含)
end: 到哪结束(包含)
var:具体循环出来的值

for i循环
<c:forEach begin="1" end="100"  var="i">
 	${i} &nbsp;&nbsp;
 </c:forEach>
超级for循环
var可以自己随便写,这时var的值可以代表item
<c:forEach items="${sessionScope.userList}" var="user">
  	姓名是:${user.userName } &nbsp;&nbsp;&nbsp; 年龄是:${user.age}<br>
  </c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值