web常用对象

web常用对象

一、HttpServletRequest 对象

1.1 常用形式

1)常用方法

常用方法 描述
getRequestURL() 获取客户端发出的请求时的完整 URL
getRequestURI() 获取请求行中的资源名称部分(项目名称开始)
getQueryString() 获取请求行中的参数部分
getMethod() 获取客户端请求方式
getProtocol() 获取 HTTP 版本号
getContextPath() 获取 webapp 名字

2) 获取请求头

方法 描述
getHeader(String) 获取单个请求头内容
Enumeration getHeaderNames() 获取所有的请求头名称集合

3) 获取客户端请求参数(客户端提交的数据)

方法 描述
getParameter(name) 获取指定名称的参数
getParameterValues(String name) 获取指定名称参数的所有值
getParameterNames() 获取一个包含请求消息中的所有参数名的 Enumeration 对象
getParameterMap() 返回一个保存了请求信息中的所有参数名称和值的Map对象

1.2 请求乱码解决

原创博客:

https://blog.csdn.net/L6_6LXXX/article/details/100549484

1.3请求转发

1)定义:

请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的 URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。

2)写法:

request.getRequestDispatcher("转发的路径").forward(request,response);

1.4request作为域对象

1)定义:

通过该对象可以在一个请求中传递数据

2)作用范围:

在一次请求中有效及服务器跳转无效,

:经过请求转发,request域中的数据仍然存在。

3)相关方法:

request.setAttribute(String name, Object o); // 设置域对象内容 
request.getAttribute(String name); // 获取域对象内容 
request.removeAttribute(String name); //删除域对象内容

二、HttpServletResponse 对象

2.1 常用方法

常用方法 描述
addHeader(String name, String value) 添加指定的键值到响应头信息中
containsHeader(String name) 判断响应的头部是否被设置
encodeURL(String url) 编码指定的 URL
sendError(int sc) 使用指定状态码发送一个错误到客户端
setHeader(String name, String value) 设置指定响应头的值
setStatus(int sc) 给当前响应设置状态
setContentType(String ContentType) 设置响应的 MIME 类型
getWriter() 获取输出字符流
getOutputStream() 获取输出的字节流

2.2 刷新和页面自动跳转

1)刷新:

response.setHeader("refresh","2");//在请求头中添加定时刷新信息,单位为秒

2)页面跳转:

response.setHeader("refresh","3;URL=跳转页面的地址");//但该方法返回后刷新就无法跳转了

一般采用 HTML 的方式进行设置

<meta http-equiv="refresh" content="3;http://www.baidu.com" />

2.3 数据响应

1)获取字符流

PrintWriter out = resp.getWriter(); 
out.write("

Hello World

"
);

2)获取字节流

ServletOutputStream out = resp.getOutputStream(); 
out.write("

Hello World

"
).getBytes());

注意:

1. 字符流只能响应字符
2. 字节流能响应一切(图片等等)
3. 两者不能同时使用

2.4 乱码解决

字符字节通用解决方法:

保证发送端和接收端的编码一致

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

总结:

要想解决响应的乱码,只需要保证使用支持中文的编码格式。并且保证服务器端 和客户端使 用相同的编码方式即可。

2.5 响应图片

在客户端解析资源时默认是以文本(text/html)的形式,当响应图片时需要指定响应头信息,告知客户端响应内容为图片形式,使用一种叫做 MIME 类型的东西来指定。MIME 类型见 Tomcat 的 web.xml 文件。

如下(只截取了一部分):

<mime-mapping> 
    <extension>jpegextension> 
    <mime-type>image/jpegmime-type> 
mime-mapping> 
<mime-mapping> 
    <extension>jpgextension> 
    <mime-type>image/jpegmime-type> 
mime-mapping> 
<mime-mapping> 
    <extension>jpgmextension> 
    <mime-type>video/jpmmime-type> 
mime-mapping> 
<mime-mapping> 
    <extension>jpgvextension> 
    <mime-type>video/jpegmime-type> 
mime-mapping> 
<mime-mapping> 
    <extension>jpmextension>
    <mime-type>video/jpmmime-type> 
mime-mapping>

代码

    //通过输入流读取图片,然后通过输出流输出图片
	//设置响应字符集
    response.setContentType("text/html;charset=utf-8");
    // 获取用户请求图片名称参数
    String imageName = request.getParameter("imageName");
    // 判断参数
    if(imageName == null || "".equals(imageName)){
        response.getWriter().write("请告诉我你要看啥图片");
        return;
    }
    // 获取图片路径
    String realPath = request.getServletContext().getRealPath("/WEB-INF/image/");
    System.out.println(realPath);
    System.out.println(realPath + imageName);

    // 得到图片
    //路径无法确定
    //File file = new File("E:/Journey/Mage/class/06middle/code/servletResponse/WebContent/image/timg.jpg");

    File file = new File(realPath + imageName);
    // 判断是否存在并且是否是文件
    if(file != null && file.isFile()){
        // 判断用户访问的图片类型
        String imageType = imageName.split("\\.")[1];
        if("jpg".equals(imageType) || "jpeg".equals(imageType)){
            response.setContentType("image/jpeg;charset=utf-8");
        }else if("png".equals(imageType)){
            response.setContentType("image/png;charset=utf-8");
        }else if("gif".equals(imageType)){
            response.setContentType("image/gif;charset=utf-8");
        }
        // 是文件
        // 获取输入流
        FileInputStream in = new FileInputStream(file);
        // 获取字节输出流
        ServletOutputStream out = response.getOutputStream();
        // 响应图片
        // 创建字节数组
        byte[] car = new byte[1024];
        int len = 0;
        while((len = in.read(car)) != -1){
            out.write(car, 0, len);
        }
        // 关闭
        in.close();
        out.close();
    }else{
        // 不是文件或者不存在
        response.getWriter().write("请输入正确的图片名称");
        return;
    }

2.6 重定向跳转

1) 定义:

重定向是一种服务器指导客户端的行为。客户端发出第一个请求,被服务器接收,经过处理服务器进行响应,与此同时,服务器给客户端一个地址(重定向跳转请求的地址response.sendRedirect(“url”);),当客户端接收到响应后,立刻、马上、自动根据服务器给的地址进行第二个请求的发送,服务器接收请求并作出响应,重定向完成。从描述中可以看出重定向当中有两个请求存在,并且属于客户端行为

2) 写法:

response.sendRedirect("index.html")

三、请求时的路径问题

相对路径

相对当前资源的路径

绝对路径

以 http:// 开头,只有客户端跳转才能使用,此时需要写出资源的完整路径

以 / 开头,则是绝对到端口后的

注意:

  • 浏览器中:“/”代表的是 http://主机|IP:端口 (重定向)

  • 服务器中:“/”代表的是 http://主机|IP:端口/站点名 (请求转发)

四、Cookie

4.1Cookie 的创建和发送

// 创建Cookie对象 
new Cookie(“key”,”value”); 
// 响应给客户端 
response.addCookie(cookie);

4.2 Cookie 的获取

// 获取客户端的Cookie数组 
Cookie[] cookies = req.getCookies(); 
// 判断是否为空 
if(cookies != null && cookies.length > 0){ 
    // 遍历 
    for (Cookie cookie : cookies) { 
        // 获取键名 
        String name = cookie.getName(); 
        // 获取键值 
        String value = cookie.getValue(); 
        System.out.println("键:" + name + ",值:" + value); 
    } 
}

4.3 Cookie 到期时间的设定

方法:

 setMaxAge(int expiry);

参数的含义:

  • 负整数:cookie 的 maxAge 属性的默认值就是 -1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。

  • 正整数:表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。

  • :cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的 setMaxAge(0) 来删除这个 Cookie。 无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。

4.4 注意

  • Cookie 中如果有中文则通过 URLEncoder.encode() 来进行编码,获取时通过 URLDecoder.decode() 来进行解码。
  • Cookie 的存储是有上限的
  • 服务器端发送重复名称且路径一致的 Cookie 那么会覆盖原有的 Cookie。

你可能感兴趣的:(程序员小姿)