1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
1.String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
2.String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
3.Enumeration<String> getParameterNames():获取所有请求的参数名称
4.Map<String,String[]> getParameterMap():获取所有参数的map集合
regist2.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>注册页面</title></head><body><form action="/day14/requestDemo6" method="post"><input type="text" placeholder="请输入用户名" name="username"><br><input type="text" placeholder="请输入密码" name="password"><br><input type="checkbox" name="hobby" value="game">游戏<input type="checkbox" name="hobby" value="study">学习<br><input type="submit" value="注册"></form></body></html>
RequestDemo6.java
package cn.itcast.web.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.BufferedReader;import java.io.IOException;import java.util.Enumeration;import java.util.Map;import java.util.Set;@WebServlet("/requestDemo6")public class RequestDemo6 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//post 获取请求参数//根据参数名称获取参数值/* String username = request.getParameter("username");System.out.println(username);*//*//根据参数名称获取参数值的数组String[] hobbies = request.getParameterValues("hobby");for (String hobby : hobbies) {System.out.println(hobby);}*///获取所有请求的参数名称/*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("----------------");}*/// 获取所有参数的map集合Map<String, String[]> parameterMap = request.getParameterMap();//遍历Set<String> keyset = parameterMap.keySet();for (String name : keyset) {//获取键获取值String[] values = parameterMap.get(name);System.out.println(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);*/this.doPost(request,response);}}
中文乱码问题:
*get方式:tomcat 8 已经将get方式乱码问题解决了
*post方式:会乱码 * 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");
2. 请求转发:一种在服务器内部的资源跳转方式
1. 步骤:
1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
2. 特点:
1.浏览器地址栏路径不发生变化
2.只能转发到当前服务器内部资源中。
3.转发是一次请求
共享数据:
*域对象:一个有作用范围的对象,可以在范围内共享数据
*request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
* 方法:
1.void setAttribute(String name,Object obj):存储数据
2.Object getAttitude(String name):通过键获取值
3.void removeAttribute(String name):通过键移除键值对
获取ServletContext:
ServletContext getServletContext()