JSP

JSP

jsp是服务器技术 java server pages

JSP,EL表达式的入门(要用)

Servlet/JSP 是两种动态的web资源的两种技术。

使用Servlet生成HTML的页面

response.getWriter("<form action='' method='post'>")
response.getWriter("<input type = 'text' name='username'>");

JSP简介

java server pages	java服务器端的的网页们,是在服务器端执行的
JSP不仅可以写html+java代码+jsp自己的代码
jsp的运行原理(****):jsp -- 翻译成Servlet -- 编译 -- 访问

JSP的脚本元素(jsp可以编写java代码)

<%!   %>	:定义类,定义变量,定义方法(不常用)	成员变量
<%=   %>	:输出语句(输出到页面,不能有分号)
<%	  %>	:定义变量,语句		局部变量在server方法里面

EL快速入门

获取域对象中的内容	request.setAttribute("xx","yy");
${xx}

两个会话技术

会话:打开浏览器,可以访问web资源。多次访问web资源,关闭浏览器,整个过程为一次会话

例子:
购买商品
用户点击超链接通过了一个servlet购买了一些商品,程序应该保存用户购买的商品
以便于用户点结账servlet时,结账servlet可以得到用户商品为用户结账

把商品存入到ServletContext获取request域中呢?

cookie

显示上次的访问时间

第一次访问,输出欢迎,在服务器端,记录当前的时间,把当前的时间通过cookie回写到浏览器
	判断是否是第一次访问呢?
		通过指定名称来查找,如果没找到,就是第一次访问

	回写到浏览器
		 void addCookie(Cookie cookie)  Cookie(String name, String value) 
	
	获取cookie的内容
		Cookie[] getCookies()
	

第二次访问,输出上次访问时间,获取时间,可以把时间显示到页面上,记录当前时间,再把回写到
浏览器,输出上次的访问时间

Cookie的api
	构造方法	Cookie(String name, String value)
	String getName()	获取cookie的名称
	String getValue()  获取cookie的值
	
	void setMaxAge(int expiry) 	:设置有效时间
		失效的cookie		setMaxAge(0);	前提条件:设置有效路径(和之间设置过相同)			

	void setPath(String uri) 	:设置有效路径
		默认的路径()
			配置 /last	默认路径	/day11
			配置	/servlet/last	默认路径	/day11/servlet

	void setDomain(String pattern)	:设置有效域名
		www.sina.com.cn
		sports.sina.com.cn
		xxx.sina.com.cn
		设置有效域名	setDomain(".sina.com.cn")

会话级别的Cookie:默认保存再浏览器内存中
持久的cookie:把cookie保存早磁盘上,setMaxAge()

显示用户上次访问过的商品信息(需求)

浏览记录

	* 1.获取请求的参数
	 * 2.获取cookie,通过名称(自己指定)查找cookie
	 * 3.如果cookie==null,第一次访问
	 * 		如果是第一次访问,创建cookie,回写浏览器
	 * 4.如果cookie!=null,不是第一次访问
	 * 		如果不是第一次访问,说明我的cookie中已经存在id
	 * 			判断,当前id是否已经存在cookie的中value
	 * 			如果存在,不用操作
	 * 			如果不存在,在后面追加(product = 1,2)
	 * 5.重定向商品页面

session(服务器端)

cookie基于客户端,不安全,并且有大小和个数的限制
服务器可以为每个用户浏览器创建一个会话对象(session对象),一个浏览器独占一个session对象(默认情况)

session域对象,范围一次会话范围,存个人相关的数据。
	 void setAttribute(String name, Object value) 
	 Object getAttribute(String name) 

	 String getId()  
	 void invalidate() 3

完成简单的购物车

购物车	Map<String,Integer> cart 	把购物车存入seesion中

获取数据
判断是否是第一次访问  session.getAttribue("cart");
	如果是第一次访问,cart创建一个购物出,放入商品的名称和数量

	如果不是第一次访问,cart!=null,判断是否包含该商品?
		如果包含,数量拿出来,++,放回去,存入seesion中

		如果不包含,正常放入到购物车中,存入seesion中

session的追踪

session.getId()

session的创建和销毁

第一次访问资源,调用request.getSession(),常见session

销毁:

非正常关闭服务器
session的过期,默认是30分钟
<session-config>
	<session-timeout>30</session-timeout>
</session-config>
调用session.invalidate()		手动销毁session

session的域对象

ServlerCOntext:		代表整个web应用,数据库链接
session				一次会话,存放个人的信息
request				一次请求,存放错误的处理

jsp的设置

设置jsp文件的打开方式:window-选项--General--Editors--文件的管理--选择MyEclipes JSP Editor --default

设置编码windows--搜索jsp--找到utf-8

JSP页面注释

HTML的注释		全程存在
JAVA的注释		之间都存在,在html阶段不存在
jsp注释	<%-- JSP的注释--%>		只存在jsp文件阶段,以后就不存在了

JSP指令元素

语法:<%@ 指令元素 属性名=属性值 %>
page	设置jsp的属性
	注意:import属性可以出现多次。其他属性只能执行一次
	属性:
		language	:jsp文件允许嵌入的语言。只支持一种语言java
		extends	:jsp翻译成Servlet文件,servlet继承的一个类,默认
				  JspHttpBase
		*session	:默认值是true,可以直接使用session。设置false,
					不能直接使用
		*import	:引入jar包(使用多次)
		buffer	:设置缓冲区的大小		默认8kb
		aotoFlush	:设置默认刷新缓冲区(不要修改)
		errorPage:	指定错误页面
		isErrorPage:	设置值,可以是exception对象
		*contentType:	:服务区端输出所有类容采用的编码
		*pageEncoding	:jsp翻译成Servlet文件时采用的编码
		*isELIgnored	:是否忽略EL表达式i(false,不忽略,true,
						忽略)


include	包含页面(页面布局)
	语法:<%@ include file="包包含文件的地址(静态包含)" %>
		可以把多个页面放在一个页面中
		静态包含的原理:body.jsp->body_jsp.java
			在翻译成body_jsp.java之前,把全部内容都复制在一起
taglib	引入标签库文件
	语法:<%@ taglib%>
	属性	
		uri:引入标签库的名称
		prefix:标签库的前缀名

配置全局的错误页面

在web.xml中配置
 <error-page>
  	<error-code>404</error-code>
  	<location>/jsp/404.jsp</location>
 </error-page>

 <error-page>
  	<error-code>500</error-code>
  	<location>/jsp/500.jsp</location>
</error-page>

JSP的内置对象(9个)

request	respinse	session	apolication out pageContext	page
config	exception

内置对象			真实对象				方法
request			HttpServletRequest	setAttribute()	getAttribute()
response		HttpServletResponse	addCookie()	getWriter()
session			HttpSession			setAttribute()	getAttribute()
application 	ServletContext		setAttribute()	getAttribute()
config			ServletConfig		getInitParameter() getInitParameterNames()

exception		Throwable			getMessage()
	和异常有关
	前提条件:isErrorPage="true"
page			Object				(不使用)
	当前页面的对象
out				JspWriter			write()	print()
	JspWriter(缓冲区也要先写入response.getWriter()的缓冲区中)	
	<!-- BBBB HELLO AAA CCCC -->
	<%= "HELLO"%>
	<% out.print("AAA");%>
	<% response.getWriter().print("BBBB")%>
	<% out.print("CCCC")%>
pageContext(域对象)		PageContext			getXXX()
	是一个域对象
		自己存取值
		向其他的域中存取值
			setAttribute(String name,Object value,int scope)
			getAttribute(String name,int scope)
			findAttribute(String name)
	
	可以获取其他8个对象	
		编写框架或者通用性较高的代码。

在jsp的时候(4个域对象)

ServletContext	整个web应用
session			一次会话
request			一次请求
pageContext		当前页面

jsp的标签(jsp的动作)

<jsp:forward>:转发
	属性:page	要转发的页面
<jsp:include>:页面的包含(动态包含)
	属性: page	包含的页面
		原理:自己编译自己的文件,拿到java文件后在组合在一起
<jsp:para>:	传递参数
	属性:name	参数名称	value	参数的值

	
把数据封装在JavaBean中(jsp页面中完成)
		<jsp:useBean>
		<jsp:useBean id="u" class="cn.itcast.bean.User"></jsp:useBean>
		<jsp:setProperty property="username" name="u"/>
		<jsp:setProperty property="password" name="u"/>
		
		<jsp:getProperty property="username" name="u"/>
		<jsp:getProperty property="password" name="u"/>
		<jsp:setProperty>
		<jsp:getProperty>

内省(Introspector)

通过内省技术可以访问bean类的方法
基于反射

使用BeanUtils工具类

导包:

commons-beanutils-xxxxx.jar
commons-logging-xxxxx.jar

默认把字符串转换成日期类型
编写一个类,实现Converter接口,重写给方法。把字符串转换为日期
在封装之间进行注册。ConvertUtils.register(Converter converter,class clazz)

EL表达式

语法

${}

获取(域对象中)数据

<%
	pageContext.setAttribute("name", "李四");
	request.setAttribute("name", "张三");
%>


${ requestScope.name }

<h4>域中数组的值</h4>
<%
	String[] arrs = {"张三","李四","王五","赵六"};
	request.setAttribute("arrs", arrs);
%>
${ arrs[2] }

<h4>域中的集合的值</h4>
<% 
	List<String> list = new ArrayList<String>();
	list.add("a");
	list.add("b");
	list.add("c");
	request.setAttribute("list", list);
%>
${ list[1] }

<h4>域中Map集合的值</h4>
<%
	Map<String,String> map = new HashMap<String,String>();
	map.put("a","aa");
	map.put("b","bb");
	request.setAttribute("map", map);
%>

${map.b }
<!-- 特殊字符	${map["b.c"]} -->
<!-- 获得域对象的值 $uList[2].username} -->

逻辑运算

<h4>EL的运算</h4>
<%
	request.setAttribute("n1", 10);
	request.setAttribute("n2", 10);
	request.setAttribute("n3", 10);
	request.setAttribute("n4", 10);
%>

${n1+n2 }

<h4>关系运算</h4>
<h4>大于</h4>
${ n1 > n2 }	${ n1 gt n2 }

<h4>小于</h4>
${ n1 < n2 }	${ n1 lt n2 }

<h4>等于</h4>

${ n1==n2 }		${ n1 eq n2 }

<h4>不等于</h4>
${ n1!=n2 }		${ n1 ne n2 }

<h4>大于等于</h4>
${ n1>=n2 }		${ n1 ge n2 }

<h4>小于等于</h4>
${ n1<=n2 }		${ n1 le n2 }

<h3>逻辑运算</h3>
<h4>与</h4>
${ n1 > n2 && n3>n4 }		${ n1 > n2 and n3>n4 }

<h4>或</h4>
${ n1 > n2 || n3>n4 }		${ n1 > n2 or n3>n4 }

<h4>非</h4>
${ !(n1 > n2)  }		${ not(n1 > n2) }

获取WEB开发中的对象

pageScope
requestScope
sessionScope
application

param	获取请求参数			getParameter()
	${ param.username }  当表单提交后
paramValues	获取请求的参数	getParameterValues()

header
headerValues

initParam		获取全局的初始化参数可以去web.xml里面配置
cookie		获取cookie
	${cookie.last.value}

pageContext
	${pageContext.request.remoteAddr }		
	//比较pageContext.getRequest().getRemoteAdder

调用java的方法

JavaBean

什么是JavaBean?

定义
	必须要有一个无参的构造方法

	属性私有化

	私有化的属性必须通过public 类型的方法暴露给其他程序,并且方法的命名
	也要遵循一定的规范(getXXX() setXXX())

作用:封装数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值