javaweb学习总结(四)--http协议(2)

1.0 HttpServletRequest对象-java对http请求的封装

这个对象的主要作用是获取请求的参数信息

核心的API

请求行

request.getMethod(); //请求方式

requset.getRequetURI() / request.getRequestURL(); //获取请求资源的限定名

request.getProtocol() //请求的http协议版本

请求头

request.getHeader("名称")  //根据请求头名字,获取请求值

requset.getHeaderNames() //获取所有请求头的名称

实体内容

request.getInputStream() //获取实体数据内容

2.0 service和doXX方法的区别-源码分析

HttpSevlet类的源码:
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
       //得到请求方式
        String method = req.getMethod();

        if (method.equals(METHOD_GET)) {
            long lastModified = getLastModified(req);
            if (lastModified == -1) {
                // servlet doesn‘t support if-modified-since, no reason
                // to go through further expensive logic
                doGet(req, resp);
            } else {
                long ifModifiedSince;
                try {
                    ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
                } catch (IllegalArgumentException iae) {
                    // Invalid date header - proceed as if none was set
                    ifModifiedSince = -1;
                }
                if (ifModifiedSince < (lastModified / 1000 * 1000)) {
                    // If the servlet mod time is later, call doGet()
                    // Round down to the nearest second for a proper compare
                    // A ifModifiedSince of -1 will always be less
                    maybeSetLastModified(resp, lastModified);
                    doGet(req, resp);
                } else {
                    resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                }
            }

        } else if (method.equals(METHOD_HEAD)) {
            long lastModified = getLastModified(req);
            maybeSetLastModified(resp, lastModified);
            doHead(req, resp);

        } else if (method.equals(METHOD_POST)) {
            doPost(req, resp);

        } else if (method.equals(METHOD_PUT)) {
            doPut(req, resp);        

        } else if (method.equals(METHOD_DELETE)) {
            doDelete(req, resp);

        } else if (method.equals(METHOD_OPTIONS)) {
            doOptions(req,resp);

        } else if (method.equals(METHOD_TRACE)) {
            doTrace(req,resp);

        } else {
            //
            // Note that this means NO servlet supports whatever
            // method was requested, anywhere on this server.
            //

            String errMsg = lStrings.getString("http.method_not_implemented");
            Object[] errArgs = new Object[1];
            errArgs[0] = method;
            errMsg = MessageFormat.format(errMsg, errArgs);

            resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
        }
    }

3.0 传递的请求参数如何获取的问题

核心的API

request.getParameter("参数名");  //根据参数名获取参数值(只能获取一个值的参数)

request.getParameterValue("参数名"); //根据参数名获取参数值(获取多个参数的值)

request.getParameterNames();  //获取所有参数名称列表

4.0 请求参数的编码问题--中文乱码问题

  修改POST方式参数编码

request.setCharacterEncoding("utf-8");

修改GET方式参数编码

手动解码

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

5.0 Http响应

http响应的具体内容

HTTP/1.1 200 OK                --响应行
Server: Apache-Coyote/1.1         --响应头(key-vaule)
Content-Length: 24
Date: Fri, 30 Jan 2015 01:54:57 GMT
                                   --一个空行
this is hello servlet!!!                  --实体内容

5.1响应行

#HTTP协议版本

#响应状态码

  200  表示请求处理完成并完美返回

302  表示请求需要进一步细化

404  表示客户访问资源找不到

500  表示服务器资源发送错误(服务器内部错误)

#状态描述

5.2响应头

常见响应头

Location: http://www.it315.org/index.jsp   -表示重定向的地址,该头和302的状态码一起使用。
Server:apache tomcat                 ---表示服务器的类型
Content-Encoding: gzip                 -- 表示服务器发送给浏览器的数据压缩类型
Content-Length: 80                    --表示服务器发送给浏览器的数据长度
Content-Language: zh-cn               --表示服务器支持的语言
Content-Type: text/html; charset=GB2312   --表示服务器发送给浏览器的数据类型及内容编码
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  --表示服务器资源的最后修改时间
Refresh: 1;url=http://www.it315.org     --表示定时刷新
Content-Disposition: attachment; filename=aaa.zip --表示告诉浏览器以下载方式打开资源(下载文件时用到)
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search   --表示服务器发送给浏览器的cookie信息(会话管理用到)
Expires: -1                           --表示通知浏览器不进行缓存
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive           --表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接

5.3实体内容

6.0 HttpServletResponse对象 --java针对http响应处理的api

1.响应行

response.setStatus() //设置状态码

2.响应头

response.setHeader("name","value")  //设置响应头

3.实体内容

response.getWriter().writer();  //发送字符实体内容

response.getOutputStream().writer(); //发送字节实体内容

时间: 2024-10-14 03:59:27

javaweb学习总结(四)--http协议(2)的相关文章

javaweb学习总结(四)——Http协议

一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程.客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式. 二.HTTP协议的版本 HTTP协议的版本:HTTP/1.0.HTTP/1.1 三.HTTP1.0和HTTP1.1的区别 在HTTP1.0协议中,客户端

javaweb学习总结(四) - - http协议

一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程.客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式. 二.HTTP协议的版本 HTTP协议的版本:HTTP/1.0.HTTP/1.1 三.HTTP1.0和HTTP1.1的区别 在HTTP1.0协议中,客户端

javaweb学习总结(四)--http协议(1)

1.1.什么是http协议 定义:对浏览器客户端和服务器1之间数据传输的格式规范 1.2.怎么查看http协议 1)为火狐浏览器下载firebug插件(右键 -> firebug -> 网络) 2).使用谷歌的“审查元素” 3).使用系统自带的telnet工具(远程访问工具) a)telnet localhost 8080 访问tomcat服务器 b)ctrl+"]" 回车可以看到回显 c)输入请求内容 GET /访问web应用的路径 HTTP/1.1 Host:local

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet 一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet-name>ActionServlet</servlet-name> 3 <servlet-class>me.gacl.web.controller.ActionServlet</s

javaweb学习总结(四十六)——Filter(过滤器)常见应用

一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 1 package me.gacl.web.filter; 2 3 import java.io.IOException; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.FilterConfig; 7 import javax.servlet.Serv

javaweb学习总结(四十一)——Apache的DBUtils框架学习

一.commons-dbutils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernate的公司的首选. commons-dbutilsAPI介绍: org.apache.commons.dbutils.QueryRunner org.apache.commons.dbutils.Resul

JavaWeb学习总结(四十九)——简单模拟Sping MVC

在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: 1 /** 2 * 使用Controller注解标注LoginUI类 3 */ 4 @Controller 5 public class LoginUI { 6 7 //使用RequestMapping注解指明forward1方法的访问路径 8 @RequestMapping("LoginUI/Lo

JavaWeb学习(四)-Cookie实现记住密码的功能

本文主要内容: •1.什么是Cookie •2.Cookie带来的好处 •3.Cookie的主要方法 一.什么是Cookie cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段.Cookie的目的就是为用户带来方便,为网站带来增值.虽然有着许多误传,事实上Cookie并不会造成严重的安全威胁.Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统.另外,由于浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为

javaweb学习总结(四十五)——监听器(Listener)学习二

一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换