Servlet组件详解

来源:互联网 发布:中国进口美国数据 编辑:程序博客网 时间:2024/06/02 04:23

1、什么是Servlet?
sun(oracle)公司制订的一种用来扩展web服务器端功能的组件规范。
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

1.1 扩展web服务器端功能

   web服务器端(比如apache http webServer,nginx,iis等)只能够处理 静态资源的请求,不能够处理动态资源的请求。   所以需要扩展web服务器的 功能来处理动态资源的请求。   注1:静态资源,指的是需要事先将网页写好。动态资源,指的是需要经过计算,动态生成相应的网页。现在很少用了。

1.2 组件

   符合相应的规范,具有部分功能,并且需要部署到相应的容器里面 才能运行的软件模块。比如,Servlet就是一个组件,   需要符合servlet 规范,并且需要部署到servlet容器里面才能运行。   注:容器:符合相应的规范,提供组件运行环境的程序。比如,Tomcat就是一个servlet容器。它处理了网络相关的问题,   我们写Servlet只需要关注业务逻辑即可。

1.3 如何写一个Servlet?

step1. 写一个java类,需要实现Servlet接口或者继承 HttpServlet类。step2. 编译 step3. 打包     注:创建一个具有如下图结构的文件夹:     step4.部署 将step3创建好的文件夹拷贝到servlet容器指定的文件夹下面。   注:可以将step3创建好的文件夹先使用jar命令压缩成以".war"结尾 的文件,然后再拷贝。step5.启动servlet容器,然后访问servlet。http://ip:port/appname/url-pattern。

这里写图片描述

1.4 Servlet是如何运行的?

1.4.1 比如打开浏览器,输入http://ip:port/servlet01/hello

step1.浏览器依据ip,port建立与容器之间的连接。step2.浏览器将相关数据打包(按照http协议创建一个请求数据包), 然后发送请求。step3.容器将请求数据包解析出来,然后将解析到的数据放到 request对象里面,同时,还会创建一个response对象。 step4.容器创建servlet对象,然后调用该对象的service方法。 注:容器会将request对象和response对象作为参数传进来。可以通过request对象获得请求参数值,并且将处理结果写到 response对象里。step5.容器通过response获取处理结果,然 后打包(响应数据包)发送给浏览器。step6.浏览器解析响应数据包,生成相应的页面。

1.4.2 Servlet运行结构图如下所示:
这里写图片描述

2、Servlet输出中文

1.1 如何设置

response.setContentType("text/html;charset=utf-8")。注:此行代码会设置content-type消息头的值,浏览器会按照指定的字符集来解码。

1.2 请求类型

1.2.1 Get请求

1)哪一些情况下,浏览器会发送get请求? a.直接在浏览器地址栏输入某个地址。b.点击链接。c.点击表单的提交按钮。2)get请求的特点 a.请求参数会添加到请求资源路径的后面。因为请求行最多只能存放约2K左右的数据,所以只能添加少量的请求参数。 b.会将请求参数显示在浏览器地址栏,不安全(比如,路由器会记录包含了请求参数的请求地址)。

1.2.2 Post请求

1)哪些情况下,浏览器会发送post请求?设置表单的method属性值为"post"。2)post请求的特点 a.会将请求参数添加到实体内容里面。可以提交大量的数据给服务器。b.不会将请求参数显示在浏览器地址栏,相对安全一些。注:不会对请求参数加密。

3、读取请求参数值

(1)getParameter方法String getParameter(String name) name:是请求参数名,如果请求参数名写错,则返回null值。(2)getParameterValues方法String[] getParameterValues(String name)注: a.当有多个请求参数名相同时,使用该方法。b.对于多选框,如果一个都不选,会获得null值。

4、表单中文参数处理——乱码处理

4.1 为什么会产生乱码?
表单提交时,浏览器会对表单中的中文参数值进行编码(会使用 打开该表单所在的页面时的字符集来编码)。服务器端默认会使用 iso-8859-1来解码。所以会产生乱码。

4.2 如何解决

(1)针对Post方式请求request.setCharacterEncoding(String charset);注意: a.该方法要添加到所有的getParameter方法的前面。b.charset(字符集)应该与浏览器端保持一致,比如都是utf-8。(2)针对Get方式请求修改tomcat的server.xml配置文件,添加URIEncoding="utf-8"。

5、重定向

5.1 什么是重定向?
服务器端通知浏览器,向一个新的地址发送请求。
注:服务器可以发送一个状态码302和一个消息头(Location,该消息头的 值是一个地址,
一般称之为重定向地址),浏览器收到之后,会立即向 重定向地址发送请求。
重定向示意图如下所示:
这里写图片描述
5.2 如何重定向?
response.sendRedirect(String url);

5.3 重定向特点?

a. 重定向地址是任意的。b. 重定向之后,浏览器地址栏的地址会发生改变。注:重定向之前,容器会先清空response对象上存放的所有的数据。