日期:2014-05-19  浏览次数:20568 次

j2ee学习笔记
J2EE模式
Value Object(值对象)  用于把数据从某个对象/层传递到其他对象/层的任意Java对象。
通常不包含任何业务方法。
也许设计有公共属性,或者提供可以获取属性值的get方法。
JSP
1.JSP的基础知识   
               
               __ 
        _____ |   directive  (指令)
            |     |-- scripting (脚本)
JSP -------|     |__ action  (动作)
|
|_____Template data :除JSP语法外,JSP引擎不能解读的东西
   
1)在JSP中使用的directive(指令)主要有三个:
a) page指令
b) include指令
c) taglib指令

在JSP的任何地方,以任何顺序,一个页面可以包含任意数量的page指令

    2)Scripting(脚本)包括三种类型
a) <%!declaraction  %>
b) <%  scriptlet     %>
c) <%= expression   %>

3)action(动作)
  标准的动作类型有:
        a)  <jsp:useBean>
b)  <jsp:setProperty>
d) <jsp:getProperty>
e) <jsp:param>
f) <jsp:include>
g) <jsp:forward>
h) <jsp:plugin>

1. 注释: <% -----jsp comment-------%>
       <! -----html comment-------%>

2. <%@ page session = “true”  import =”java.util.*” %>
session可以不赋值,默认为true,如果session=”false”,则在JSP页面中,隐含的变量session就不能使用。

3. 请求控制器结构(Request Controller)
也被称之为JSP Model 2 Architecture
这种途径涉及到使用一个Servlet或一个JSP作为一个应用程序或一组页面的入口点。

为创建可维护的JSP系统,Request Controller是最有用的方式之一。

不是JSP,而是Java类才是放置控制逻辑的正确的地方。

请求控制器的命名模式为: xxxController.jsp
请求控制器类的命名模式为: xxxRequestController

2.JSP中的JavaBean
JSP三种bean的类型
1) 页面bean
2) 会话bean
3) 应用bean

大多数的系统会使用一个会话bean来保持状态,而对每一个页面使用一个页面bean 来对复杂的数据进行表示。

页面bean是一个模型,而JSP是一个视图。

3.Custom tag

bean是信息的携带者,
而tag更适用于处理信息。

标记库包含一个标记库描述符(TLD)和用于实现Custom tag的Java类
在翻译阶段,JSP容器将使用TLD来验证页面中的所有的tag是否都被正确的使用。


   标记处理程序只是一个简单的适配器,而真正的逻辑是在另一个类中实现的,标记处理程序只是提供了一个供其他的可复用的类的JSP接口
     
Servlet
1.ServletConfig
? 一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。

ServletConfig包涵 ServletContext 和 一些 Name/Value pair (来自于deployment descriptor)

? ServletContext接口封装了Web应用程序的上下文概念。

2.会话跟踪
1) Session
? 当一个Client请求多个Servlets时,一个session可以被多个servlet共享。

? 通常情况下,如果server detect到browser支持cookie,那么URL就不会重写。


2) cookie
? 在Java Servlet中,如果你光  Cookie cookie = new Cookie(name,value)
那么当用户退出Browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。

如果要存储 cookie,需加一句   cookie.setMaxAge(200)

? cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.

3) URL Rewriting
在使用URL Rewriting来维护Session ID的时候,每一次HTTP请求都需要EncodeURL()
典型的用在两个地方
1) out.print(“form action=\” ”);
out.print(response.encodeURL(“sessionExample”));
out.print(“form action=\” ”);
out.print(“method = GET>”);
2) out.print(“<p><a href=\” ”);
out.print(response.encodeURL(“SessionExample?database=foo&datavalue=bar”));
out.println(“\” >URL encoded </a>”);

3.SingleThreadModel
默认的,每一个servlet definition in a container只有一个servlet class的实例。
只有实现了SingleThreadModel,container才会让servlet有多个实例。

Servlet specification上建议,不要使用synchronized,而使用SingleThreadModel。

SingleThreadModel(没有方法)
保证servlet在同一时刻只处理一个客户的请求。
SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
这等同于在servlet的service()方法种使用synchronized.