HTTP请求和响应处理

1.信息的处理(一切都是数据的处理和描述)

HttpServletRequest是对HTTP请求的描述(这里是封装或抽象)

 

HttpServletRequest&HttpServletResponse分别对请求和响应的处理,它们处理过程都分为2种: 1)设置型 2)数据处理型 。往往设置型的方法需要先调用,因为---这是常识....

 

2.Http是请求和响应的方式,一次请求和响应就是一个生命周期,所以有数据返回到浏览器端就代表生命周期开始结束,此时再进行响应方面的其它操作会出错(请求转发)或无效...........

 

3. / 与没有/

<servlet-mapping>
    <servlet-name>HeaderDemo</servlet-name>
    <url-pattern>/header.do</url-pattern>
  </servlet-mapping>

<url-pattern>需要使用/,不然会报错

这里/header.do代表了http://www.localhost:8080/webapps/header.do的请求

/代表了相对与web应用程序的根目录

及:url-pattern是根据url来匹配的而不是根据jsp中action的值

 

 

<form action="/header.do" method="post">

 <input type="submit" value="submit" /><br>
</form>

action="/header.do"

 

开始在此页面下显示jsp

http://localhost:8080/LGG_LXL_Book_ServletJsp/jsp/header.jsp

点击后为

http://localhost:8080/header.do

 

所以action="/header.do"的/代表了相对服务器的根目录

 

4.HttpServlet部分源代码

例如:注意粗体部分 

 protected void doPut(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

        String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_put_not_supported");
        if (protocol.endsWith("1.1")) {
            resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
        } else {
            resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
        }
    }

 

 

5.中文处理问题

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

 

request.setCharacterEncoding("utf-8");//指定浏览器数据的文字编码,默认按照ISO-8859-1处理字符串

 

String name = new String("abcde...".getBytes("ISO-8859-1"),"UTF-8") ;

"abcde..."是按照ISO-8859-1解码

name编码是utf-8

 

 

 6.请求转发是request发出的,在容器内进行,不涉及浏览器端,所以浏览器地址栏不进行变化

 

 

7.HttpServeltResponse --- setContentType

 

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

==

response.setHeader("content-type","text/html;charset=utf-8");

response.setCharacterEncoding("utf-8");

setHeader()可直接设置某个标头名称的值,重复此方法后面的会覆盖前面的值

addHeader()在同一标头下,附加其它的值

 

8.HttpServletResponse --- sendRedirect与sendError

response.sendRedirect("....");

 这个方法会在响应中设置HTTP状态码301以及Location标头,Location标头要求浏览器重定向到此处,所以浏览器地址栏会改变

Ps:

要求这个方法在执行时,没有开始响应(即没有数据放回到浏览器中)

 

处理请求的过程中发现一些错误时:

response.sendError(HttpServletResponse.SC_NOT_FOUND);//发送默认的错误信息

response.sendError(HttpServletResponse.SC_NOT_FOUND,msg);//发送msg

Ps:

同样sendError()必须在响应没有输出前执行

 

 

9.ServeltOutputStream的使用

 

对浏览器进行字节的输出

 

Ps:

同一个请求周期中,进行字节输出时,不能再进行字符的输出

即: HttpServletResponse的getWriter()与getOutputStream()只能使用一个

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值