javaweb知识点总结(request和response)

一.HttpServletResponse
1.http协议:web服务器收到客户端的http请求,会针对每一次请求,分别创建一个request和response
2.HttpServletResponse
2.1响应行   setStatus
2.2响应头   
2.2.1setHeader   请求响应头信息
A.刷新页面
response.setHeader("refresh","1");
B.没有缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
C.设置过期的时间
response.setDateHeader("Expires", System.currentTimeMillis()+自己设置的时间期限);
D.访问别的页面
response.setStatus(302); response.setHeader("location","url");
E.下载文件用于设置文件类型
response.setHeader("Content-Type","video/x-msvideo");
F.通知浏览器数据采用的压缩格式和长度
通知浏览器数据采用的压缩格式:response.setHeader("Content-Encoding","压缩后的数据");  
高速浏览器压缩数据的长度:response.setHeader("Content-Length",压缩后的数据.length+"");
G.高速浏览器图片或视频
response.setHeader("Content-type","这个参数在tomcat里conf下的web.xml里面找");
K.高速浏览器已下载
response.setHeader("Content-disposition","attachment;filename=2.jpg");
2.2.2Response.setRedirect 请求重定向
转发和重定向
1.request封装的对象是可以取到,重定向是取不出request封装的属性
2.request是服务器请求资源,url不变,重定向是根据url改变
3.request转发的path只能是项目中的path,重定向location可以是项目外的地址
4.请求转发到servlet中dopost过来就是dopost,doget请求过来就doget  ,重定向到servlet都是doget执行
5.forward更高效

3.响应正文
字符输出流   getWriter()
字节输出流   getOutPutStream()  界面输出字符
服务器用编码 setCharacterEncoding(String charset)
            setContentType(String type)


二.HttpServletRequest
1.请求行
getMethod(); 获得请求方式                      GET                                     
getRequestURL();返回客户端发出请求时的完整URL。//http://localhost:8080/TestWeb/request
getRequestURI(); 返回请求行中的资源名部分。 /TestWeb/request
getContextPath(); 当前应用的虚拟目录 /TestWeb
getQueryString() ; 返回请求行中的参数部分。http://localhost/test.do?a=b&c=d&e=f得到a=b&c=d&e=f

2.请求消息头
 String        getHeader(String name)  根据头名称得到头信息值
 Enumeration   getHeaderNames()  得到所有头信息name
 Enumeration   getHeaders(String name)  根据头名称得到相同名称头信息值
 
        Enumeration headers=request.getHeaders("accept-language");
        while (headers.hasMoreElements()){
            String e=(String)headers.nextElement();
            System.out.println(request.getHeader(e));
        }

        Enumeration names=request.getHeaderNames();
        while(names.hasMoreElements()){
            String e=(String) names.nextElement();
            System.out.println(request.getHeader(e));
        }
浏览器:
String header=request.getHeader("User-Agent");
        System.out.println(header);
        if(header.toLowerCase().contains("mise")){
            System.out.println("IE");
        }else if(header.toLowerCase().contains("firefox")){
            System.out.println("火狐");
        }else if(header.toLowerCase().contains("chrome")){
            System.out.println("谷歌");
        }else{
            System.out.println("其他浏览器");
        }
 
 
 
3.请求正文
A.获取表单数据
<input type="text" name="username" />
*** getParameter(name) 根据表单中name属性的名,获取value属性的值方法 
*** getParameterValues(String name)专业为复选框取取提供的方法   String [] hobbys=request.getParameterValues("hobby");
    getParameterNames() 得到表单提交的所有name的方法 
    
    Enumeration names=request.getParameterNames();
      while(names.hasMoreElements()){
          String name=(String) names.nextElement();
          String []values=request.getParameterValues(name);
          for (int i=0;values!=null&&i<values.length;i++){
              System.out.println(name+"\t"+values[i]);
          }

      }
    
    
    
    
    
*** getParameterMap 到表单提交的所有值的方法   //做框架用,非常实用

Map<String,String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> m : map.entrySet()) {
                String name = m.getKey();
                String[] value = m.getValue();
}

    getInputStream  以字节流的方式得到所有表单数据
    
B.作为域对象(作用范围是在服务器间同一请求不同页面之间的参数传递)
*** void setAttribute(String name, Object value);
*** Object getAttribute(String name);
Void removeAttribute(String name);


C.与请求转发相关的方法
//得到请求转发或请求包含的协助对象
RequestDispatcher getRequestDispatcher(String path)
forward(ServletRequest request, ServletResponse response) //转发的方法
include(ServletRequest request, ServletResponse response) //请求包含

forward方法在调用后响应中没有提交的内容会被自动消除,将请求转发给其他servlet,由被调用的servlet做出响应,而原先servlet
的执行终止,include方法使得原先的servlet和转发的Servlet都可以输出响应信息,原先的还可以继续输出响应信息


D.与请求编码相关的方法:
//解决post方式编码
*****request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式
//解决get方式编码
String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页