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对象与之关联。