论坛首页 入门技术论坛

JDBC与JSP简单总结

浏览 1649 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-20   最后修改:2009-09-21

动态脚本语言,运行在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();//用于指明cookie的生存时间,如果不指定的话,则窗口关闭cookie
  session的实现,默认是使用cookie机制
  必须要在response.addCookie()前调用
  cookie和session的比较见后
 application: 常用的就是操作attribute,ServletContext
 out : 是PrintWriter的子类,JspWriter
  println(0, newLine()
 pageContext : 操作是页面里的属性,不要和page搞混了
  setAttribute等操作属性的方法
  可以获得其他内置对象
   getOut
   getSession()
 4.5 内置对象的几个特别说明
4.5.1
 forward和sendRedirect的区别
  前者是服务器内部跳转,后者是重定向
  前者地址栏里不会改变,后者会
  前者带着request跑,后者不带
  前者只能访问当前应用,其绝对路径写法不带RootURL
   后者可以访问当前web服务器上的其他应用,其绝对路径比较要带上rootURL
  前者跳转的时候,并不改变其相对路径的起始目录,所以在写路径时,尽量优先考虑欢乐能几朝路径
 
4.5.2 cookie和 session的区别
 前者是文件,保存在磁盘,后者是数据,存在内存
 前者的生存周期,由setMaxAge决定,不随应用的关闭而消失
 后者生存周期只在当前窗口内,窗口关闭则over
 前者保存在客户端,后者保存在服务端
 前者不安全,后者相对安全,所以牵涉隐私信息,不要放cookie里
4.5.3 中文问题的处理
 要区分是post还是get
 对于post方式,我们需要调用request.setCharacterEncoding()转码
 对于get方式,需要通过getBytes()逐个来转码
 对于sendRedirect的时候,要特别记得要多转一次或者使用URLEncoding类来转一下
 所有页面要使用统一的pageEncoding设置,推荐GBK或者UTF-8
 对于tomcat,我们有一些特别的设置,可以简化中文问题
  conf/server.xml中的<connector>里增加URIEncoding="xx"或者useBodyEncodingForURI="true"
  增加完毕后,只需要在每个页面上统一使用request.setCharacterEncoding设置.
  

 

 

 

 

 

 

 

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics