【Servlet/Jsp/J2EE技术基础】

【Servlet/Jsp/J2EE技术基础】

servlet基础知识


1。servlet简介
SUN喜欢用‘let’后缀名来表示小对象、小组件。applet其实意味着little application (我初学applet时一直以为applet是apple的什么变种),而servlet表示little server application,大概的意思就是服务器端运行的小程序。注意这里并没有强调“web”或者“http”,servlet本质上是一种通用的服务器 技术,不过它最大的用途就是实现强大的web服务。
servlet涉及的主要类库是javax.servlet和javax.servlet.http,后者是前者的扩展。我们写的servlet要部署在 某个servlet容器中才能运行,容器负责管理servlet的生命周期,并接收外界请求包装成Request/Response对象发送给对应的 servlet使用,实现请求响应。
servlet有一个规范来限定servlet容器要实现的约定。目前该规范的最新版本是2.5,公司常用的是servlet2.3规范。在写这篇简介时 实在是很难下笔,因为servlet的全部知识在规范里就列举得清清楚楚、一目了然。整个规范也不长,半天就能看完,所以我这里只强调一些重点,请大家务 必把servlet 2.3规范中文版细细看一遍,很多疑问就会迎刃而解。

附件 : servlet2.3规范中文版.rar (2007-10-22 16:12, 285.47 K)
该附件被下载次数 27


2.servlet编程的总结。
1). servlet的最核心的接口是javax.servlet.Servlet ,其核心方法是void service(ServletRequest req, ServletResponse res)。每次web请求都会调用对应servlet的service方法。

2) . 新建一个servlet需要继承javax.servlet.http.HttpServlet类, 并覆盖其doGet(),doPost(),doDelete(),doPut()等方法的一个或多个。HttpServlet实现了Servlet接口,其service方法大概是这样实现的:
if (method.equals(METHOD_GET)) {
if (lastModified == -1) {
doGet(req, resp);
} else {
...
}
} else if (method.equals(METHOD_HEAD)) {
doHead(req, resp);
} else if (method.equals(METHOD_POST)) {
doPost(req, resp);
} else if (method.equals(METHOD_PUT)) {
doPut(req, resp);
} else if (method.equals(METHOD_DELETE)) {
doDelete(req, resp);
} else if (method.equals(METHOD_OPTIONS)) {
doOptions(req,resp);
} else if (method.equals(METHOD_TRACE)) {
doTrace(req,resp);
} else {
...
resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
}
而doPost()等方法默认的实现会返回错误信息。

3) .servlet写好后必须在web.xml文件中进行配置 ,典型代码如下:


<servlet><br> <servlet-name>springApp</servlet-name><br> <servlet-class><br> org.springframework.web.servlet.DispatcherServlet<br> </servlet-class><br> <init-param><br> <param-name>contextConfigLocation</param-name><br> <param-value><br> /WEB-INF/viewer.xml, /WEB-INF/**/controller.xml<br> </param-value><br> </init-param><br> <load-on-startup>1</load-on-startup><br> </servlet><br> <servlet-mapping><br> <servlet-name>springApp</servlet-name><br> <url-pattern>*.do</url-pattern><br> </servlet-mapping><br>


该配置描述了servlet的url映射规则、对应类、初始化参数、是否自动启动信息。其中:
url匹配、启动标志的细节可以参考servlet2.3规范。

4).http servlet类中的可以使用的主要对象
1,可以通过getServletConfig()获取ServletConfig对象,该对象包含servlet的所有信息
2,可以通过getServletContext()获取ServletContext对象,该对象包含servlet容器的所有信息(session、urlpath等)
3,获取客户端信息:HttpServletRequest对象是请求信息的包装类,其中包含有客户端的ip,主机名称等数据(对应http协议的头部信息),以及请求参数等。
4,HttpSession session = HttpServletRequest.getSession();session的作用就不用说了——可以把任意对象保存在session中。
5,HttpServletResponse对象,包装的是发送给客户端的响应。主要作用是重定向、转发、输出流、设置http head信息等。

5). web.xml配置
web.xml是j2ee工程的核心配置文件,也是j2ee的灵活性之源。这个文件可以囊括丰富的配置信息,并且由于DTD的限制,各个元素的书写顺序有着严格的规定(推荐使用具有DTD校验能力的工具来编辑web.xml),因此有必要对其仔细研究。
要学习web.xml,还是首推官方的DTD:http://java.sun.com/dtd/web-app_2_3.dtd,大家可以下载该文件,耐心阅读一下它的注释,里面包含了很多不为人知的秘诀。如果看不懂dtd,请先阅读这篇IBM的DTD 语法快速指南 ;其次如果你没耐心看英文,那么把《servlet2.3规范中文版》翻到最后一节13.3,那里有中文注释和范例说明;如果还是没有耐心看完老长的文字 ,那就用一个具有DTD校验和代码提示的xml编辑器(譬如XMLSpy)新建一个web.xml,然后利用它的代码提示功能来学习dtd规则,勉强也可以写了。

6).filter 过滤器
过滤器是servlet2.3规范新增的高级功能,实际上是装饰器模式加责任链模式在servlet中的实现,它可以对request、response 做统一处理。常见的用途是为字符集修改、页面缓存、数据压缩、session管理等通用性需求提供优雅的解决方案(这也是php比不上的)。参考资料:还 是看看那个规范就行了。

 


jsp基础知识

servlet架构先进,功能强大,但是也很难用——用java程序来零零碎碎地print出几百行html的难度可想而知。于是仿照asp,sun提供 了jsp来简化动态页面开发。JSP目前版本是2.0,不过weblogic8.1不支持,所以我们公司还是用的jsp1.2的语法。(无法使用简便易用 的jsp2.0是后来改用velocity的原因之一)
jsp的原理是在html中嵌入一些特殊的代码段(scriptlet——小脚本,脚本片段),在其中可以书写正统的java代码。jsp实际还是被自动翻译成一个servlet来执行的,因此要深入理解jsp可以从翻译出来的servlet下手。
这些scriptlet是用标签‘<% ’和 ‘ %>’来区分的。
出于不同的用途,<%%>有几种形式:
JSP的基本结构:scriptlet


  1. <% %> 普通java代码片段(scriptlet)——这些代码全部被翻译到service方法中。在这里有六个预定义的对象可以被直接使 用:request,response,out,session,application(ServletContext),pageContext(javax.servlet.jsp.PageContext)。
  2. <%@ %>jsp指令(directive),设置servlet的一些基础信息:head信息,导入包,继承的父类等。最常用的指令是page指令,格 式形如<%@ page import="xxx.xxx" %>,其属性有 contentType,import,buffer,autoFlush,session,errorPage,isErrorPage。这些信息囊括 着servlet的重要属性,要写在页面的头部。另外一个指令是include,可以引入其他页面。
  3. <%! %> jsp声明。定义写在servlet.service()方法外部的变量和方法,可以是静态的。
  4. <%= %> jsp表达式。直接输出表达式的结果。
  5. <%-- --%> 注释。

JSP的高级语法
jsp还提供了更加高级的用法:

  1. javabean:早期语法,现在没人用了。
  2. JSTL:JSP 标准标记库(JSP Standard Tag Library),提供了组件化能力,虽然难写但是易用,实在是JSP生命力顽强的不二秘诀。
    jstl1.0参考资料:http://www.ibm.com/developerworks/cn/java/j-jstl0211/ ,文章末尾提供了不少有用的链接。
  3. EL:表达式语言。javabean的替代者,在jsp2.0中得到了极大的增强,简便性可以媲美velocity。
    EL参考资料:http://www.oracle.com/technology ... jsp20/simpleel.html


书籍推荐:《JSP设计》 (第三版)是jsp书籍中当之无愧的王者。还好我们改用velocity了,否则我一定要买来珍藏。

J2EE技术基础


J2EE(Java 2 Enterprise Edition )是在java平台上构建企业应用的统称 ,由一系列规范和标准 组成,其主要技术有Servlet ,JSP,EJB,JDBC,JMS,JNDI,JTA,JCA,JMX, JAAS,JAX-RPC,JAXR,SAAJ等等,这些规范和标准一般由第三方实现。这一套庞杂的体系,一般开发中只会用到其中的若干技术。
它的版本在不断发展中,公司目前使用的J2EE1.4。
我们常用的技术包括:


  1. Servlet,常用版本:2.3,2.4,2.5 ;相关资料:servlet2.3规范
  2. JSP, servelt技术的扩展.每个jsp都会转换成servlet执行.
  3. 例如: 500.jsp 在tomcat中会转换成_500_jsp.java,然后编译成class执行.
  4. JDBC, 数据库访问接口.常用版本有2.0,3.0
    主要对象:Connection , DriverManager,Statement , ResultSet , PreparedStatement , CallableStatement .
  5. JNDI, 用于定位资源,例如查找数据源.


J2EE API

附件 : J2EE_API.chm (2007-10-29 15:52, 1.78 M)
该附件被下载次数 18

SUN公司的J2EE教程(中文版) ,这本书是j2ee1.3权威文献,内容有些陈旧了,作为参考书籍使用,有助于了解J2EE的全貌。
在线阅读: http://www.leftworld.net/online/j2ee/index.html
离线版下载:

附件 : J2EE Tutorial中文版.chm (2007-10-29 16:04, 1.17 M)
该附件被下载次数 18


PS:J2EE 虽然是我们的主要技术路线,但为了方便开发,目前公司的实际情况是更多地使用着其扩展技术。譬如使用MVC框架(Spring MVC)代替了Servlet,用Velocity代替JSP作为视图层,用Swim代替JDBC的简单应用;此外的J2EE技术如EJB、JMS等尚无 应用。因此J2EE降低成为了底层平台,一般性开发可能不再需要了解得太广太深,大家只需要大致明白其运行原理,能够开发、部署、调试即可。

【2007-10 bbs】

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值