以往学习的时候大多是看完书或者看完视频,动手实践一下就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>
  6. 在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>

至此,我们就构建完成了一个基本的Web应用。myFirstWebApp是Web项目对应文件夹的名字。classes与lib文件夹的作用一致,都是用于保存Web应用所需要的Java类文件,其中classes文件夹用于保存单个的.calss文件,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/myFirstWebApp/index.jsp。

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



至此我们就成功把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三个部分,其运行过程如下图所示:



用户从客户端向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的基本语法和编译指令。

JavaWeb从0开始学(一)-----搭建第一个Web应用程序与JSP工作原理的更多相关文章

  1. 使用Yii 1.1框架搭建第一个web应用程序

    我已经安装好了WampServer,web项目根目录是 D:\wamp\www. 1.下载Yii 1.1的源码 yii-1.1.14.f0fee9.tar.gz: 2.解压源码包,放在web项目的根目 ...

  2. Spring Boot从入门到精通(一)搭建第一个Spring Boot程序

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...

  3. scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld

    scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld 学习了: http://blog.csdn.net/wangmuming/article/details/3407911 ...

  4. JavaWeb从0开始学(二)-----JSP基本语法与编译指令

    在上一节中我们学习了如何搭建一个简单的Web应用,并且已经知晓了一个JSP页面主要由静态的HTML内容和动态的Java脚本共同组成.JSP的基本语法共有JSP注释.JSP声明.输出JSP表达式与JSP ...

  5. vue2.0+element+node+webpack搭建的一个简单的后台管理界面

    闲聊: 今天是六一儿童节哟,小颖祝大家节日快乐哈哈哈.其实这个demo小颖断断续续做了将近两个礼拜了,心塞的,其实这个也没有多难,主要是小颖有点最近事情有点多,所以就把这个一直拖着,今天好不容易做好了 ...

  6. 建立一个node.js服务器(使用express搭建第一个Web环境)

    一.官网下载node.js 下载地址:https://nodejs.org/en/download/ 根据向导,下一步安装就可以了! 二.使用express搭建Web环境 express是一个开源的n ...

  7. 使用express搭建第一个Web应用【Node.js初学】

    来源:http://jingyan.baidu.com/article/bad08e1ee501e009c8512106.html express是一个开源的node.js项目框架,初学者使用expr ...

  8. Asp.Net Core 2.0 之旅---在Ubuntu上部署WEB应用程序

    1.Ubuntu 上 安装NET Core 2.0 SDK 第一步的安装,微软大佬已经写的非常详细了=>直达链接,按照教程来即可. 2.将我们的WEB 发布到一个文件夹,将这个文件夹打包成 压缩 ...

  9. cocos2d-x v3.0的window平台搭建和编译成andriod程序

    首先添加这个地址到系统环境变量,path 然后打开CMD,输入如下语句 现在就可以创建一个新项目了 这样一个空的cocos2d-x v3.0的项目就创建好了 接下来编译andriod程序 先在系统环境 ...

随机推荐

  1. 为什么ajax 必须同源,same origin policy

    ajax 所有请求都会附带主域的cookie, 若没有同源策略,攻击者就可以获取你的cookie,状态.

  2. JS的组成部分、引入页面的方法以及命名规范

    JS的组成部分.引入页面的方法以及命名规范   一.页面是由三部分组成 1)html标签(超文本标记语言) 2)css样式(层叠样式表) 3)javascript脚本编程语言(动态脚本语言) 二.将c ...

  3. Frameset使用教程

    frame,是网页开发必须掌握的知识.例如后台架构.局部刷新,页面分割,都是frame的用途表现,尤其是后台页面制作,使用frame会给用户带来非常舒适的使用感受. frame知识点包括(frames ...

  4. 结合social relationship的推荐系统(持续更新)

    最近看了一些结合社会关系的推荐系统,把论文罗列一下: (TidalTrust) Generating predictive movie recommendations from trust in so ...

  5. js动态设置输入框字体/颜色

    动态设置文本框颜色: 主要是利用javascript中的触发事件onfocus和onblur <script language="javascript" type=" ...

  6. Android 创建Library Project(库项目)与引用操作

    由于在开发过程,为了实现未曾了解的某种效果与特定功能,而求助于网上优秀的开源项目,在使用过程中发现引用开源的Library Project(库项目),的确可以解决很多问题,而且也给出了一种思路,好的软 ...

  7. Last-Modified和ETag以及Apache和Nginx中的配置

    1) 什么是”Last-Modified”? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修 ...

  8. C实现类、继承、多态

    首先考虑用C实现类 肯定是要使用struct的,类的数据成员放在struct里面: 而类有构造函数.析构函数,这两个函数必须在struct外面,构造函数要分配struct空间并初始化struct成员, ...

  9. Java: 分解List<HashMap<String, String>>

    分解List<HashMap<String, String>> 的方法: List<HashMap<String, String>> mapList; ...

  10. 免越狱tweak应用逆向开发

    对于已越狱的设备,系统默认安装了mobilesubstrate动态库,提供一个系统级的入侵管道,所有的tweak都可以依赖它来进行开发.而对于没有越狱的手机,我们需要向目标app注入libsubstr ...