java服务器端开发-servlet:2、Servlet执行过程介绍:常见错误及解决方式、响应数据包、get请求与post请求、编码相关等
发布日期:2021-06-29 01:38:41 浏览次数:2 分类:技术文章

本文共 3443 字,大约阅读时间需要 11 分钟。

声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!!

目录


前言

接着上一篇文章 

我们继续对servlet的知识点进行介绍,既然我们已经写了一个 servlet程序,下面我们来分析它的执行过程

二、Servlet执行过程介绍

1、servlet是如何运行的?

比如在浏览器地址栏输入:

http://ip:port/web01/hello

step1,建立链接

浏览器依据ip,port建立与servlet容器

(servlet容器也是一个简单的web服务器)之间的连接。

step2,打包

浏览器将请求参数、请求资源路径等等打包

(要按照http协议的要求)。

step3,发请求

浏览器将请求数据包发送给servlet容器。

step4,拆包,创建requestresponse对象

容器收到请求之后,对请求数据包进行解析(拆包),

然后将解析之后的结果封装到request对象上,

同时,容器还会创建一个response对象。

step5,创建Servlet对象

容器依据请求资源路径("/web01/hello")找到

应用所在的文件夹,然后依据web.xml找到对应的

servlet配置(servlet的类名),然后容器创建该servlet对象。

step6,调用service方法

容器调用servlet对象的service方法(会将事先

创建好的request,response作为参数传递进来)。

step7, 获得请求参数,并进行处理

servlet可以通过request对象获得请求参数,

进行相应的处理,然后将处理结果缓存到response对象上。

step8,处理结果,打包发送给浏览器

容器从response对象上获取之前处理的结果,

然后打包发送给浏览器。

step9,浏览器拆包,生成页面

浏览器拆包(解析容器返回过来的响应数据包)

,依据获取的数据生成相应的页面。

http://ip:port/web02/hello?name=jetty

"?"表示后面是请求参数,

"name"是请求参数名,

"jetty"是请求参数值。

 

2、常见错误及解决方式

(1)404

a,错误原因:

依据请求资源路径找不到对应的资源。

b,解决方式:

依据http://ip:port/appname/servlet-url

检查你的请求地址。

检查<servlet-name>是否一致。

(2)500

a,错误原因:

系统错误

b,解决方式:

检查servlet类有没有继承HttpServlet。

检查<servlet-class>的“包名.类名”是否正确。

检查程序是否正确(比如在没有检查请求参数

的情况下就做类型转换)。

(3)405

a,错误原因

容器找不到service方法。

b,解决方式

检查service方法的签名(方法名、返回类型、

参数类型、异常类型)。

3、http协议(了解)

 

(1)什么是http(超文本传输控制协议)协议

由w3c制订的一种网络应用层协议,用来规范

浏览器与web服务器之间通信的过程及数据格式。

1)通信的过程:

step1,浏览器建立与web服务器之间的连接。

step2,浏览器将请求数据打包并发送给web服务器。

step3,服务器将响应数据打包并发送给浏览器。

step4,服务器关闭连接。

如果浏览器要再发请求,必须重新建立一个新的连接。

2)特点

“一次请求,一次连接”,优点是web服务器可以

利用有效的连接个数为尽可能多的客户端(浏览器)服务。

(2)数据包的结构

1)请求数据包

a,请求行:请求方式(get/post) 请求资源路径

协议的类型和版本

b,消息头: 是一些key,value对,由w3c定义,

可以由通信的双方彼此发送,比如,浏览器

可以发送一个"user-agent"消息头给服务器,

告诉服务器,浏览器的类型和版本。

c,实体内容:

只有发送post请求时,实体内容才会有

数据(即请求参数)。如果发送的是get请求,

请求参数会添加到请求资源路径的后面。

2)响应数据包

a,状态行: 协议类型和版本 状态码  状态描述

状态码:是一个三位数字,由w3c定义的,表示服务器处理请求的一种状态。

200:正常

500:系统异常

404:依据请求资源路径找不到对应的资源

b,消息头:

服务器也可以发送一些消息头给浏览器,

比如"content-type",告诉浏览器,服务器返回

的数据类型和编码。

c,实体内容:

程序处理的结果

 

4、get请求与post请求

(1)哪一些情况下,浏览器会发送get请求?

a,直接在浏览器地址栏输入某个地址。

b,点击链接

c,表单默认的提交方式

(2)哪一些情况下,浏览器会发送post请求?

a,设置表单method="post"。

(3)get请求的特点

a,请求参数会添加到请求资源路径的后面,只能添加

少量的参数(因为请求行只有一行,大约只能存放2K

左右的数据)。

b,请求参数会显示在浏览器地址栏(路由器会记录

请求地址)。

(4)post请求的特点

a,请求参数添加到实体内容里面,可以添加大量的

参数。

b,相对安全,但是,post请求不会对请求参数进行

加密处理(可以使用https协议来保证数据安全)。

 

5、如何获得请求参数值?

1) String request.getParameter(String paramName);

注意:如果paraName对应的值不存在,返回null。

2) String[] request.getParameterValues(String paramName);

当有多个参数名相同的时候,用该方法。

 

6、编码相关的问题

(1)servlet如何输出中文?

a,乱码问题产生的原因

默认情况下,out.println会使用"iso-8859-1"

来进行编码。

b,解决方式

response.setContentType("text/html;charset=utf-8");

注意,编码格式只要支持中文即可,比如,还可以设置为 gbk。

这行代码的作用有两个:

作用1:生成一个消息头(content-type),告诉

浏览器,服务器返回的数据类型和编码格式

作用2:也设置了out.println在输出时使用的编码格式。

(2)表单有中文参数,如何处理?

注意:

这里说的是表单有中文参数,表单post/get提交方式的编码处理问题。

初学者容易,直接写一个类似带中文的地址,在浏览器上进行测试,如

这样就不对了,说的不是一回事。

a,乱码问题产生的原因

当表单提交时,浏览器会对表单中的中文使用

浏览器打开表单所在的页面时的编码格式进行编码。

b,解决方式:

方式一:

step1,要保证表单所在的页面按照指定的编码格式打开。

<meta http-equiv="content-type"

content="text/html;charset=utf-8">

step2,让服务器按照指定的编码格式进行解码。

 request.setCharacterEncoding("utf-8");

只对post请求有效。

 

方式二:

step1,同上。

step2,

name = new String(

name.getBytes("iso-8859-1"),"utf-8");

7、常识: 编码、解码、unicode编码

a,java语言在内存当中以unicode编码格式(字符集)

来保存一个字符。

b,编码:将unicode编码格式对应的字节数组转换成

某种本地编码格式(gbk,utf-8,gb2312)对应的字节

数组。

c,解码:将某种本地编码格式对应的字节数组转换成

unicode编码格式对应的字节数组。

8、练习:

9、初学-注意

  1. 修改Servlet里面代码,无需重启tomact,但要重新部署
  2. 修改项目名:项目名,Properties,MyEclipse,Web,Web Context-root,“/当前项目名”
  3. 测试地址,多在浏览器上尝试。不要在MyEclipse上
  4. Open With,System Editor,即会打开“光影看图”等软件【方便查看编辑、复制粘贴】
  5. Web项目中:包名里面有汉字和下划线,并没有报错

 

 

转载地址:https://blog.csdn.net/YuDBL/article/details/104365911 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:如何让Mac OS X系统显示资源库文件夹?
下一篇:java服务器端开发-servlet:1、认识Servlet,如:web开发背景、什么是servlet、如何开发一个servlet等

发表评论

最新留言

很好
[***.229.124.182]2024年04月06日 06时12分06秒