JSP基础

jsp

jsp

特点:
	java server pages 服务器页面
	以.jsp为后缀的文件,内容以标签为主体,可以内嵌java代码,本质上是Servlet。
	可以生成动态HTML

jsp的乱码问题

创建jsp页面时,默认的编码为ISO-8859-1,会出现页面乱码

修改JSP默认编码
	window->
	preference->
	搜索栏搜索JSP->
	JSP Files->
	Encoding->
	找到UTF-8
    重新创建JSP即可

JSP引擎

统一管理和允许Web应用程序的软件,最常见的是Tomcat。
当浏览器要访问一个JSP文件时,JSP文件会经过JSP引擎转化为一个Servlet,被编译成Class然后通过class生成对象给用户进行响应。

JSP的组成

1. 静态内容
2. 指令
3. 表达式
4. 小脚本
5. 声明区
6. 注释
7. 动作

静态内容

一行一行翻译成out.write(“前端内容”);

JSP注释

1.隐藏注释:客户端不可见
		语法格式: <%-- comment --%>
		comment为要添加的文本注释内容。
2.HTML注释:客户端可见
	<!-- -->
3.jsp脚本注释:// /* */
	在JSP程序中,也可以遵循Java语言本身的注释规则对代码进行注释,这样的注释和隐藏注释相似,在发布网页时完全忽略,在浏览器的源文件窗口中看不到。

语法格式

声明|声明区

<%!
	声明区(等于在类里面)
%>

<%!
	private String name ="zpw";
	public void print(){
		System.out.println(name);
	}
%>

小脚本|java代码

<%
	java代码
	注意:不能定义方法
%>
<%
	show();输出的内容在后台
 %>

表达式

向页面输出内容
<%= %>
<%=name %>

JSP三大指令

1.与页面相关的page指令
	page指令用来定义JSP文件中的全局属性,它描述了与
页面相关的一-些信息,其作用域为它所在的JSP文件页面
和其包含的文件。
	page指令作用范围是整个JSP页面。为了JSP程序的可读
性以及好的编程习惯,最好把它放在JSP文件的顶部。
	在同一个JSP页面中可以有多个page指令。 在使用多个
page指令时,其中的属性除import属性外只能使用一次。

	常用属性:
		1.language属性:用于指定JSP页面中使用的脚本语言,其默认值为Java。
		2.extends属性:用于指定JSP编译器父类的完整限定名,此JSP页面产生的Servlet将由该父类扩展而来。
		3.import属性:用于导入JSP页面使用的Java API类import属性是所有page属性中唯一可以多次设置的属性,用来指定JSP页面中所用到的类。
		4.session属性:用于指定是否可以使用session对象,若允许页面参与HTTP会话,就设置为true ,否则设为false ,其默认值为true。
		5.errorPage属性:用于指定错误页面,无默认值。当页面出现-个没有被捕获的异常时,错误信息将以throw语句抛出,而被设置为错误信息网页的JSP页面,将利用exception隐含对象,获取错误信息。relativeURI 默认设置为空,即没有错误处理页面。
		6.contentType属性:用于指定内容MIME类型和JSP页面的编码方式。对于普通JSP页面,默认的contentType属性值为"text/html;charset=ISO-8859-1"。对于JSP文档,默认的contentType属性值为"text/html;charset=ISO-8859-1 "。
		7.pageEncoding属性:用于指定JSP页面的编码方式,默认值为ISO-8859-1 ,为
		支持中文可设置为UTF-8。

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

2.引入文件的include指令
	将一个外部文件嵌入另一个JSP或者HTML,同时解析JSP页面的语句。
	<%@ include file="引入页面所在路径">

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

3.taglib指令
	使用标签库定义的自定义标签
	
	uri ( Uniform Resource Identifier ,统一资源标识符)属性用于
	指定标签库的存放位置,并告诉JSP引擎在编译JSP程序时如何处理指定标签库中的标签。
	prefix属性用于指定标记库中所有动作元素名中使用的前缀,无默认值。
	
	例:<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSP的六大动作

常用的动作有6种:

include
		<jsp:include>动作用来把指定文件插入正在生成的页面中。
		语法格式:
		< jsp:include page="relative URL" flush= "true" />

		指令与动作的区别:
		include指令执行时将被导入页面的jsp代码完全融入,两个页面融合成一个Servlet ;而<jsp:include>动作则在Servlet中使用include方法来引入被导入页面的内容。因此include指令执行时不需编译,速度快;<jsp:include>动作需要加载执行,速度慢。


useBean,setProperty,getProperty

		<jsp:useBean> 动作用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,能够实现JavaBean组件重用。

			语法格式:
				<jsp:useBean id="beanInstanceName" scope: ="page | request |session | application class= ="package.class"type=" package.class"beanName= ="package.class"/>
				
				1.id属性:指定该JavaBean的实例名称,不可接受动态值。如果能够找到id和scope相同的Bean实例, <jsp:useBean> 动作将使用已有的Bean实例而不是创建新的实例。
				2.scope属性 :指定Bean作用域范围,不可以接受动态值,可选作用域有: page、request、session和application。
				3.class属性:指定Bean的类路径和类名,不可接受动态值,这个class不能是抽象的。
				4.type属性:指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。变量的名字是由id属性指定的。
				5.beanName属性:指定bean的名字,可以接受动态值。beanName属性必须与type属性结合使用,不能与class属性同时使用。

			
		<jsp:getProperty>动作获取指定Bean属性的值,转换成字符串,然后输出。
		<jsp: setProperty>动作用来设置、 修改已经实例化的Bean中的属性值。

			




forward
			<jsp:forward>用于引|导客户端的请求到另-个页面或者是另一个Servlet。
			
			语法格式:
					<jsp:forward page="relativeURL" />


param
		<jsp:param>动作可以用于<jsp:include>、< jsp:forward>和<jsp:plugin>动作体中,为其他动作提供附加信息。
		语法格式:
				<jsp:param name="paramName" value=" param Value"/>
				name属性用于指定参数名称,不可以接受动态值。
				value属性用于指定参数值,可以接受动态值。

例:	
	<jsp:useBean id="user" class="entity.User" scope="request"></jsp:useBean>
	<jsp:setProperty property="username" name="user" value="李四" />
	<jsp:setProperty property="usex" name="user" value="男"/>

	<jsp:getProperty property="username" name="user"/>
	<jsp:getProperty property="usex" name="user"/>
	
	<jsp:forward page="forward.jsp">
		<jsp:param value="xiaomi mix2" name="phone"/>
		<jsp:param value="2000" name="price"/>
	</jsp:forward>

JSP内置对象

九大内置对象

out:
out对象可以调用如下方法把数据输出到网页,上,并能够控制管理输出缓冲区和输出流。
out对象主要用于向客户输出各种数据,同时管理应用服务器上的输出缓冲区(buffer)。

request:

	作用:请求对象,接受通过HTTP协议传送到服务器的数据。
	类型:HttpServletRequest

	常用方法:
		1.getParameter(String name):用于获取客户端传送给服务器端的指定请求参数的值(获取用户提交的表单信息)
		2.forward(String url):转发
		3.getParameterValues(String name):用于获取客户端传送给服务器端的指定请求参数的所有值,返回值是字符串数组。
		4.getAttribute (String name):用于获取request对象中指定属性的值,若指定属性不存在,就返回null。
		5.setAttribute(String name, Object obj):用于设置request对象中的属性及其属性值。
		6.getCharacterEncoding() 编码,防止乱码
response:
	作用:响应对象,将JSP容器处理过的对象传回到客户端。
	类型:HttpServletResponse
	常用方法:
			1.sendRedirect():用于重新定向客户端的请求。
			2.setCharacterEncoding()用于设置响应的字符编码方式。
			3.addCookie(Cookie cook):用于添加Cookie对象,保存客户端的相关信息。可以使用request对象的getCookies()方法获取该Cookie对象。
session:
	作用:会话对象,用于保存该用户的信息,跟踪用户的操作状态。
	类型:HttpSession
	常用方法:1.invalidate() 销毁当前的session
			2.getValueNames() 返回一个包含此SESSION中所有可用属性的数组
			3.String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号
			4.setMaxInactiveInterval() session对象有效活动时间
application:
	作用:application对象保存Web应用程序中公有的数据,可存放全局变量。服务器启动后自动创建application对象,此对象将一直有效,直到服务器关闭。不同用户可以对该对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此对象的访问。

	
	Application对象和session对象的区别:
	在使用session对象时,-一个客户对应-一个session对象,而使用application对象时, 在一-个应用程序中的JSP文件共享一 个application对象。

		
pageContext:
	作用:对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。
	
config:对象的主要作用是取得服务器的配置信息。

page:
	作用:指的是当前JSP页面对象;

exception:
			exception对象需要配合page指令一起使用,在page指令中errorPage属性指定某-个页面为错误处理页面,把所有的错误都集中该页面进行处理,错误页面中pageisErrorPage属性应设为true。

四大作用域:

pageContext: 一个页面
request:一次请求(可能包含多个页面)
session:一次会话(可能包含多个请求)
application:一次服务(可能包含多个会话)



常用方法:
		1.setAttribute(key,value)
		2.getAttribute(key)
		3.remove(key)

EL表达式

EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。



使用方式
1.取基本数据类型和或字符串:${key}
2.取对象属性:${对象.属性名}
3.取数组/集合对象:${数组[下标].属性名称}

执行表达式:
	${1+1} 
	${empty user}
	${user==null?true:false}

EL获取数据

依次从四大作用域中获取数据:
pageContext
request
session
application
存在就输出,不存在就往下获取
若都不存在,输出空字符串

jstl标签库

taglib

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
		常见jstl标签:
				test :条件
				1.<c:if test="${判断的条件}">显示的内容</c:if>
					
				2.<c:forEach ></c:forEach> 迭代标签,接收多种集合类型
					例如:<c:forEach var="i" begin="1" end="5" step="12">${i}</c:forEach>

					items: 要被循环的信息
					varStatus: 循环状态的变量名称
					begin: 开始的元素
					end:结束的元素
					step:步长
					var :当前条目的变量名称
					
				3.<c:choose> 父标签 类似于switch case 结构
						<c:when test="${判断的条件}"></c:when>子标签 判断条件是否成立
						<c:when test=""></c:when>
						......
						<c:otherwise></c:otherwise>子标签 c when 判断为False时
				 </c:choose>
posted @ 2020-03-20 16:18  行走的追随者  阅读(268)  评论(0)    收藏  举报