Servlet&Jsp学习笔记1
1. Web应用程序简介
1.1 Web应用程序基础知识
1.1.1 URL、 URN与URI
URL: Uniform Resource Locator,
格式: <协议>:<协定协议部分>
常见的协议有 ftp(文件传输协议)、 http(超文本传输协议)、 mailto(电子邮件)、 file(特定主机文件名)
协议之后跟随冒号,特定协议部分的格式则为:
//<用户>:<密码>@<主机>:<端口号>/<路径>
例:若资源放置在HTTP服务器上,如下图所示

若主机名为openhome.cc,要以HTTP协议取得Gossip目录中的index.html文件,端口号为8080,则必须使用以下的URL: http://openhome.cc:8080/Gossip/index.html
如果要取得计算机文件系统中C://workspace下的jdbc.pdf文件,则可制定如下的URL格式:
ftp://C://workspce/jdbc.pdf
URN: 代表某一资源独一无二的名称。例如书的ISBN就是一个典型的URN
URI:类似于URL,但是URL必须提供绝对的路径,URI既可以绝对,也可以相对
1.1.2 HTTP
特点: 1.基于请求和相应的模型
2.无状态通信协议
1.1.3 URL编码
http请求参数格式类似与
http://localhost:8080/addBook.do?name=jsp&price=22
如果请求参数中包含“=”、“:”、“/”等字符怎么办?
在URI规范中定义了一些保留字如:“:”、“/”、“?”、“&”、“=”、“@”、“%”等,这些字符在URI中都有它的作用,如果要在请求参数上表达URI中的保留字,必须在%字符后以十六进制数值表示,来表示该字符的八个位数值。如":"字符真正存储时的八个位是00111010,用十六进制表示就是3A,那么必须使用%3A, 同理,“/”存储时八个位是00101111,用十六进制表示则为2F,所以必须使用%2F来表示“/”字符。因此如果发送者要发送的请求参数是一个网址链接类似于http://openhome.cc,则应该使用如下格式:
http://openhome.cc/addBook.do?url=http%3A%2F%2Fopenchome.cc
这是URI规范中的百分比编码,也就是俗称的URI编码或URL编码。如果想知道某个字符的URL编码是什么,在java中可以使用java.net.URLEncoder类的encode()方法做编码动作(相对的,译码使用java.net.URLDecoder的decode()方法)
测试编码与解码
package cn.edu.ecnu.ch01; import java.io.UnsupportedEncodingException; /** * 功能 测试编码与解码 * @author 11269 * */ public class TestEncoderAndDecoder { public static void main(String[] args) throws UnsupportedEncodingException { String text = java.net.URLEncoder.encode("http://openhome.cc", "ISO-8859-1"); System.out.println(text); //http%3A%2F%2Fopenhome.cc text = java.net.URLDecoder.decode(text, "ISO-8859-1"); System.out.println(text); //http://openhome.cc } }
中文字符
中文在UTF-8编码下,会使用三个字节进行表示。 例如"博客园"对应的编码就是%E5%8D%9A%E5%AE%A2%E5%9B%AD
1.2 Servlet/JSP 简介
Web容器:
Web容器是Servlet/JSP唯一认得的HTTP服务器。 如果希望用Servlet/JSP编写的Web应用程序可以正常运行,就必须知道Servlet/JSP如何与Web容器沟通,Web容器如何管理Servlet/JSP的各种对象等问题
1.2.1 什么是Web容器
实质:就是一个用java写的程序,运行在JVM之上,不同类型的容器负责不同的工作,若以Servlet/JSP运行的Web容器来说,也是一个Java写的程序。HTTP那些文字性的通信协议也是容器进行剖析与转换位可用的java对象的。 在抽象层面,可以将Web容器视为运行Servlet/JSP的HTTP服务器,只要写的Servlet/JSP符合Web容器的标准规范,Servlet/JSP就可以运行在不同厂商实现的Web容器上,而不会理会真正的HTTP服务器是什么。
例子

类似与JVM介于java程序和实体操作系统之间,Web容器介于实体HTTP服务器和Servlet之间。
请求/响应的基本例子
(1)客户端(浏览器)对Web服务器发出HTTP请求
(2)HTTP服务器收到HTTP请求,将请求转由Web容器处理,Web容器会剖析HTTP请求内容,创建各种对象(如HttpServletRequest, HttpServletResponse, HttpSession等)
(3)Web容器由请求的URL决定要使用哪个Servlet来处理请求
(4)Servlet根据请求对象(HttpServletRequest)的信息决定如何请求并通过响应对象(HttpServletResponse)来创建响应。
(5)Web容器与HTTP服务器沟通,web服务器将响应转换为HTTP响应并传回客户端。

当有请求到来时,Web容器会为每个请求分配一个线程,如果有多个请求进来,就只是启动多个线程来进行处理,而不是重复启动多次JVM.
注意:Web容器可能会使用同一个Servlet实例来服务多个请求,也就是说,多个请求下,相当于多个线程在共享存取一个对象,因此要注意线程安全的问题。
1.2.2 Servlet与JSP的关系
JSP会被Web容器转译为Servlet的.java源文件、编译为.class文件,然后加载容器之中,所以最后提供服务的还是Servlet实例。

浙公网安备 33010602011771号