3

以往学习的时候大多是看完书或者看完视频,动手实践一下就OK了。然而过了一段时间我发现东西都忘差不多了,需要复习才能重新掌握。现在开始学习JavaWeb了,我将在这里记录自己的学习的一点一滴,不仅便于自己以后回顾知识点,也希望能对JavaWeb初学者有所帮助。文章的内容主要是我对李刚老师的《轻量级JavaEE企业应用实战》一书的学习总结。本系列文章为Java新手的学习总结,大神请自动路过。

JSP/Servlet是Java EE规范的两个基础成员,也是Java EE开发的基础知识,同时也是Java Web开发的重点知识。JSP与Servlet的本质相同,JSP最终必须编译成Servlet才能运行。JSP的特点就是在HTML代码中嵌入Java代码或者使用各种JSP标签,动态的提供页面内容。

(一)创建第一个Web应用

在开始学习之前首先需要搭建Tomcat服务器,关于服务器的搭建请自行百度。我选择的集成开发环境是Idea。下面我将手动建立一个Web应用:

  1. 在任一目录下新建名为myFirstWebApp的文件夹

  2. 在myFirstWebApp文件夹内新建一个名为WEB-INF的文件夹(注意区分大小写)

  3. 在WEB-INF文件夹下新建一个名为class和一个名为lib的文件夹

  4. 打开Tomcat的webapps文件夹,将任一示例的Web应用的WEB-INF下的web.xml文件复制到WEB-INF目录下

  5. 将该文件根元素<web-app></web-app>内的其他节点全部删除,修改后的XML文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>
  1. 在myFirstWebApp目录下新建一个index.jsp文件,注意是jsp格式,使用记事本打开该文件添加以下内容:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>我的第一个Web应用</title>
  </head>
  <body>
        Hello,my first WebApp!
  </body>
</html>

这个文件实际上就是一个静态HTML页面但与之略有不同,项目部署成功以后,我们可以通过浏览器访问这个页面。

至此,我们就构建完成了一个基本的Web应用。myFirstWebApp是Web项目对应文件夹的名字。classes与lib文件夹的作用一致,都是用于保存Web应用所需要的Java类文件,其中classes文件夹用于保存单个的.class文件,lib文件夹用于保存打包的JAR文件。web-xml文件被称为配置描述符,它的作用将在下面作详细介绍。index.jsp是Web项目在有多个JSP页面时首先访问的页面,它其实就是一个静态页面,我们可以通过浏览器访问它。

下面我们将在Tomcat服务器上部署这个这个应用:

  1. 将该Web应用复制到Tomcat的webapps路径下,这样Web应用就可以自动部署到Tomcat服务器中。

  2. 启动Tomcat,对于Windows平台,只需要双击Tomcat安装路径下bin目录中的startup.bat文件即可启动Tomcat。

  3. 使用浏览器访问http://localhost:8080/myFirst...

你会看到刚才那个HTML代码被浏览器渲染了

Web效果

如果看到如下显示则表示我们的已经成功把Web应用部署到Tomcat上了。

(二)配置描述符web.xml

web.xml文件对于整个项目十分重要。在servlet2.5之前,每个Java Web应用必须包含一个web.xml文件且必须是在WEB-INF目录下。但是从servlet3.0开始,此文件夹不再是必须的,但是为了同一性,通常我们还是保留这个文件。web.xml有很多配置管理作用,以后会逐步学到。

web.xml文件的根元素是<web-app.../>,在Servlet3.0中新增了metadata-complete属性:该属性接受true和false两个值,为true时,该Web应用将不会加载注解配置的Web组件(Servlet、Filter、Listener)。

在web.xml文件中配置首页使用welcome-file-list元素,该元素包含多个welcome-file子元素,每个元素匹配一个首页。

<welcome-file-list>    
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

依次匹配每个页面,不存在就使用下一个,以此类推。

其实每个Web容器都会提供一个系统的web.xml文件,用于描述所有Web应用共同的配置属性。在Tomcat中,web.xml文件放在了conf路径下。

(三)JSP的基本原理

JSP的本质就是Servlet。当用户向指定的Servlet发送请求时,Servlet利用输出流动态的生成HTML页面。其实,在每次的输出流中存在大量的静态文本,这些都极大的拖累了Servlet的开发效率。随着JSP的出现,JavaWeb的开发效率大大提高:JSP通过在HTML代码中嵌套java代码,从而使静态的部分不再需要Java程序控制,Java只控制那些需要从数据库读取或者需要动态生成的内容页面。

所以,一个JSP页面内容一般由静态和动态两个部分组成。静态的部分就是一般的HTML代码,动态的就是<% %>包裹的Java代码,看起来JSP页面与Java类没有任何关系,其实JSP的本质依然是Servlet(一个特殊的类)。JSP页面由系统编译成Servlet,由Servlet响应用户的请求。由此可见,每个JSP页面就是一个Servlet实例,是Servlet的简化,因为每个页面都会被Servlet容器生成对应的Servlet类。

JSP页面的基本工作原理如下:
首先由客户端发起请求,JSP服务器判断被请求的页面是否是第一次收到请求,如果是,则先编译JSP文件,生成对应的Servlet来响应请求,返回标准的HTML页面。如果不是,那么表示该JSP页面已有对应的Servlet,则会根据请求动态的生成HTML代码返回给客户端。

下面深入学习一下JSP的运行原理:
一个JSP运行体系至少包括Web服务器、JSP引擎和JVM三个部分,其运行过程如下图所示:

JSP原理

用户从客户端向Web服务器发送请求时,服务器端首先判断该请求是否包含JSP内容,如果只是请求HTML页面,则直接把结果返回给客户端,完成服务器端的响应工作。如果请求还包含JSP内容,那么先传递给JSP/Servlet引擎,该引擎解释请求页面中的JSP标记和脚本,把源代码转换为以".java"为后缀的Servlet代码,并且传送给JVM;JVM把这些Servlet代码编译成以".class"为后缀的可执行字节码文件,并且存放在服务器上,接着执行字节码,然后把结果传送给JSP引擎,JSP引擎再把结果传递给Web服务器,最后Web服务器把结果以HTML页面的形式传送给客户端,完成服务器端的响应工作。

当后继请求相同的JSP页面时,JSP容器加载之前生成的Servlet类,并且通知JVM去执行已经存在的字节码,从而省去了转换的过程,这也是第一次执行JSP页面时间较长的原因。在JSP执行期间,JSP容器会检查JSP文件,看是否有更新,如果有更新,JSP容器会再次编译JSP或Servlet。

现在我们学会了如何建立一个web项目和了解了JSP的基本工作原理,接下来我们将学习JSP的基本语法和编译指令。


间阳幕宾
309 声望47 粉丝

在校大学生,一位爱生活、爱分享的准程序员。