• Web阶段:第十章:Servlet下


    HttpServletRequest类
    a)HttpServletRequest类有什么作用。
    HttpServletRequest类它的作用是。每次只要有请求进来 。Tomcat服务器就会把请求的协议内容封装到HttpServletRequest对象中。
    我们主要是从Request类中获取请求的信息。它表示了请求的全部信息。

    b)HttpServletRequest类的常用方法
    getRequestURI() 获取请求请求资源地址
    getRequestURL() 获取请求的绝对路径(又叫统一资源定位符)
    getRemoteHost() 获取客户端的ip地址
    localhost做为ip访问得到0:0:0:0:0:0:0:1
    127.0.0.1 做为ip访问得到 127.0.0.1
    getHeader() 获取请求头
    getParameter() 获取请求的参数
    getParameterValues() 获取请求参数(多个值)
    getMethod() 获取请求的方式GET或POST
    域对象
    setAttribute(key, value); 保存数据
    getAttribute(key); 获取数据

    getRequestDispatcher() 获取请求转发对象
    getCookies() 获取Cookie对象
    getSession() 获取Session对象

    reqeust常用API:

    protected void doGet(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
    		// i.getRequestURI() 获取请求请求资源地址
    		System.out.println(request.getRequestURI());
    		// ii.getRequestURL() 获取请求的绝对路径
    		System.out.println(request.getRequestURL());
    		// iii.getRemoteHost() 获取客户端的ip地址
    		System.out.println(request.getRemoteHost());
    		// iv.getHeader() 获取请求头
    		System.out.println(request.getHeader("User-Agent"));
    		System.out.println(request.getHeader("Host"));
    		// vii.getMethod() 获取请求的方式GET或POST
    		System.out.println(request.getMethod());
    }
    

    c)如何获取请求参数(重要)
    页面的表单:

        <body>
        		<form action="http://localhost:8080/day07/parameterServlet" method="get">
        			用户名:<input type="text" name="username" /><br/>
        			密码:<input type="password" name="password" /><br/>
        			兴趣爱好:
        				<input type="checkbox" name="hobby" value="cpp">C++
        				<input type="checkbox" name="hobby" value="C">C
        				<input type="checkbox" name="hobby" value="VB">Visual Basic
        				<input type="checkbox" name="hobby" value="js">JavaScript
        				<br/>
        				<input type="submit" />				
        		</form>
        </body>
    

    Servlet程序的代码:

        public class ParameterServlet extends HttpServlet {
        	private static final long serialVersionUID = 1L;
        
        	protected void doGet(HttpServletRequest request,
        			HttpServletResponse response) throws ServletException, IOException {
        		// 获取请求参数,用户名信息
        		String username = request.getParameter("username");
        		// 获取请求参数,密码信息
        		String password = request.getParameter("password");
        		// 获取兴趣爱好
        		String[] hobbies = request.getParameterValues("hobby");
        		System.out.println("用户名:" + username);
        		System.out.println("密码:" + password);
        		// Arrays.asList 把数组转换对应的List集合
        		if (hobbies != null) {
        			System.out.println("兴趣爱好:" + Arrays.asList(hobbies));
        		}
        	}
        }
    

    d)GET请求的中文乱码解决
    第一种方案:

    1、先把收到的请求参数以iso-8859-1进行编码
    2、再以UTF-8进行解码

    // 获取请求参数,用户名信息
    		String username = request.getParameter("username");		
    //		1、先把收到的请求参数以iso-8859-1进行编码
    		byte[] bytes = username.getBytes("iso-8859-1");
    //		2、再以UTF-8进行解码
    	username= new String(bytes, "UTF-8");
    

    第二种方案:
    找到Tomcat服务器的配置文件server.xml配置文件,找到Connector标签,添加URIEncoding=“UTF-8”

     <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
    

    e)POST请求的中文乱码解决
    第一种方案(不推荐使用):

    //		1、先把收到的请求参数以iso-8859-1进行编码
    		byte[] bytes = username.getBytes("iso-8859-1");
    //		2、再以UTF-8进行解码
    		username= new String(bytes, "UTF-8");
    

    第二种方案(推荐使用):

    // 解决post中文乱码终极方案
    // 一定要在调用getParameter方法之前才有效
    request.setCharacterEncoding("UTF-8");
    

    f)请求的转发(在jsp的时候使用)
    在这里插入图片描述
    g)Base标签的作用
    在这里插入图片描述
    h)Web中的相对路径和绝对路径
    相对路径:
    ./ 当前目录
    …/ 上一级目录
    资源名 相当于./资源名 ./可以省略
    绝对路径:
    http://ip:port/工程名/资源名
    在实际项目开发中,不允许简单的使用相对路径!!!
    实际项目开发中,只能使用绝对路径 或 base+相对

    i)web中/斜杠的不同意义

    斜杠/ 就是表示一个绝对路径。
    / 在html页面上,被浏览器解析得到是:http://ip:prot/
    / 在服务器代码上。表示: http://ip:port/工程名/
    在web.xml中配置url-pattern /hello ====>>>> http://ip:port/工程名/hello
    请求转发request.getRequestDispatcher("/a/b/c.html") 表示http://ip:port/工程名/a/b/c.html
    servletContext.getRealPath(“/”); =====>>>>>> 表示到http://ip:prot/工程名/
    服务器代码中的特殊情况:
    response.sendRedirect(“/”); =====>>>> 表示到端口号http://ip:prot/

    6.HttpServletResponse类
    a)HttpServletResponse类的作用
    httpServletResponse类,表示响应。所有响应的http协议都可以通过HttpServletResponse类去进行设置。
    每次请求进来都会创建一个Request对象,也会创建一个Response对象。Tomcat服务器负责创建。
    b)两个输出流的说明。
    响应有两种流,一种是字符流,一种是字节流。
    response.getOutputStream() 字节流 文件下载使用
    response.getWriter() 字符流 回传字符串信息(使用频率最高)
    你使用了字节流,就不能使用字符流,
    你使用字符流,就不能使用字节流。
    两个流同时使用就会出现如下异常:
    在这里插入图片描述
    c)如何往客户端回传数据

     protected void doGet(HttpServletRequest request,
        			HttpServletResponse response) throws ServletException, IOException {
        		// 往客户端回传字符串数据
        		// 1、先获取字符流
        		PrintWriter writer = response.getWriter();
        		// 2、调用字符流的write方法输出字符串
        		writer.write("this is the content of response!!!");
        }
    

    d)响应的乱码解决
    第一种方案(不推荐使用):

    // 设置响应的字符集为UTF-8,设置了服务器支持中文输出
    		response.setCharacterEncoding("UTF-8");
    		// ISO-8859-1 是默认的字符集,它不支持中文
    		System.out.println( response.getCharacterEncoding() );
    		// 设置响应头,Content-Type,
    		// text/html; 表示返回的是html内容。
    		// charset=UTF-8	告诉客户端使用UTF-8字符集查看 
    	response.setHeader("Content-Type", "text/html; charset=UTF-8");
    

    第二种方案是(推荐使用):

     // 同时设置服务器和客户端都使用UTF-8字符集,
    		// 并且还设置了响应头
    		// 必须在获取流对象之前调用
    	response.setContentType("text/html; charset=UTF-8");
    

    e)如何设置响应头和响应状态码

    protected void doGet(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("请求进来 了,这是Response1");
    		// 设置响应状态码302
    		response.setStatus(302);
    		// 设置响应头
    		response.setHeader("Location", "http://localhost:8080/day07/response2");
    }
    

    f)请求重定向

    //也是请求重定向(推荐)
    	response.sendRedirect("http://localhost:8080/day07/response2");
    

    请求重定向的特点:
    在这里插入图片描述
    请求转发和重定向的对比
    在这里插入图片描述

  • 相关阅读:
    SpringMVC(三) RESTful架构和文件上传下载
    SpringMVC(二) 参数绑定 与 JSON
    SpringMVC(一) 简单代码编写,注解,重定向与转发
    Spring深入浅出(三)XML方式以及注解的方式操作IOC
    Markdown 语法整理
    前端开发中一些好用的chrome插件汇总
    vue-cli项目配置mock数据
    HTTP协议详解
    JS判断IE6/IE7/IE8系列的写法
    ES6新特性(转)
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812109.html
Copyright © 2020-2023  润新知