jsp开发技术
一:
指令语句:用来提供整个jsp网页的相关信息。
<%@ 指令名 属性1=“属性值” 属性2=“属性值” 属性n=“属性值”%>
jsp程序片段(包括jsp声明):
<% java程序 %>
jsp表达式:
<%=任何java逻辑取值 %>
二:
jsp隐含对象:
Servlet类的_jspServlet()方法定义了九个jsp隐含对象,编写jsp时可以利用这9个隐含对象与jsp的执行环境进行互动。
servlet相关的隐形对象
page:代表jsp本身,是当前jsp转换成的servlet类的实例,能调用servlet类中定义的方法。
config:被servlet容器用来给servlet初始化时给其传递配置信息,该对象存放着servlet初始的数据结构。
I/O相关的隐形对象
out:该对象把结果输出在网页上,用来管理控制buffer缓冲区和输出流outputstream
request:包含所有请求信息(用户主机信息等)。
response:主要用于将后台处理结果传回前台。 常用方法还有addCookie(Cookie cookie);
Context相关的隐形对象
session:表示目前某个用户的会话状态。 常用方法:getId()——取得session的id
application:用来取得或更改servlet的设定。
pageContext:能够存取其他隐含对象
error相关的隐含对象
三:
对象的范围(4种)
每个对象都有一个范围属性,该属性规定了什么时间内,哪些页面可以访问这些对象。
1:页面范围
此范围对象只能在创建对象的页面中访问。这些对象被绑定到pageContext对象中,可以调用pageContext对象的getAttribute()来访问page范围的对象。
2:请求范围(其他范围都是一个对象在该范围内,此范围需要两个对象来共同完成)
一次请求响应(所以说的不包含重定向)可能需要跨越多个servlet,两种转发方法都能实现:faword和include,两种方法的区别是,faword转发后,转发到的servlet的reponse不能使用前一个servlet的响应体信息,而include则可以。
3:会话范围
JSP容器为每一次会话创建一个session,从开启浏览器到关闭浏览器可以在不同页面访问这个session。
4:应用范围
在web应用程序运行期间,所有页面都可以访问application对象。
对象属性的范围(4种)
权限修饰符用于定义:某对象的各个属性,行为分别对其他类文件的能见度。(在其他类中可以访问该类对象的哪些属性,可以操作该类对象的哪些行为。)
对于一类对象的属性和行为,允许四种修饰符:public,无修饰符,protected,private
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
javaBean的三要素
javaBean类必须有一个无参的构造方法
javaBean类属性应定义为私有
javaBean类定义set,get方法来对属性进行操作
private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
PageContext _jspx_page_context= _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
Counter test = null;
test = (Counter)_jspx_page_context.getAttribute("test", 2);
if (test == null) {
test = new Counter();
_jspx_page_context.setAttribute("test", test, 2);
}
当启动servlet容器(Catallina)时,容器先查找配置文件web.xml,根据配置的每一个servlet创建一个实例(多线程单实例模式,可以让同一个servlet类可以创建多个实例,但一般不这么做)。每一个servlet实例只被初始化一次(执行init()方法)。
servletContext类用来与servlet容器通信,被包含在servletConfig对象中。每个webapp只对应一个servletContext。
cookie:
Cookie userAccount=new Cookie("userAccount",URLEncoder.encode(name,"UTF-8"));
userAccount.setMaxAge(60*60*90);//以秒为单位
response.addCookie(userAccount);
Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
for(Cookie cookie : cookies){
String cookiename = cookie.getName();// get the cookie name
System.out.println("接受到浏览器cookiename——"+cookiename);
String cookieValue = cookie.getValue(); // get the cookie value
System.out.println("接受到浏览器cookieValue——"+URLDecoder.decode(cookieValue, "UTF-8"));
}
过滤器和拦截器
在servlet被调用前检查request并修改request头和request内容,在servlet被调用/执行后检查response并修改response头和内容。
servlet过滤器不仅可以过滤servlet这种web组件,也可以过滤jsp,html等web组件。
servlet过滤器类必须实现javax.servlet,Filter接口,这个接口中有三个方法是servlet类必须实现的:
init(FilterConfig fg):servlet过滤器的初始化方法,此方法可以读取web.xml中的servlet过滤器参数。
doFilter(ServletResquest s,ServletResponse ss,FiterChain fc):此方法完成过滤器的实际操作,客户请求与servlet过滤器关联的URL时,servlet容器调用过滤器的此方法。FilterChina参数用于访问后续过滤器。
destory():servlet容器销毁过滤器实例时调用此方法。
监听器:
ServletContext接口是Servlet中最大的接口,呈现了web应用的servlet视图。每个web应用都会有一个servletContext对象与之关联。