1.获取请求参数的通用方式
不管是get和post方式都可以用的方式:
1.根据参数名称获取参数值:
String getParameter(String name)
2.根据参数名称获取参数值的数组
String[] getParameterValues(String name)
3.获取所有请求参数的名称
getParameterNames()
4.获取所有参数的map集合
Map<Stirng,String[]> getParameterMap()
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--<a href="/15-Http-Request/RequestDemo4">demo4...</a>-->
<form action="/15-Http-Request/RequestDemo6" method="get">
请输入用户名: <input type="text" name="username"><br>
请输入密码:<input type="text" name="password"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
package Request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
/**
* 演示获取请求体
*/
@WebServlet("/RequestDemo7")
public class RequsetDemo7 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//post方式获取请求参数
//根据参数名称获取参数值
String username = request.getParameter("username");
System.out.println("post");
System.out.println(username);
System.out.println("===========");
//根据参数名称获取参数值的数组
String[] hobbies = request.getParameterValues("hobby");
for(String hobby:hobbies){
System.out.println(hobby);
}
System.out.println("===========");
//获取所有请求的参数名称
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()){
String name = parameterNames.nextElement();
System.out.println(name);
String value = request.getParameter(name);
System.out.println(value);
System.out.println("............");
}
System.out.println("===============");
//获取所有参数map集合
Map<String,String[]> parameterMap = request.getParameterMap();
//将键存储在一个set集合中,遍历集合根据建获取值
Set<String> keyset = parameterMap.keySet();
for(String name:keyset){
//根据键获取值
String[] values = parameterMap.get(name);
for(String value:values){
System.out.println(value);
}
System.out.println("-------");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
//get方式获取请求参数
String username = request.getParameter("username");
//根据参数名称获取参数值
System.out.println("get");
System.out.println(username);
*/
//因为两个方法相同,所以只需要调用doPost()方法即可
this.doPost(request,response);
}
}
2.Request对象实现请求转发功能
一种在服务器内部的资源跳转方式
1.步骤:
通过request对象获取请求转发器对象
RequestDispatcher getRequestDispatcher(String path)
使用RequestDispatcher这个对象进行转发
forward(ServletRequest request,ServletResponse response)
2.特点:
1.浏览器地址栏的路径没有发生变化
2.只能转发到当前服务器内部资源中
3.转发只是一次请求
package Request;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo10")
public class RequsetDemo10 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo10被访问了。。。");
//转发到demo11的资源
// RequestDispatcher requestDispatcher = request.getRequestDispatcher("/RequestDemo11");
// requestDispatcher.forward(request,response);
request.getRequestDispatcher("/RequestDemo11").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
package Request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo11")
public class RequsetDemo11 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo11被访问了。。。");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
3.Requset对象实现共享数据
域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中去共享数据
方法:
1.存储数据:
void setAttribute(String name,,Object obj)
2.通过键获取值
Object getAttribute(String name)
3.通过键移除键值对
void removeAttribute(String name)
package Request;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo10")
public class RequsetDemo10 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo10被访问了。。。");
//存储数据到request域中
request.setAttribute("msg","hello");
//转发到demo11的资源
request.getRequestDispatcher("/RequestDemo11").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
package Request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo11")
public class RequsetDemo11 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo11被访问了。。。");
//获取demo10中的数据
Object msg = request.getAttribute("msg");
System.out.println(msg);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
4.Request对象获取ServletContext对象
package Request;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RequestDemo12")
public class RequsetDemo12 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext = request.getServletContext();
System.out.println(servletContext);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}