现在的位置: 首页 > 综合 > 正文

Java WEB应用基础

2012年09月09日 ⁄ 综合 ⁄ 共 5942字 ⁄ 字号 评论关闭
文章目录

Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

 

 

所谓基于Java的WEB应用,是通过Java技术实现HTTP协议的一种应用。Java技术中实现HTTP协议的核心技术是servlet技术,随着架构技术的不断完善,servlet基础理论逐渐被淡忘,本文所讨论的就是被大家淡忘的那些基础知识。

Java WEB应用基础理论

统一资源定位符(URL,英语Uniform Resource Locator的缩写)也被称为网页地址,是因特网上标准的资源地址。
一个典型的URL请求如

http://localhost:8080/hello/index.html

分以下几个部分,
HTTP协议头: http://
服务器地址:   localhost (地址可以是IP或域名)
端口号:         8080(HTTP协议的默认端口号是80)
应用上下文:   /hello(如果应用上下文的根目录是ROOT,则应用上下文为空)
资源或请求:   /index.html
Java的servlet技术解决的就是资源或请求的映射问题。

WEB应用的目录结构

如果要创建一个基于Java的WEB应用,基本的目录结构如下:

/[WebContent]    WEB应用上下文根目录
    /WEB-INF     配置文件所在目录
        web.xml  WEB应用核心配置文件
        /lib     存放所有jar包的类库目录
        /classes 存放没有打包的所有class文件的类路径

根据需要,WEB应用上下文可以定义成任意名字或ROOT。
如果WEB应用上下文的根目录是ROOT,意味着用户端在访问WEB应用时不需要提供WEB应用上下文。如:

http://localhost:8080/index.html

如果WEB应用上下文的根目录不是ROOT,用户端访问时就必须明示WEB应用上下文。如上下文名为hello的访问方式:

http://localhost:8080/hello/index.html

/WEB-INF目录放置了所有不允许用户直接访问的资源。典型的文件有web.xml,它是Java Web应用的核心配置文件。
web.xml的主要任务是将用户的请求映射到不允许用户直接访问的资源上。

在web.xml中定义的请求

在WEB应用中,一个servlet代表一个URL请求。servlet的表现形式可以是JSP文件资源,也可以是Servlet类。servlet在web.xml中由<servlet/>和<servlet-mapping/>组成。在<servlet-mapping></servlet-mapping>中指定用户端的请求方式,在<servlet></servlet>中指定服务器响应的Servlet类或JSP文件。例如:

通过上述例子,可以了解以下几个要点:
1. 通过<servlet-name/>关联<servlet></servlet>和<servlet-mapping></servlet-mapping>。
2. <url-pattern/>指定了用户端的请求方式。必须以“/”开头,请求基于WEB应用上下文。
3. <url-pattern/>指定的请求方式与JSP资源的定位或Servlet类的位置无关。
4. <jsp-file/>指定了JSP资源在WEB应用中的目录位置。必须以“/”开头,目录位置基于WEB应用上下文的根目录。
5. <servlet-class/>指定了Servlet类的位置,位置信息包括包名及类名。

WEB应用的资源定位方式

我们将“/”开头的路径称为绝对路径,将非“/”开头的路径称为相对路径。Java资源的常用定位方式有三种:文件系统定位方式、类路径定位方式与WEB应用上下文定位方式。文件系统定位与类路径定位可以参考《Java资源的定位方式》一文,WEB应用上下文定位是以上下文根目录为绝对路径,以资源文件所在目录为相对路径进行资源定位。
例如,一个应用上下文的根目录为“/hello”的WEB应用中web.xml的描述

上面的描述可以为我们提供以下信息
/WEB-INF/jsp/index.jsp描述了index.jsp文件的在WEB应用中的目录位置(它是相对于WEB应用的根目录的):

/hello(WEB应用上下文的根目录)
    /WEB-INF
        /jsp
            index.jsp

程序化的Servlet类

用户自定义的Servlet类必须继承自javax.servlet.http.HttpServlet,这样才可以处理HTTP请求。在web.xml的<servlet></servlet>中必须指明自定义Servlet类的完整包名及类名,如:

Servlet类可以打包成JAR包,存放在/WEB-INF/lib目录下;也可以不打包,存放在/WEB-INF/classes目录下。

可以直接访问的资源

/[WebContent]是WEB应用的根目录,在这个目录下存放的资源(子目录或文件),用户端可以直接访问,如以下目录结构:

/hello(WEB应用上下文的根目录)
    welcome.html
    /images
        logo.png
    /WEB-INF
        web.xml
        /lib
        /classes

基于上述目录结构的WEB应用,用户端可以直接访问welcome.html,如:

http://localhost:8080/hello/welcome.html

也可以直接访问logo.png,如:

http://localhost:8080/hello/images/logo.png

在Java WEB应用中,针对一个请求,系统首先会定位web.xml中指定的请求与资源的映射关系,其次才会定位直接可以访问的资源。
如以下目录结构:

/hello(WEB应用上下文的根目录)
    welcome.html
    /images
        logo.png
    /WEB-INF
        web.xml
        /lib
        /classes
            /test
                /servlet
                    IndexServlet.class

在web.xml存在以下定义

此时如果用户端请求/hello/welcome.html,系统定位到的是test.servlet.IndexServlet而不是welcome.html资源文件。

使用基础理论实现MVC架构

MVC是用户界面层次(UI层)的架构模式,它主要由三个部分组成:M—Model(模型),V—View(界面),C—Controller(控制器)。在基于Java的WEB应用中MVC架构的基本流程如下:

  1. 客户端发出一个request到Web服务器,request中包括表单数据;
  2. Controller响应request,从中取得表单数据并校验其有效性,校验通过后将表单数据传送给Model;
  3. Model取得表单数据后进行业务处理,并将处理结果传送给Controller;
  4. Controller根据处理结果将显示用的数据保存到缓冲区中;
  5. Controller根据处理结果转向到指定的View;
  6. View从缓冲区中取得显示用的数据渲染画面;
  7. View将画面写到response中。

其中View的角色通常由JSP网页资源完成,Servlet类则实现了Controller的功能。

Model是业务模块,主要由JavaBeans实现业务处理功能,在这里不做详细描述。

提取表单数据的方法

一般表单的提交分POST与GET方式两种,文件上传使用multi-part方式提交表单。在服务器端,一般表单可以利用request.getParameter()与request.getParameterValues()两种方法提取数据,multi-part表单可以用以下方式提取数据:

不同范围的缓冲区

根据不同的生命周期,Web应用的缓冲区分request、session和application三种。在JSP文件中,这三种对象可以直接访问,在Servlet类中,这三种对象的访问方式如下:

request、session和application均有getAttribute()和setAttribute()方法,用于数据的读取与保存。

请求的转向

Forward和Redirect是servlet的两种基本转向方式。
Forward通过以下方式调用:

Redirect通过以下方式调用:

Forward方式在转向的过程中完整保留了request,session,application中的数据。Redirect方式有保留的保存了session,application中的数据,但request中的数据不予保留,转向以后全部丢失。

从业务逻辑上讲,转向操作分站内转向和站外转向。
站内转向是指转向到站内的其他JSP网页或者其他的Servlet上,Forward和Redirect两种方式都可以进行站内转向。站外转向是指转向到其他的网址上,站外转向只能用Redirect方式完成,Forward方式不具备转外转向的功能。

JSP网页的渲染

在JSP网页上有多种方法提取缓冲区的方法,最基本的方法是脚本化语言方式,如:

JSP2.0之后,EL表达式成为JSP标准的一部分,可以在JSP2.0中直接使用EL表达式。
EL表达式只能读取request,session及application中的信息,不能直接中脚本化语言中取得数据,如:

除JSP标准之外,还可以使用大量的第三方标签库如JSTL标准标签库,Struts标签库及Spring标签库等等来简化和完善数据缓冲区的数据读取与保存操作。

抱歉!评论已关闭.