3|Servlet

HttpServletRequest类有什么用

每次只要有请求进入Tomcat服务器,
Tomcat服务器就会把请求过来的HTTP协议信息解析好
封装到Request对象中,然后传递到service()方法
[doGet和doPost]中给我们使用,我们通过
HttpServletRequest对象,获取到所有请求的信息

HttpServletRequest类的常用方法

1.getRequestURI() 获取请求的资源路径
2.getRequestURL()  获取请求的统一资源定位符(绝对路径)
3. getRemoteHost()   获取客户端的IP地址
4. getHeader()   获取请求头
5. getParameter()  获取请求的参数
6. getParameterValues() 获取请求的参数(多个值的时候使用)
7. getMethod()    获取请求的方式GET或POST
8. setAttribute(key,value) 设置域数据
9. getAttribute(key)        获取域数据
10.getRequestDispatcher()   获取请求转发对象
package com.servlet;

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

/**
 * Servlet implementation class RequestAPIServlet
 */
@WebServlet("/RequestAPIServlet")
public class RequestAPIServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RequestAPIServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
//	    1.getRequestURI() 获取请求的资源路径
		
		System.out.println("URI=>"+request.getRequestURI());//URI=>/pracitce1/RequestAPIServlet
//		2.getRequestURL()  获取请求的统一资源定位符(绝对路径)
		System.out.println("URL=>"+request.getRequestURL());//URL=>http://localhost:8080/pracitce1/RequestAPIServlet
//		3. getRemoteHost()   获取客户端的IP地址
		/*
		 在eclipse中 使用localhost访问,得到的客户端ip地址是=====》0:0:0:0:0:0:0:1
		  在eclipse中 使用127.0.0.1访问,得到的客户端ip地址是=====》127.0.0.1
		  在eclipse中 使用真实ip访问,得到的客户端ip地址是=====》真实的客户端ip地址
		 
		 */
		System.out.println("客户端 ip地址=》"+request.getRemoteHost());//127.0.0.1或者0:0:0:0:0:0:0:1或者真实的客户端ip地址
		
//		4. getHeader()   获取请求头
		System.out.println("请求头User-Agent===>"+request.getHeader("User-Agent"));//请求头User-Agent===>Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko

//		7. getMethod()    获取请求的方式GET或POST
       System.out.println("请求的方式===>"+request.getMethod());//请求的方式===>GET

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

在这里插入图片描述

如何获取请求参数

form.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<form action="ParameterServlet" method="get">
   用户名:<input type="text" name="username"><br/>
  密码:<input type="text" name="password"><br>
 兴趣爱好:  <input type="checkbox" name="hobby" value="cpp">C++
      <input type="checkbox" name="hobby" value="java">Java
      <input type="checkbox" name="hobby" value="js">Javascript<br/>
      <input type="submit" value="提交">
</form>

</body>
</html>

在这里插入图片描述

ParameterServlet:

package com.servlet;

import java.io.IOException;
import java.util.Arrays;

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

/**
 * Servlet implementation class ParameterServlet
 */
@WebServlet("/ParameterServlet")
public class ParameterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ParameterServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
      String  username=request.getParameter("username");
      String password=request.getParameter("password");
      String[] hobby = request.getParameterValues("hobby");
      
      System.out.println("用户名:"+username);
      System.out.println("密码:" +password);
       System.out.println("兴趣爱好:"+Arrays.asList(hobby));
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

在这里插入图片描述
在这里插入图片描述

get 请求解决中文乱码问题

	request.setCharacterEncoding("UTF-8");
/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
 //设置请求字体的字符集为UTF-8,从而解决post请求的中文乱码问题
	//也要在获取请求参数之前调用才有效
		request.setCharacterEncoding("UTF-8");
		String  username=request.getParameter("username");
      String password=request.getParameter("password");
      String[] hobby = request.getParameterValues("hobby");
      
      System.out.println("用户名:"+username);
      System.out.println("密码:" +password);
       System.out.println("兴趣爱好:"+Arrays.asList(hobby));
	}

在这里插入图片描述
在这里插入图片描述

解决post里的乱码问题

request.setCharacterEncoding("UTF-8");

在这里插入图片描述
在这里插入图片描述

HttpServletResponse类的作用

HttpServletResponse类和HttpServletRequest类一样。
每次请求进来,
Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,
HttpServletResponse表示所有响应的信息。 
   我们如果需要设置返回给客户端的信息,
   都可以通过HttpServletResponse对象来进行设置。

两个响应流的介绍

字节流  getOutputStream        常用于下载(传递二进制数据)
字符流  getWriter()              常用于回传字符窜(常用)
两个流同时只能使用一个
使用了字节流,就不能再使用字符流,反之亦然

在这里插入图片描述
在这里插入图片描述

package com.servlet;

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

/**
 * Servlet implementation class Stream
 */
@WebServlet("/Stream")
public class Stream extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Stream() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.getWriter(); //字符流 常用于回传字符窜
		response.getOutputStream();//字节流 常用于下载(传递二进制数据)
	//2个流同时只能用一个
		
		
	}

	

}

给客户端回传字符窜数据

要求:往客户端回传字符窜数据
在这里插入图片描述
在这里插入图片描述

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet implementation class Toclient
 */
@WebServlet("/Toclient")
public class Toclient extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Toclient() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//要求:往客户端回传字符窜 数据
		
	     PrintWriter writer = response.getWriter();
	     writer.write("response's content!");
	}

	

}

解决中文的乱码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决中文乱码方案2(推荐)

   
	//它会随时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
   //但是此方法一定要在获取流对象之前调用才有效
     	response.setContentType("text/html;charset=utf-8");

在这里插入图片描述
在这里插入图片描述

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet implementation class ResponseIOServlet2
 */
@WebServlet("/ResponseIOServlet2")
public class ResponseIOServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ResponseIOServlet2() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           
		//它会随时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
		//但是此方法一定要在获取流对象之前调用才有效
		response.setContentType("text/html;charset=utf-8");
		System.out.println(response.getCharacterEncoding());
	    
		
		 PrintWriter writer = response.getWriter();
		 writer.write("此生的梦想是嫁给kiran Manthry");
	}



}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值