JSP(JSTL EL表达式 三个指令 六个动作标签 九个JSP内置对象)

JSP(JSTL EL表达式 三个指令 六个动作标签 九个JSP内置对象)

概念

JSP: Java Server Page Java服务项目

是一种可以写html css js 也可以写Java代码的页面

作用是简化页面的书写

JSP本质上是个Servlet
* JSP:
	* 注释:
		* 标记语言注释: <!--  -->
			* 缺点:
				1.会发送到客户端
				2.不能注释Java代码
		
		* jsp注释: <%-- --%>
			* 优点:
				1.不会发送到客户端
				2.能注释Java代码
				
	* 3大指令:
		* 指令:配置JSP页面的属性或者导入一些额外的内容
		* 格式:<%@ 指令名称 属性名="属性值" %>
		* 分类:
			page:配置JSP页面的属性
			include:静态包含
			taglib:导入额外的内容
		
		* page指令:
			language :指定jsp页面使用的语言。只有一个值 java
			*import :导入软件包
			*pageEncoding :设置页面编码
				1.指定jsp文件的编码
				2.告诉浏览器页面使用的编码格式
			autoFlush:自动刷新
			buffer:缓冲区大小
			
			*errorPage:指定错误页面,当页面发生异常时,指定跳转的页面
				* 一般在开发完成后,会在web.xml中通过<error-page>标签来配置整个项目的错误页面

				 <error-page>
  					<error-code>500</error-code>
  					<!-- <exception-type></exception-type> -->
  					<location>/500.jsp</location>
  				</error-page>
			<!--    <error-page>
  				<error-code>404</error-code>
  				<location>/404.jsp</location>
 				 </error-page>
  			 -->
			
			isErrorPage:是否是错误页面
				true:是错误页面,可以使用内置对象exception
				false:不是
		
		* taglib:导入额外的内容,如:导入jstl标签
			<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
			
		* include:静态包含	
			* 包含后,只会存在一个.class文件。
		
	* 6个动作标签:
		* 动作标签:替换Java代码。简化书写,提高可读性
			<jsp:useBean> 	Person p = new Person()
				使用一个ID和一个给定作用范围和同一ID的JavaBean相关联
			<jsp:setProperty> 	p.setName("zhangsan")
				设置JavaBean的属性值
			<jsp:getProperty> 	String name = p.getName()
			    取得JavaBean的属性值
			<jsp:include>  动态包含
				请求时文件包含
				* 多个.class字节码文件
				
				
			<jsp:forward> 	转发
				接受用户输入并将请求分派给另一页面
			<jsp:param>		传递请求参数
				
		
------------------------------------------------------------------------------------------------------
			<%
   			Person p = new Person();
   			p.setName("张三");
   			String name = p.getName();
   			
   			//request.getRequestDispatcher("").include(request, response);
   			//request.getRequestDispatcher("").forward(request, response);
   			 %>
   			上面的标签可以替换为下面的
   		<jsp:useBean id="p1" class="cn.itcast.domain.Person" /><!-- 反射 -->
   		<!--
   			name对应的是setName方法
   			name---Name--setName
   			
   			内省:通过字段名称,找到对应的setter和getter方法。
   		-->
   		
   		<jsp:setProperty name="p1" property="name"  value="李四"/>
   		<jsp:getProperty  name="p1" property="name"/>
---------------------------------------------------------------------------------------------
		<!-- 动态包含 -->
   		<!-- 
   		<jsp:include page="/hello.jsp" /> -->
--------------------------------------------------------------------------------------------------
	<!-- 请求转发 -->
   		<jsp:forward page="/index.jsp">
   		
   			<jsp:param  name="msg" value="hehe"/>
   		</jsp:forward>
-------------------------------------------------------------------------------------------

		
		* JavaBean:一种符合特定规范的Java类
			1.私有所有成员变量
			2.提供公共的访问方式	setter 或 getter
			3.提供空参构造
			
			domain
			pojo
			entity
			beans
	
	* 9个内置对象:
		* 内置对象:在jsp转换后的.java文件的service方法中 声明好的 对象。在jsp中可以直接使用。
		
		* 分类:
			application:ServletContext
			session:HttpSession
			request:HttpServletRequest
			pageCotext:PageCotext (页面域)
			
			out:JspWriter
			response:HttpServletResponse
			config:ServletConfig
			page:this
			exception: Throwable
		* pageCotext:
			1.域对象:页面域
			2.获取其他八个内置对象:可以在非jsp环境使用其他的内置对象。
		
		* out和response.getWriter():
			* 在使用对象向页面输出信息时,采用out
			

早期写法

脚本

<%
  int num=100;
  System.out.println(num);
  out.print("abc");
  String s="一树梨花";
%>

三六九

三个指令

三个指令
page指令:定义JSP页面的相关信息
contentType="text/html;charset=UTF-8"  响应的类型是html 用的编码方式为UTF-8
language="java"  支持语言
pageEncoding="UTF-8" 页面编码
import 导入包
isELIgnored="false" 是否忽略el标签
errorPage 设置错误页面

六个动作标签

JSP内置的 直接使用
<jsp:forward page="/san">
    <jsp:param name="username" value="sanwa"/>
</jsp:forward>

九个JSP内置对象

JSP内置的 直接使用
1. request:HttpServletRequest
2. pageCotext:PageCotext(页面域)
3. session:HttpSession
4. application:ServletContext

5. response
6. exception
7. config
8. page
9. out

el表达式

el:JSP内置的表达式 作用是来替代<%=%>
el:
	jsp的内置表达式语言,从jsp2.0开始.
	用来替代<%=..%>
	作用:
		1.获取域中数据 ★
		2.执行运算 ★
		3.获取常见的web对象
		4.调用java的方法
	格式:
		${el表达式}
		
获取域中数据:★
	
	1.获取简单数据
		${pageScope|requestScope|sessionScope|applicationScope.属性名}
		以后经常使用:
			${属性名}:依次从pageContext,request,session,application查找指定属性,若查找到返回值,结束该次查找
				若查找不到,返回""
------------------------------------------------------------------------------------
	例子:	<%
		request.setAttribute("rkey", "rvalue");
		session.setAttribute("skey", "svalue");
		session.setAttribute("rkey", "svalue");
		application.setAttribute("akey", "avalue");
	%>
	获取request中的数据:<br>
	老方式:<%=request.getAttribute("rkey") %><br/>
	el方式:${requestScope.rkey }<br/>
	<hr>
	
	获取session中的数据:<br>
	老方式:<%=session.getAttribute("skey") %><br/>
	el方式:${sessionScope.skey }<br/>
	<hr>
	
	获取application中的数据:<br>
	老方式:<%=application.getAttribute("akey") %><br/>
	el方式:${applicationScope.akey }<br/>
	
	<hr>
	获取失败老方式:<%=application.getAttribute("aakey") %><br/>
	获取失败el方式:${applicationScope.aakey }
	
	<hr>
	便捷获取:
	${skey },${rkey },${aakey },${akey }
	<hr>
	${rkey }
----------------------------------------------------------------------------------------------
	2.获取复杂数据
		获取数组中的数据
			${域中的名称[index]}
		获取list中的数据
			${域中的名称[index]}
		获取map中的数据
			${域中的名称.键名}
-----------------------------------------------------------------------------
	<%
		//往request域中放入数组
		request.setAttribute("arr", new String[]{"aa","bb","cc"});
		
		//往request域中放入list
		List list=new ArrayList();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		request.setAttribute("list", list);
		
		//往request域中放入map
		Map m=new HashMap();
		m.put("username","tom");
		m.put("age",18);
		request.setAttribute("map", m);
	%>
	
	获取域中的数组:<br>
	老方式:<%=((String[])request.getAttribute("arr"))[1] %><br>
	el方式:${arr[1] }<br>
	<hr>
	
	获取域中的list:<br>
	老方式:<%=((List)request.getAttribute("list")).get(1) %><br>
	el方式:${list[1] }<br>
	list的长度:${list.size() }
	<hr>
	
	获取域中的map:<br>
	老方式:<%=((Map)request.getAttribute("map")).get("age") %><br>
	el方式:${map.age}<br>
	<hr>
-----------------------------------------------------------------------------------------------------------	




	javabean导航
		javabean:
			java语言编写的一个可重用的组件,
			狭义上来说就是我们编写的一个普通的java类 例如:User Person 
			javabean规范:
				1.必须是一个公共的具体的类  public class
				2.提供私有的成员变量  private String id;//
				3.提供公共访问字段的方法 get|set|is方法
					public String getId(){..}
					一旦有公共的方法之后,get|set|is之后的内容,将首字母小写,将这个东西称之为bean属性
						id就是一个bean属性
				4.提供一个无参的构造器
				5.一般实现序列化接口  serializable
		
	3.${域中javabean名称.bean属性}
---------------------------------------------------------------------
	例子 el  获取对象中字段的值
	<%
	User u=new User();
	u.setId("001");
	u.setName("tom");
	u.setPassword("123");
	
	//将u放入域中
	request.setAttribute("user", u);
	%>
获取域中javabean的id值:<br>
老方式:<%=((User)request.getAttribute("user")).getId() %><br/>
el方式:${user.id }<!-- 相当于调用 getXxx() -->

<hr>
el获取那么:${user.name }<br>
错误演示:${user.username }
-------------------------------------------------------------------------------------

//
执行运算:
	四则运算 关系(>..) 逻辑(&& ||)
	注意:
		+:只能进行加法运算,字符串形式数字可以进行加法运算.
		empty:判断一个容器的长度是否为0(array set list map),还可以判断一个对象是否为空
			${empty 域中的对象名称}
		取反 not   例如    not empty 
			${not empty 域中对象名称}
		三元运算符   ${ 3>4?"yes":"no" }
--------------------------------------------------------------------------------------------------------
例子:
<%
		request.setAttribute("i", 3);
		request.setAttribute("j", 4);
		request.setAttribute("q", "12");
		request.setAttribute("k", "k");
		
		List l=null;
		request.setAttribute("list", l);
		
		List ll=new ArrayList();
		ll.add("22");
		request.setAttribute("list_", ll);
		
		User user=null;
		request.setAttribute("bean", user);
		
		User user_=new User();
		request.setAttribute("bean_", user_);
	%>
	
	${i+j }<br/>
	${i+q }<br/>
	${q+q }<br/>
	<%-- ${i+k }<br/> --%>
	<hr>
	域中list的长度是否为0:${empty list}<br/>
	域中list_的长度是否为0:${empty list_ }<br/>
	
	<hr>
	域中的bean是否为空:${empty bean }<br/>
	域中的bean_是否为空:${empty bean_ }<br/>
	
	<hr>
	${ 3>4?"yes":"no" }<br/>
	
	${i==3 }
--------------------------------------------------------------------------------------		



//
el的内置对象(了解)
	11个
		
		pageScope
		requestScope
		sessionScope
		applicationScope
		
		param
		paramValues
		
		header
		haederValues
		
		initParam
		
		cookie★
		
	
		
	cookie内置对象:
		${cookie} 获取map{key=Cookie}
			例如:创建cookie
				Cookie c=new Cookie("username","tom");
			通过${cookie}获取相当于	
				{username=new Cookie("username","tom")}
			相当于map的key是cookie的键
			map的value是当前cookie
			
		若项获取名称username的cookie的value值(获取tom)
			${cookie.username.value}--javabean导航
		注意:
			java中Cookie的api
				getName():获取cookie的名称
				getValue():获取cookie的value值
			我们称name和value是cookie的bean属性
	
		使用cookie内置对象:
			${cookie.给cookie起名字.value}
			
		例如:
			获取jsession的值
			${cookie.JSESSIONID.value}
			
	pageContext:获取不是map集合,相当于jsp的pageContext内置对象
			在jsp页面中获取项目名
			${pageContext.request.contextPath}
			例如:<a href="${pageContext.request.contextPath }/demo8.jsp">pagecontext内置对象获取项目名(掌握)</a>
-----------------------------------------------------------------------------------------------------

JSTL


-----------------------------------------------------------------------------------------------------
jstl:
	jsp标准的标签库语言
	apache的
	用来替代java脚本
	使用步骤:
		1.导入jar包 (jstl.jar和standard.jar)
		2.在页面上导入标签库
			<%@taglib prefix="" uri=""%>
			
			例如:
				<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
	jstl的分类:
		core:核心类库 ★
		fmt:格式化|国际化
		xml:过时了
		sql:过时了
		函数库:很少使用
	core:掌握
		★c:if
		★c:forEach
		
		
		
	★c:if 判断
		<c:if test="${el表达式}">满足的时候输出的内容</c:if>
		例如:
			<c:if test="${3>4 }">
				3大于4
			</c:if>
			<c:if test="${3<=4 }">
				3不大于4
			</c:if>
			//

例子 比如可以给我们登陆成功页面 加上判断
	<c:if test="${not empty name }">

	 ${name}欢迎你!

	</c:if>

	<c:if test="${empty name }">

	 
		你尚未登陆请重新登陆<a href="/ServletDemo/login.jsp">点击登陆</a>

	</c:if>
---------------------------------------------------------------------------------------------------------


	★c:forEach 循环
		格式1:
			 <c:forEach begin="从那里开始" end="到那里结束" step="步长" var="给变量起个名字" varStatus="循环状态变量">
				${i }--${vs.count }--${vs.current }<br>
			 </c:forEach>
			 
			varStatus:用来记录循环的状态
				常用的属性:
					count:记录次数 从1开始
					current:当前遍历的内容
					index: 索引 从0 开始
		例如:
			<c:forEach begin="1" end="20" step="2" var="i" varStatus="vs">
				${i }--${vs.count }--${vs.current }<br>
			</c:forEach>
		
		格式2:
			<c:forEach items="${el获取域中的容器}" var="n">
				${n }
			</c:forEach>
			
			例如:
				//遍历list
				<c:forEach items="${list }" var="n">
					${n }
				</c:forEach>
				
				//遍历map
				 <c:forEach items="${map }" var="en">
					${en.key }-- ${en.value }<br/>
				  </c:forEach>
-----------------------------------------------------------------------------------
例子:
	<%
		ArrayList<Student> list = new ArrayList<Student>();
		list.add(new Student("张三", "23"));
		list.add(new Student("李四", "24"));
		list.add(new Student("王五", "25"));
		list.add(new Student("赵六", "26"));

		request.setAttribute("list", list);
	%>

	<table height=300 width=400 align=center>
		<tr bgcolor=green>
			<th>编号</th>
			<th>姓名</th>
			<th>年龄</th>
		</tr>
		<c:forEach items="${list }" var="stu" varStatus="s">
			<c:if test="${s.count%2==0 }">
				<tr bgcolor=red>
			</c:if>
			<c:if test="${s.count%2!=0 }">
				<tr bgcolor=yellow>
			</c:if>

			<td>${s.count }</td>
			<td>${stu.name }</td>
			<td>${stu.age }</td>
			</tr>
		</c:forEach>

	</table>
-----------------------------------------------------------------------------------------------------------------
	* c:url:
		功能:	
			* 自动补项目路径
			* 自动url重写
				<a href='<c:url value="/foreach.jsp" />'>foreach.jsp</a>

---------------------------------------------------------------------------------------------------------------------------
 	<%
  		HttpServletRequest req = (HttpServletRequest)(pageContext.getRequest());
  		String contextPath = req.getContextPath();
  		session.setAttribute("aaa", "aaa");
  	 %>
  	<%=contextPath %><br>
  	${pageContext.request.contextPath}
    		<a href="${pageContext.request.contextPath}/foreach.jsp">foreach.jsp</a><br>
    		
    		
    		<a href='<c:url value="/foreach.jsp" />'>foreach.jsp</a>


--------------------------------------------------------------------------------------------------------------------
 <%--使用标签 --%>
    <%--set标签 :保存数据(保存到域中)默认保存到page域 --%>
    <c:set var="name" value="rose" scope="request"></c:set>
    
    <%
    	String msg = null;
    	pageContext.setAttribute("msg",msg);
     %>
    
    ${msg }
    <br/>
    <%--out标签: 获取数据(从域中) 
    default: 当value值为null时,使用默认值
    escapeXml: 是否对value值进行转义,false,不转义,true,转义(默认)
    --%>
    <c:out value="${msg}" default="<h3>标题3</h3>" escapeXml="true"></c:out>
    
    <hr/>
----------------------------------------------------------

 <%--choose标签+when标签+otherwirse标签: 多条件判断 --%>
    <c:set var="score" value="56"></c:set>
    
    <c:choose>
    	<c:when test="${score>=90 && score<=100}">
    		优秀
    	</c:when>
    	<c:when test="${score>=80 && score<90}">
    		良好
    	</c:when>
    	<c:when test="${score>=70 && score<80}">
    		一般
    	</c:when>
    	<c:when test="${score>=60 && score<70}">
    		及格
    	</c:when>
    	<c:otherwise>
    		不及格
    	</c:otherwise>
    </c:choose>
--------------------------------------------
    <%-- forToken标签: 循环特殊字符串 --%>
    <%
    	String str = "java-php-net-平面";
    	pageContext.setAttribute("str",str);
     %>
    
    <c:forTokens items="${str}" delims="-" var="s">
    	${s }<br/>
    </c:forTokens>
    
    <%--redrict:重定向 --%>
    <c:redirect url="http://www.baidu.com"></c:redirect>

--------------------------------------------------------------------------------------------

* MVC模式 一种前辈们总结出来的开发模式
	* M :Model 模
		* 封装数据,处理业务逻辑
	* V : View 视图
		* 界面显示
	* C :Controller 控制器
		* 调度
	
	

* JavaWeb的三层架构
	* org.westos.web.servlet	:web层
	*  org.westos.service:service层
	*org.westos.dao:dao层
	* org.westos.domain : JavaBean
	*  org.westos.util:工具包
	org.westos.test:测试包



©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页