以往学习的时候大多是看完书或者看完视频,动手实践一下就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. C标准I/O建立一个文件仓库

    实现了 增删改查 创建了一个结构体 保存 num name cout price 代码 #include<stdio.h>#include<string.h>#include& ...

  2. Eclipse Sort Members默认之后恢复的方法

    alt+shift+s -- > m CRLF 默认一种排序之后,对话框就再也出不来了: 使用这样的方法: window - preference - Java | Java dialogs | ...

  3. lufylegend库 LGraphics绘制图片

    lufylegend库 LGraphics绘制图片 <!DOCTYPE html> <html lang="en"> <head> <me ...

  4. Android SVG矢量资源的使用方法

    VectorDrawable 与 SVG Android 5.0(Lollipop, API 21)后,新增了<vector>标签,以VectorDrawable的形式支持SVG类型矢量图 ...

  5. Nancy简单实战之NancyMusicStore(三):完善商品信息与管理

    前言 上一篇,我们做了不少准备,并且还把我们NancyFx音乐商城的首页打造好了.这一篇主要是完善我们在首页的商品浏览问题和添加对商品的管理. 下面开始正题: 商品详情 首先是查看单个商品的详情: 先 ...

  6. hessian原理解析一(客户端分析)

    hessian 是一款开源的二进制远程通讯协议,使用简单方法提供了RMI功能,主要用于面向对象的消息通信. 优点:跨平台.多语言支持.使用简单 缺点:传递复杂对象性能会下降,不适合安全性高的应用 一 ...

  7. HDU5914

    Triangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  8. POJ3254(入门状态压缩dp)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13203   Accepted: 6921 Desc ...

  9. CSS实现的几款不错的菜单栏

    前言 自从做了智慧城市这个项目之后,我一个做后端的开发者,瞬间转为前端开发,不过我还是很喜欢前端的.前端那些事,其实蛮有意思的,HTML实现的是静态的,使用ajax之后就可以和数据库交互了,加上js和 ...

  10. WinForm 控件(下)

    10.PictureBox 外观,Image可以选择图片路径行为,SizeMode可以设置图片大小布局方式 11.Imagelist--图片集 imageList1.Images[n]; 12.not ...