Head First Servlet&JSP(beta版)
一.Servlet&JSP概述
1.1 简单的访问流程
每个人在学习编程时候都想自己创建一个网站,这时候,Servlet和JSP就是很好的选择。
当我们访问一个网站时候,最简单的流程是:
- 用户在web浏览器上输入url,请求(request)一个资源
- 请求发送到web服务器上,服务器根据url来查找资源
- 没找到,就会显示404;找到了,就会把资源-----例如html页面,响应(response)到客户
1.2 http协议
http协议是处于TCP/IP协议的应用层。
TCP端口:共有0~65536个逻辑端口
- HTTP:80
- FTP(文件传输协议):21
- Telnet:23
- SMTP:25
- TIME:37
- POP3:110
- HTTPS:443
一般在0~1023的端口号已经被占用,所以定义时最好不要选择
1.2.1请求request
1.2.1.1 GET方法
GET:请求任务并获得资源返回,get请求中的字数有限(取决于服务器),若用户在搜索框中输入很长一段文字,就会出现异常
如图所示,用get发送的数据会出现在url后面,显示在地址栏中,这样信息就全部暴露了,所以这种方法不适用于发送私密信息,不过可以用它来建立书签
我们还要注意Accept这行,决定了能接受的从服务器返回的类型
1.2.1.2 POST方法
POST:可以请求,同时向服务器发送表单数据。浏览器可以用它做复杂的请求,加到最后的消息体当中去,也可以发送加密信息,因为他的信息不会存在url上
1.2.2 HTTP响应response
但你向浏览器发出请求get,post时,服务器就会返回你想要的资源,附在最后
MIME类型:响应首部+资源=http响应。在响应首部中Content-type的值称为MIME类型,他的作用是告诉浏览器要接收的数据是什么。
例如response.setContentType("text/html");
告诉浏览器要显示text/html类型的数据
1.3 URL---统一资源定位器
之前一直再说URL,那URL到底是什么呢?
顾名思义,定位服务器上的资源,一般是一个地址
1.4 web服务器
web服务器擅长读取静态页面,那怎么处理动态内容呢?比如实时显示服务器时间?
CGI(Common Gateway Interface)来辅助服务器处理动态信息,使用Perl编写。现在好像用fastCGI(先不管)。
我们javaweb中用Servlet扮演辅助应用程序的角色,把参数(请求和响应)分配其中,并且再处理
下面是流程:
目前有两种Web服务器软件:IIS和Apache
j2ee(Java 2 Enterprise Edition),一个完整的web服务器由一个web容器(Tomcat)与一个EJB容器(weblogic和websphere)组成
二.Web应用体系
2.1 容器
Servlet是web服务器器的辅助应用程序,又受控于容器。
当客户发送一个请求时,由容器来分发给Servlet,容器又称web容器,本文中一般指代Tomcat。
容器把各种必备的j2se代码封装起来,例如Socket、线程安全、servlet的生命周期管理、jsp支持和日志等等。不需要我们再去写,只需要调用方法就可以了。
分发请求的流程如下,虽然我觉的并不需要了
2.2 Servlet的映射
tomcat怎么找到Servlet的呢?
可以使用xml属性映射来找到
Servlet的文件路径名称在WEB-INF的classes下,一般的Servlet有3个名字
如图:
- URL名
<url-pattern>
- 秘密的内部名,也就是
<servlet-name>
- 实际的文件名,
<servlet-class>
一般写的Servlet文件的路径名
为什么要这么多名字,不能直接写路径名称吗?
通过映射,你只需要修改xml文件就好了,不用在jsp或html里面改动文件,而且客户不会直接得知你文件的位置,即灵活又安全。
xml文件又称为部署文件(DD),它的作用除了映射外,还有其他很多作用,比如定制安全角色、错误页面、标记库、初始配置init()等等强大作用