servlet中Request与response使用

服务器根据请求自动创建传入HttpServletRequest对象和HttpServletResponse对象

@Override

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

         ……处理代码

}

HttpServletRequest(请求)

处理请求行(http:\localhost:8080\pro\haha?name=zs&age=18)

    getRequestURL()   获取?前的路径  (http:\localhost:8080\pro\haha)

    getRequestURI()   获取站点名到?前的路径 (pro\haha)

    getQueryString() 获取请求参数(name=zs&age=18)

    getMethod()       获取请求类型(get post)

其他:getProtocol获取http版本号,getContexPath获取webapp名(项目名)

处理请求头

    getHeader(String) 获取单个请求头内容 string为key值不区分大小写

    getHeaderName() 获取请求头名的枚举集合通过Enumeration<String>接收

获取请求参数

    getParameter(“key”)      获取客户端上传的参数

    getParameterValues(“key”) 若一个key对应多个值(多选框等)返回数组对象

    getParameterNames()      获取所有请求参数的名称, 枚举类集合接收

       getParametermap()        获取所有请求参数,Map<String,String[]>接收

设置请求的参数(用于对象传递中使用)

    setAttribute(“key”,value)    设置域对象内容

    getAttribute(“key”)          获取域对象内容

    removeAttribute(“key”)       删除域对象内容

 

解决请求参数乱码问题

request接收的参数,在解析过程中使用了默认的编码方式为 (ISO-8859-1)不支持中文

post请求在Tomcat中都存在报错,get在Tomcat7中存在报错

解决方式

post解决方式

    request.setCharacterEncoding("UTF-8")   直接设置解析编码 对get无效

get解决

new String(request.getParameter(key).getBytes("ISO-8859-1"),"UTF-8")

只能一次处理一个参数值的编码错误

若参数本身无编码错误,反而会造成编码错误

 

请求转发

用于服务内部的资源跳转,浏览器的地址不会变更

request.getRequestDispatcher(“目标资源”).forward(request,response)

指定转发路径,并传递请求对象和响应对象.实现对象共享.

目标资源使用外部访问名

 

request 作用域只在一次请求中有效中有效,包含请求转发

 

   

HttpServletResponse(响应)

处理响应头

    addHeader(“key”, “value”)    增加响应头参数

    setHeader(“key”, “value”)    设置响应头参数

       设置自动刷新或重定向(不设url可自刷新)

       setHeader("refresh", "3;http://www.baidu.com") 3秒后刷新至百度

sendError(500, “错误描述”)    设置页面报错(响应头)

输出响应数据

    setContentType(“参数;参数”)      设置响应数据类型和编码格式

参数在Tomcat 的 web.xml 文件中<mime-mapping>查找获取

text/html类型为html类型

image/jpeg响应jpg图片

    getOutputStream()     获取输出的字节流

    getWriter()           获取输出的字符流

    注: 两个流不能同时使用 否者报错(java.lang.IllegalStateException)

       流需要关闭.close()

       常用文本输出getWriter().write("输出文本")

sendRedirect(“url”)   重定向

       服务器指导客户端的行为,客户端根据重定向立即重新请求对应的数据

       http://www.baidu.com或者 端口之后的绝对路径/相对

 

乱码处理

    服务器响应的数据编码与客户端解析编码方式存在差异

    setContentType("text/html;charset=UTF-8")  

设置响应头中数据类型和编码类型

 

响应图片

    获取当前项目路径,获取图片的绝对路径

拼接得到图片完整路径,生成file, io传输

String realPath = getServletContext().getRealPath("/")

获取项目在服务器中的真实路径

    String filePath = realPath + "/WEB-INF/images/jay.jpg"

       获取图片路径,并完成拼接

    File file = new File(filePath)

       获取文件

 

请求转发和重定向区别

请求转发

request.getRequestDispatcher(“url”).forward(request,response)

返回请求地址栏不发生改变,只执行一次请求

服务端内部跳转, request作用域共享,

转发对象为当前项目资源()

地址站点名后的不完全路径,从项目名之后开始

重定向

1、地址栏发生改变  2、客户端跳转  3、存在两次请求request作用域不共享

4、指定任意地址,可跨域 若是本服务内容 地址从端口号之后开始

 

路径问题

相对路径    相对于当前资源的路径开头不设/

绝对路径(完整路径)

1完整绝对路径

以 http://开头的,能够跨域

2部分绝对路径

"/"开头,从当前域名|IP|主机后的端口号开始的

"/"的含义:

 请求转发:

代表的是 http://localhost:8080/站点名/

重定向(客户端跳转):

代表的是   http://localhost:8080/

 

 

posted @ 2019-07-08 08:34  小布大佬  阅读(1537)  评论(0编辑  收藏  举报