第一章 开始编写第一个jsp
第一章
搭好框架,需要tomcat服务器和jdk.
JSP是Java Server Page的缩写,现在先让我们编写一个简单的jsp页面,看看jsp究竟能干什么?
<%=new java.util.Date()%>
随便找一个文本编辑器来编写第一个jsp吧,如果实在没有顺手的编辑器,那么也可以用windows自带的记事本,新建一个test.jsp文件,把上面的代码复制到文件里,保存即可。
得到了我们的第一个jsp文件之后,让我们把它复制到tomcat/webapp/ROOT目录下。现在检查一下tomcat是不是已经启动了,如果还没启动,需要先去启动tomcat,在看到tomcat正常启动的提示之后,就可以打开浏览器,输入网址 http://localhost:8080/test.jsp查看执行效果。
Mon Nov :: CST
看到了这些字样,也就说明我们写的第一个jsp已经成功执行了,现在咱们看到的并不是谁预先写好的文字,而是使用服务器实时计算出的当前时间,如果不信你可以多刷新几次页面,时间内容会不断改变,显示的永远是当前服务器的时间。
好的,现在就引出了一个问题,jsp是如何把我们需要的数据发送给我们的。
1.2. B/S结构,请求与响应
B/S结构,既浏览器(Browser)/服务器(结构),用浏览器查看jsp写的页面就算非常简单的B/S结构了。
先看看在我们访问http://localhost:8080/test.jsp的时候究竟发生了什么:
首先,浏览器解析我们输入的网址,查找服务器的位置。
咱们这里使用了http://localhost:8080/,浏览器就会以http协议,去访问localhost的8080端口,localhost是本机的别名,8080是tomcat的默认端口,即使现在不太理解也没有关系,只要知道http://localhost:8080/是你这台机器上运行的tomcat就可以了。
找到了服务器的位置,浏览器会向服务器发送一个请求(request),这个请求包含着http协议规定格式的数据,现在咱们不需要去计较细节,先把注意力集中在流程上。
接下来,服务器接收请求,分析请求中包含的数据。这个分析过程也是定义在http协议中的,像我们这里请求的是/test.jsp这个jsp页面,服务器就会去webapp/ROOT目录下去查找这个test.jsp,然后对它进行解析,运行。
在服务器的操作结束后,会生成一个响应(response),并把这个响应发送回客户机器的浏览器。
现在浏览器接收了响应,开始进行解析与运行,最后把结果显示给用户,这就成为我们最后看到的结果。
这就是http协议的基本流程了,像我们看到的一样,浏览器与服务器之间完全是依靠请求和响应联系起来的。这就像是在打乒乓球,浏览器发过一个球来,服务器接到球,反手再打回去。双方队员之间不会有其他接触,所有的交流就是那颗小球。
这也暗示了http中另一个重要的特性:短连接,无状态。
短连接是指:请求响应一次,服务器就关闭与浏览器之间的网络连接。
无状态是指,任意两次请求响应之间,没有直接的联系。
浏览器发出一个请求,服务器才能返回一个响应。一个请求对应一个响应,每个过程都是完全独立的。并且服务器端是被动的,只能接收请求,然后向请求的原发地发送响应,如果没有请求,服务器没办法凭空发一个响应出去,因为它不知道客户的机器在什么地方。浏览器和服务器之间也不会拉一根电话线,随时保证畅通,每次请求处理完之后,服务器就会立刻忘掉上次请求的信息。这样做的好处是处理简单,连接用完就断,不会浪费资源,坏处是在进行复杂操作的时候,因为没法保证用户当前的状态,只好把表示状态的信息不断的在浏览器和服务器之前传来传去,造成了操作的复杂。
一个请求一个响应,构筑了http协议的基础,jsp则是专门管辖服务器的部分,这样我们就可以把jsp的功能锁定在第二步和第三步了。处理请求,返回响应,这便是jsp的所有工作。
再重复一遍,jsp只负责服务器的操作,浏览器上的任何东西都与其无关,显示图片,显示文字,点击按钮,弹出窗口,这些都是浏览器的工作职能。并且,因为http的无状态性,jsp一旦返回了响应,就再不管其他的了。它绝对不会也不能直接对浏览器造成什么影响,它所能做是把响应这颗球打出去,剩下的就全看浏览器了。浏览器会发生什么事情,jsp也无从得知,如果想让jsp做些什么事情,唯一的办法就是发送一个请求。
重复第三遍,浏览器和服务器基本就是两个孤岛,两地居民的交流只能通过飞鸽传书来实现。在一封信到达之前,本地人是没办法得知对面的消息的,每当浏览器这边岛上的居民想要什么东西,他们就把需要的东西写到信里,用信鸽传递给服务器那边的岛上,服务器收到信鸽的消息,会按照上边所写的准备好,再放飞回去,等浏览器等到他们要的信鸽,就可以把东西放下来随便用了。两地居民直接接触的只有信鸽,他们从信鸽上那到他们想要的东西,对面的人长什么样子,是人是鬼他们全不在意,只要大家都会用信鸽就好了,http就是这样一只大家都会用的信鸽了。
希望现在大家已经对http有了清晰的认识,如果不了解它的运行原理,带着一脑子糨糊学jsp,那可是太可怕了,最怕的就是把jsp和浏览器混为一谈,认为是浏览器在运行jsp。实际上jsp是完全不知道浏览器的存在,它只是根据http形式的请求,发送http形式的响应,如果对面的浏览器能解析http形式的响应,就能显示出页面来,幸运的是目前市面上的浏览器都能解析http形式的响应,所以我们只要制造符合标准的数据,当作响应发送出去就行了。
其实一切都是这么简单,只要能了解它的运行原理,我们就可以在自己的舞台上大施拳脚,不用为涉及不到的领域胡乱苦恼了。
特别鸣谢 http://www.mossle.com/docs/jsp/html/jsp-ch-01.html,准备一边看一边做笔记。谢谢你
第一章 开始编写第一个jsp的更多相关文章
- 我们曾经心碎的C#之 第一章.我的第一个C#程序
第一章. C#入门 1.1 .NET与C# 001..NET是Microsoft.NET的简称,是基于Windows平台的一种技术 ...
- MyEclipse配置Tomcat 并编写第一个JSP程序
安装myeclipse之后配置tomcat服务器,在window里选择servers 选择tomcat的文件夹路径(我的是从别人那里考过来的文件夹) 选中上enable即可 出现了这个界面 在这里可以 ...
- 用idea编写第一个jsp文件
创建一个JAVA-web项目的前提:1.下载并安装JDK2.安装并配置Tomcat服务器 下面开始创建JAVA-web项目: 1.File——>new——>Project... 2.跟 ...
- 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目
在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内容,新写了本章节,先教大家在工作中如何搭建一个多模块的spr ...
- 《Python CookBook2》 第一章 文本 - 每次处理一个字符 && 字符和字符值之间的转换
文本 - 总结: 什么是文本Python 中的string 类型是不可变类型.文本,一个字符的矩阵,每一个单独的文本快可以被缩进和组织起来. 基本的文本操作①解析数据并将数据放入程序内部的结构中:②将 ...
- 【SSH三大框架】Hibernate基础第一篇:编写第一个Hibernate程序
接下来这几章节学习的是Hibernate,Hibernate的主要作用就是用来和数据库进行连接,简化了JDBC的操作. 首先,我们创建项目,然后把Hibernate的jar包和sqlserver的驱动 ...
- OpenGL笔记<第一章> 构建 GLSL class
恭喜,我们终于很扎实地完成了第一章——glsl 入门 不幸的是,it's not the basic of GLSL shader ,我们下一节开篇,basic of GLSL shader 在下一章 ...
- 从结构和数字看OO——面向对象设计与构造第一章总结
不知不觉中,我已经接触OO五周了,顺利地完成了第一章节的学习,回顾三次编程作业,惊喜于自身在设计思路和编程习惯已有了一定的改变,下面我将从度量分析.自身Bug.互测和设计模式四个方向对自己第一章的学习 ...
- 《css3实战》读书笔记 第一章 基于CSS需求而编写的HTML.
笔记说明 <CSS3实战手册第3版(影印版)>可以消除Web设计工作的痛苦,并且带给你:HTML--重新入门.如果你是HTML新手,你会学到如何以CSS友好的方式进行基本页面构造.若你是H ...
随机推荐
- Android简单自定义圆形和水平ProgressBar
ProgressBar简介 继承于View类,直接子类有AbsSeekBar和ContentLoadingProgressBar,其中AbsSeekBar的子类有SeekBar和RatingBar,可 ...
- hdu1087 最大递增子段和
http://acm.split.hdu.edu.cn/showproblem.php?pid=1087 状态方程:sum[j]=max{sum[i]}+a[j]; 其中,0<=i<=j, ...
- mongodb学习02基础知识
文档 键值对的一个有序集 文档被表示为对象 文档必须有一个 _id 键 {"greeting" : "Hello, world!"}` 键 文档的键是字符串 区 ...
- 安卓微POS-PDA手持终端,支持离线在线联网销售开单;移动开单 盘点 功能
采购单.采购退货单 销售单.销售退货单.收款.优惠.赠品等操作实现盘点作业(多台设备同时作业,相同商品,数量累计) 现场打印票据 实现采购订单.采购单.采购退货单.销售订单.销售单.销售退货单验货没 ...
- ios 简单的倒计时验证码数秒过程实现
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFireMethod:) ...
- http://www.cnblogs.com/baizhanshi/p/5593431.html
http://www.cnblogs.com/baizhanshi/p/5593431.html
- Codeforces 607B Zuma(区间DP)
题目大概说,有n个颜色的宝石,可以消除是回文串的连续颜色序列,问最少要几下才能全部消除. 自然想到dp[i][j]表示序列i...j全部消除的最少操作数 有几种消除的方式都能通过枚举k(i<=k ...
- HDU4067 Random Maze(最小费用最大流)
题目大概说,给一张图,删除其中一些单向边,使起点s出度比入度多1,终点t入度比出度多1,其他点出度等于入度.其中删除边的费用是bi,保留边的费用是ai,问完成要求最小的费用是多少. 一开始我想到和混合 ...
- iOS学习08之C语言内存管理
本次主要学习和理解C语言中的内存管理 1.存储区划分 按照地址从高到低的顺序:栈区,堆区,静态区,常量区,代码区 1> 栈区:局部变量的存储区域 局部变量基本都在函数.循环.分支中定义 栈区的内 ...
- 消除ListView, gridview中的选项单击是的默认黄色底色
要消除其默认的单击底色,只需要在**View定义时为其添加 android:cacheColorHint="#00000000" android:listSelector=&quo ...