当前位置: 代码迷 >> Web前端 >> <转>java web中Servlet处置Http请求与
  详细解决方案

<转>java web中Servlet处置Http请求与

热度:246   发布时间:2012-10-27 10:42:25.0
<转>java web中Servlet处理Http请求与

Servlet处理HTTP请求
??HTTP请求
????HTTP请求包括请求行、请求头、消息体以及分隔请求头和消息体的一个空行
????HTTP的请求方法
??????get和post方法的比较
????????提交数据类型
??????????get:文本
??????????post:文本和二进制文本
????????提交数据长度
??????????get:不超过255个字符
??????????post:没有限制
????????提交数据可见性
??????????get:作为URl地址的一部分显示在浏览器地址栏
??????????post:作为请求的消息体,不可见
????????提交数据缓存
??????????get:缓存在浏览器URL历史状态中,就是可以回退到原来的网页
??????????post:不会被浏览器缓存
????????????如果html中没有具体制定method属性,浏览器默认将缺省使用get方法。
???????????如果使用post请求,必须在表单中指定method='post'
?????????????Http请求通过httpServletRequest对象代表。HttpServletRequest
????????????对象主要用于获取由客户端发送过来的 请求头、参数、文件、数据等
???????????用户在网页上点击一个超链接
?????????????用户提交在网页上填好的表单
???????????用户在浏览器地址栏中输入URl地址并回车
??HTTP请求行和请求头
????请求行
??????HTTP方法
??????请求的URL
??????HTTP版本
??????获取HTTP的请求方法用getMethod()方法
????请求头
??????用于告诉服务器客户端使用什么软件以及客户端想要的服务器如何返回请求的信息
??????通过请求头我们可以知道浏览器可以使用的字符集类型、
??????浏览器使用的语言类型、浏览器的类型、浏览器是否支持压缩页面等
??获取表单数据
????在HttpServletReuest对象中最常用的方法是获取请求参数的方法
??????getParameter()
????????获取表单参数的值,参数名区分大小写,名要与HTML一致,
?????????该方法返回与用户输入完全一致的字符串对象
??????getParameterValues()
????????获取同一个参数名的多个参数值,返回字符串数组对象
????获取原始表单数据
??????数据不是由HTML表单提交,而是来自某个用户端程序,需要自己读取和解析这些数据
??????数据来自于上传的文件时,需要自己读取数据
??请求转发
????forward()方法派发请求和响应对象到RequestDispatcher对象所确定的新资源,
?????该资源利用请求和响应对象来处理HTTP请求
????include()方法的使用与forward()方法类似,但也有一些限制,
??????该方法关键能包含服务器端的资源, 被包含的资源不能改变响应状态码或设置头信息。
????重定向和请求转发之间最大的区别在于,重定向让客户端浏览器来完成,
??????而请求转发是在服务器端作工作
????响应重定向会执行两次请求,而请求转发只会执行一次

?

?

?HTTP请求行和请求头
????请求行
??????HTTP方法
??????请求的URL
??????HTTP版本
??????获取HTTP的请求方法用getMethod()方法
????请求头
??????用于告诉服务器客户端使用什么软件以及客户端想要的服务器
??????如何返回请求的信息
??????通过请求头我们可以知道浏览器可以使用的字符集类型、
??????浏览器使用的语言类型、浏览器的类型、浏览器是否支持
???????压缩页面等获取表单数据
????在HttpServletReuest对象中最常用的方法是获取请求参数的方法
??????getParameter()
????????获取表单参数的值,参数名区分大小写,名要与HTML一致,
?????????该方法返回与用户输入完全一致的字符串对象
??????getParameterValues()
????????获取同一个参数名的多个参数值,返回字符串数组对象
????获取原始表单数据
??????数据不是由HTML表单提交,而是来自某个用户端程序,需要自己读取和解析这些数据
??????数据来自于上传的文件时,需要自己读取数据
??请求转发
????forward()方法派发请求和响应对象到RequestDispatcher对象所确定的新资源,
?????该资源利用请求和响应对象来处理HTTP请求
????include()方法的使用与forward()方法类似,但也有一些限制,
??????该方法关键能包含服务器端的资源, 被包含的资源不能改变响应状态码或设置头信息。
????重定向和请求转发之间最大的区别在于,重定向让客户端浏览器来完成,
??????而请求转发是在服务器端作工作
????响应重定向会执行两次请求,而请求转发只会执行一次

?


用servlet处理HTTP响应信息
??HTTP请求的处理过程,就是Servlet 发送服务器端响应信息
????web浏览器通过打开一个到web服务器的TCP??Scoket套接字初始化一个HTTP请求
????对于一个Servlet的每次访问请求,Web容器都会解析Socket输入流中的HttP请求数据,
????创建一个请求对象。同时创建一个响应对象,用于产生Scoket输入流中的HTTP响应流
????web容器调用所请求的servlet对象的service()方法,并将请求和响应对象作为参数传递给该方法。
????HttpServletRosponse对象给Servlet提供一个PrintWriter对象,使Servlet可以产生响应消息体
??设置相应状态行
????设置响应状态行
??????HTTP状态码
????????100-199:表示信息性代码,表示客户端应该采取的其他动作,请求正在运行
????????200-299:表是客户请求成功
????????300-399:表示用于已经移走的资源文件,指示新的地址
????????400-499:表示由客户端引发的错误
????????500-599:表示有服务器端引发的错误
??????设置状态码
????????Servlet设置状态码,有的方法是setStatus(),参数为一个整数,为了避免直接输入整数,设置了 常量来避免错误。
????????Servlet中没有规定Servlet必须缓存消息体,因此要在使用PrintWerter输出消息体前要设置状态码
????????sendError()方法生成一个404应答,同时生成一个简单的HTML错误信息文档返回给用户
????????SendRedircet()方法生成一个302应答,同时在location头中指示新文档的URL地址
????设置响应头
??????用于告诉客户端:发送回来的内容的类型、有多少类容被征被发送及发送类容的服务器的类型
????设置响应消息体
??????传递文本流
????????getWriter()方法用于得到一个输出流来发送HTML标记
??????传递二进制流
????????getOutputStream()方法是需要对发送到客户端的信息进行更多操作时用
??重定向
????Web浏览器通过HTTP发送请求
????服务器端相应是的Servlet把真实连接URL和302响应码发送到客户端
????响应结束浏览器断开当前连接,然后再根据Location响应头的url地址重新发出HTTP请求
????方法sendRedir()

  相关解决方案