学习HttpServletRequest和HttpServletResponse的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoweiccc/article/details/83716326

注意:再提醒,在调试网页时,务必要注意浏览器有缓存记录,所以在调试的时候需要注意,减少不该有的困扰,别浪费时间~

HttpServletRequest:封装了客户端提供过来的一切数据.

  1. 可以获取客户端的请求头信息
  2. 获取客户端提交的数据
  3. 获取中文数据

但是在处理中文的数据过程中,有可能会出现乱码,这里根据get和post请求两种不同的情况进行讲解。
    1)get请求时:
     get请求过来的数据,在url地址栏上已经经过编码了,所以我们得到的是乱码;

     tomcat收到了数据,getParameter默认使用ISO-  8859-1  去编码;

     所以我们先让文字回到ISO-8859-1对应的字节数组,然后再按utf-8组拼字符串。

     我们也可以可以在tomcat里面做配置,使get请求过来的数据永远都是UTF-8编码,在conf->server.xml 加URIEncoding="UTF-8"

<Connector connectionTimeout="20000" port="9000" protocol="Http/1.1" redirectPort="8843" URIEncoding="UTF-8" />

    2)post请求时:需要在取数据之前设置指定的编码

测试参考代码如下:HServlet.java

package cw.Servlet;

import java.io.IOException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HServlet
 */
public class HServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.可以获取客户端的请求头信息
		Enumeration<String> headerNames=request.getHeaderNames();	//得到一个枚举集合
		while(headerNames.hasMoreElements()){
			String name=(String)headerNames.nextElement();
			String value=request.getHeader(name);
			System.out.println(name+"="+value);
		}
		
		//2.获取客户端提交的数据
			//http://localhost:9000/JavaWeb_1/HServlet?name=aa&&age=18
		String name2=request.getParameter("name");
		String age=request.getParameter("age");
		System.out.println("name="+name2);		//null
		System.out.println("age="+age);
		
		//Enumeration<String> parameterNames=request.getParameterNames();  //获取所有的参数,得到一个枚举集合
		Map<String,String[]> map=request.getParameterMap();
		Set<String> keySet=map.keySet();
		Iterator<String> iterator=keySet.iterator();
		while(iterator.hasNext()){
			String key=(String)iterator.next();
			String va=map.get(key)[0];
			System.out.println(key+":"+va);
		}		
		//3.获取中文数据
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		System.out.println(username+"..."+password);
		username=new String(username.getBytes("ISO-8859-1"),"UTF-8");
		System.out.println(username+"..."+password);
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 处理post请求过来的数据乱码
		// 需要在取数据之前设置指定的编码
		request.setCharacterEncoding("UTF-8");		//这里设置的是请求体里的文字编码
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		System.out.println(username+"..."+password);
		
	}

}

HttpServletResponse:负责返回数据给客户端

  1. 以字符流的方式写数据
  2. 以字节流的方式写数据

以下是关于HttpServletResponse常用的一些方法

设置当前这个请求的处理状态码    response.setHeader(arg0, arg1);
设置一个头    response.setHeader(name, arg1);
设置响应的内容类型,以及编码    response.setContentType(arg0);

与HttpServletRequest类似,在返回数据给客户端时,也存在着中文乱码的问题,所以需要解决有可能存在的中文乱码问题。中文乱码分为两种。

第一种是以字符流的方式写数据

如果用的是字符流,这里写出去的是默认ISO-8859-1,所以我们需要设置
        response.setCharacterEncoding("UTF-8");    //指定输出到客户端的时候,这些文字使用UTF-8编码
        response.setHeader("Content-Type","text/html;charset=UTF-8");    //直接规定浏览器看这个数据时,就是用UTF-8
        response.getWriter().write("大家好!");

第二种是以字节流的方式写数据

//直接规定浏览器看这个数据时,就是用UTF-8,且响应的数据类型是html文本
        response.setContentType("text/html;charset=UTF-8");
//默认情况下getOutputStream方法使用的是UTF-8的编码

//如果想指定具体编码,可以获取byte数组时指定.getBytes("UTF-8")
        response.getOutputStream().write("大家好!2".getBytes());

代码实现:

HServlet.java

package cw.Servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HServlet2
 */
public class HServlet2 extends HttpServlet {
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		//以字符流的方式写数据
		response.getWriter().write("hello");
		response.getWriter().write("<h1>hello</h1>");
		//以字节流的方式写数据
		//response.getOutputStream().write("hello2....".getBytes());
		
		//响应的数据包含中文,可能出现导致乱码
		//如果用的是字符流,这里写出去的是默认ISO-8859-1,所以我们需要设置
		response.setCharacterEncoding("UTF-8");	//指定输出到客户端的时候,这些文字使用UTF-8编码
		response.setHeader("Content-Type","text/html;charset=UTF-8");	//直接规定浏览器看这个数据时,就是用UTF-8
		response.getWriter().write("大家好!");
		
		//如果是用的是以字节流的方式
		//直接规定浏览器看这个数据时,就是用UTF-8,且响应的数据类型是html文本
		response.setContentType("text/html;charset=UTF-8");
		//默认情况下getOutputStream方法使用的是UTF-8的编码,如果想指定具体编码,可以获取byte数组时,指定。getBytes("UTF-8")
		response.getOutputStream().write("大家好!2".getBytes());
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

在使用servlet时,定义了一个login.html进行调试

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>请输入登陆信息</h2>
	<!-- <form action="LoginServlet" method="get"> -->
	<!-- <form action="HServlet" method="get"> -->
	<form action="HServlet" method="post">
		账号:<input type="text" name="username" />
		密码:<input type="text" name="password" />
		<input type="submit" name="登陆" />
	</form>	
</body>
</html>

web.xml配置文件中在新建Servlet中的自动配置情况:

好好学,慢慢来,坚持~

猜你喜欢

转载自blog.csdn.net/zoweiccc/article/details/83716326
今日推荐