java学习心得笔记

  j2ee学习笔记

  注:框架可以用word菜单中的 “视图/文档结构图” 看到

  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类才是放置控制逻辑的正确的地方。

  请求控制器的命名模式为: controller.jsp

  请求控制器类的命名模式为: requestcontroller

  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

  &#61548; 一个servletconfig对象是servlet container在servlet initialization的时候传递给servlet的。

  servletconfig包涵 servletcontext 和 一些 name/value pair (来自于deployment descriptor)

  &#61548; servletcontext接口封装了web应用程序的上下文概念。

  2.会话跟踪

  1) session

  &#61548; 当一个client请求多个servlets时,一个session可以被多个servlet共享。

  &#61548; 通常情况下,如果server detect到browser支持cookie,那么url就不会重写。

  2) cookie

  &#61548; 在java servlet中,如果你光 cookie cookie = new cookie(name,value)

  那么当用户退出browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。

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

  &#61548; 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.

  single thread model一般使用在需要响应一个heavy request的时候,比如是一个需要和数据库打交道的连接。

  2. 在重载servlet地init( )方法后,一定要记得调用super.init( );

  3. the client通过发送一个blank line表示它已经结束request

  而the server通过关闭the socket来表示response已结束了。

  4. 一个http servlet可以送三种东西给client

1/15