日期:2014-05-16 浏览次数:20503 次
动态脚本语言,运行在web服务器上
首先JSP页面会被转成JAVA文件,并编译马class,再运行
1,JSP基本部分
<%! %> 定义段,常在其中定义方法和属性
注意:1,尽量不在其中定义属性,因为牵涉到线程数据同步问题
???? 2,里面的方法一般都定义成private的
???? 3,如果一定要定义属性,那么对这个属性的访问方法就要加上synchronized关键字
<% %>
JSP脚本,在一个页面中,不管分成多少个部分的脚本,这些脚本最终都会被生成在JAVA文件的同一个方法中,这个方法和在定义段中定义的那些方法是并列的
在这些脚本中,可以访问一系列内置对象,但在定义段中不可以
<%= %>
JSP表达式,这个表达式等同于out.println()方法,这个表达式是独立的,不能镶在<% %>
<%--? --%>
JSp注释 ,不会生成到客户端,请和html的注释比较
-----------------------
2.JSP指令
<%@ page %> 用于设置当前页面一系列基本信息
?import:用于引入在当前页面中需要的Java包,不同包之间用','隔开
??唯一可以重复出现多次的page属性
?pageEcoding:指定当前页面编码,请参照中文问题
?language java
?isErrorPage:在当前页面中,是否可以使用exception内置对象
?errorPage:当前页面如果产生错误后,转往哪个页面
?autoFlush:是否自动刷出缓存
<%@ include %> file属性指定要引入的文件
?这个文件是被引入后,再和当前页面一起去生成java文件,而不是先单独运行后把页面?
?结果返回.
?请注意和<jsp:include>之间的区别
<%@ taglib uri= prefix %> 为了引入标签库
?uri部分指明了标签库或者标签文件tld所在位置
?prefix是标签的前缀,使用上采用<c:out>
--------------------
3.JSP的动作
3.1 <jsp:include page="" >把page的页面先执行后,再把最后返回的结果引入当前页面,对于需要动态的部分,往往采用这样的方式.
?<jsp:include page="" ></jsp:include>如果这样写,意味着当中一定要有<jsp:param>来传递参数
?<jsp:include page=>
??<jsp:param name= value= />
?</jsp:include>这是正传递参数的方式
3.2 <jsp:forward page=>跳转到page所在的页面
?跳转是服务器内部的跳转,或者叫转发,不是重定向
?地址栏地址不会变化
?request会一直被保留
?也可以结合<jsp:param>
?注意和response.sendRedirect进行比较
?这个动作等同于request.getRequestDispatcher("xx").forward(request,response)
3.3 <jsp:useBean><jsp:setProperty><jsp:getProperty>操作javabean的
?
?<jsp:useBean id= class= scope= />
?可以定义任何类
? class必须是带包名的类名,哪怕已经引入过了
?这个操作相当于做了两样事情,一个是在scope所对应的attribute中set了一个名字为id="xx"的属性,另一个是定义了一个jsp中的变量,可以在小脚本直接访问
? <jsp:setProperty name= property="*|xxx" param= value= />填充一个由<jsp:useBean>所定义的javabean对象.填充的方式就是调用setter方法
?name和<jsp:useBean>的id相同
???? 四种填充方式:
?name= property="*" 把所有提交来的表单中的内容填充到对应bean的同名属性中,并做类型转换
?name= property="xx"把表单中和xxx 相同的部分,填充到xx属性
?name="xx" property="bb" param="aa" 把表单中的aa和bean中的bb属性相对应
?name="x" property="xx" value="zxxx" 把value中的值填充到xxx属性,value中的值可以是一个单纯的字串,也支持jsp表达式和el
?param和value不能见面
<jsp:getProperty> 根据bean的name来调用对应的getter方法
-------------------
4. jsp的内置对象
4.1 jsp中的内置对象有作用域,分别为page,request,session,application
?jsp的内置对象一共有9个,分别是
?1, pageContext(page),request(request),session(session),application(application)
??都可以setAttribute和getAttribute
?2,剩余的5个,作用域都是page
??response,out,cookie,page,config最后两个是和servlet相关的
4.2 作用域
?作用域的应用很广泛,EL,JSP动作都有作用域,但说到底,都是attribute的存活范围
?page:当前页面
??include指令
?request:
??forward跳转
??include动作
??不包括重定向
??最常见的,从一个表单提交到当前页面的信息
?session:
??在当前页面打开的时间内都有效
??包括重定向
??但是页面关闭就失效,还可能在时间到期和手动调用invalidate方法后失效
?application:
??在整个应用存在期间都有效,包括重新打开窗口
??但不等同于把tomcat启动起来
??把应用重新部署,application就失败了
4.3 内置对象分别说
?request:获得表单提交的内容
??getParameter(); // string
??getParamterValues(); // string[]长用于获取多选的内容
??获得表单内容时候,记得先判断是不是null
??为了规避nullProinterException我们常操作的时候把常量放前面肯定不会是null的放前面
??操作attribute,setAttribute,getAttribute,removeAttribute();
??获得http的信息:getHeaders("user-Agent");getProtocol()
??获得当前应用的一些信息:getContextPath获得RootURL,常用于拼接绝对路径
???getServletPath RootURL如果面的那些访问路径
???getRemoteAddress
???gethost();
??setCharacterEncoding(),设置字符集转换
??和cookie交互
???getCookie :返回Cookie[], 需要遍历这个数组,才能取得需要的cookie内容
???替代方案是使用EL表达式${cookie.xxx}
?response对象:不能操作属性
??然后有一些set方法
??setContentType:指定产生的页面的一些类型和编码
??sendRedirect();//重定向,见后面的重定向和转发的比较
??encodeURL : 在cookie失效的情况下,通过此方法来使得session仍然可用
??addCookie : 在本地生成一个cookie文件,并保存对应cookie对象
?session : 会话信息,常用于保存用户登录,购物车等等.
??setAttribute等操作属性的方法
??invalidate方法来使得当前session失效
?cookie : 其实是通过上面的response和request来操作的.
??Cookie cookie = new Cookie("键", "值");
??cookie.setMaxAge();//