Java 26--- HttpServletRequest相关API

导读

1.get请求&post请求
2.请求正文
3.请求头
4.请求行
5. HttpServletRequest是一个域对象(重要)

get请求&post请求

1.get请求:会将请求数据拼接在URL地址后用?分隔,数据以键值对的形式存放,多个之 间使用&分隔.如:doS1?name=123&pwd=abc
会暴露数据–不安全
URL长度是有局限性的,一般来说URL这边没有规定多长,但是,浏览器厂商规定了长度,如ie:不超过2083个字节,chrome:1023个字节.无法携带大型数据.如:文件上传
一般来说:直接URL访问,超链接访问,当表单的method=get的时候这些都是get请求.
浏览器会为get请求优化,读取本地缓存.

2.post请求:会将数据以协议的方式提交,地址栏 看不到— 安全
post提交没有大小限制,适用于文件上传
一般来说:当表单的method=post的时候,当ajax的method=post

在这里插入图片描述

请求正文

与获取表单数据相关的方法

在这里插入图片描述

//根据表单中name属性的名,获取value属性的值方法 
 getParameter(name) 
 //专业为复选框取取提供的方法
getParameterValues(String name)
//到表单提交的所有值的方法   //框架用
getParameterMap 
BeanUtils.populate(o, req.getParameterMap());
// 以字节流的方式得到所有表单数据
getInputStream 

对get请求解决乱码问题方法:

在这里插入图片描述

配置server.xml文件
在这里插入图片描述
实例:

package com.oracleoaec.servlet;

import java.io.IOException;

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

public class ServletDemo3 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
//		课堂练习:
//		创建一个index.html 里面有一个用户名:密码:提交按钮的表单
//		设置表单提交的action=doS3,method=post
//		创建doS3Servlet
//		获取表单提交的数据.
//		如果用户名为"罗玉凤",则在浏览器中显示"登录成功"
//		其它则显式"登示失败"

		//对于post请求的乱码解决方法,对于get请求的乱码解决见上图
		req.setCharacterEncoding("utf-8");//请求对象乱码解决
		resp.setContentType("text/html;charset=utf-8");//响应对象乱码解决



		//使用req获取对象时,如果有对应的key值,则获取的value一定是一个字符串,可能是""
		//      如果没有对应的key值,则返回null
		String[] hobbys = req.getParameterValues("hobby");//获取多个
		for (int i = 0; i < hobbys.length; i++) {
			System.out.println("hobby="+hobbys[i]);
		}
		
		String name = req.getParameter("name");//获取单个
		if("罗玉凤".equals(name)){
			resp.getWriter().write("aa登陆成功");
		}else{
			resp.getWriter().write("bb登陆失败");
		}
		
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

与请求转发相关的方法

//得到请求转发或请求包含的协助对象
RequestDispatcher getRequestDispatcher(String path)
forward(ServletRequest request, ServletResponse response) //转发的方法
include(ServletRequest request, ServletResponse response) //请求包含

forward会覆盖转发前的内容,include不会覆盖,而是在后边添加

forward实例
t通过运行s4运行s5

在这里插入图片描述

demo4

package com.oracleoaec.servlet;

import java.io.IOException;

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

public class ServletDemo4 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {

		resp.setContentType("text/html;charset=utf-8");//响应对象乱码解决
		resp.getWriter().write("我是S4");
		//得到请求转发或请求包含的协助对象
		RequestDispatcher rd = req.getRequestDispatcher("doS5");
		rd.forward(req, resp);
		resp.getWriter().write("我是S4-2");
		//http://localhost:8888/Day03/doS4
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

demo5

package com.oracleoaec.servlet;

import java.io.IOException;

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

public class ServletDemo5 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().write("我是S5");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

include实例

在这里插入图片描述
demo6

package com.oracleoaec.servlet;

import java.io.IOException;

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

public class ServletDemo6 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		
		resp.getWriter().write("我是S6");
		RequestDispatcher rd = req.getRequestDispatcher("doS7");
		rd.include(req, resp);//请求包含
		resp.getWriter().write("我是S6-2");
		
		
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

demo7

package com.oracleoaec.servlet;

import java.io.IOException;

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

public class ServletDemo7 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().write("我是S7");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

与操作非表单数据相关的方法(request也是一个域对象)

void setAttribute(String name, Object value);
Object getAttribute(String name);
Void removeAttribute(String name);

请求头

 * String   getHeader(String name)  根据头名称得到头信息值
 Enumeration   getHeaderNames()  得到所有头信息name
 Enumeration   getHeaders(String name)  根据头名称得到相同名称头信息值
Enumeration<String> att = req.getHeaderNames();
		while(att.hasMoreElements()){
			String name = att.nextElement();//获得请求头的key值
			String value = req.getHeader(name);//根据key获取对应的请求内容
			System.out.println(name+":"+value);
			resp.getWriter().write(name+":"+value+"<br/>");
}

请求行

getMethod(); 获得请求方式
getRequestURL();返回客户端发出请求时的完整URL。
getRequestURI(); 返回请求行中的资源名部分。
getQueryString() ; 返回请求行中的参数部分。

HttpServletRequest是一个域对象(重要)

内部维护了一个Map<String,Object>类型的空间,用于传递数据
特点:
1.有生命周期
请求—>创建
响应完成—>销毁
2.作用域范围
一次请求及响应
3.Get&set方法
Req.setAttribute(“key”,value);key唯一,value可以被替换
Req.getAttribute(“key”);成功返回数据,失败返回null


版权声明:本文为qq_37527943原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。