获取请求常用方法
getParameter(String name)
获取客户端提交的数据,参数name就是客户端在form表单中书写name属性的值,如果不一致,则取不到对应的值
getParameterName()
获取客户端提交的 数据中所有的key值(form表单中提交的所有的name属性的值)
getParameterValues(String name)
获取form表单中用户提交的某个name属性对应的多个value属性的值
request属于域对象,所以可以使用域对象方法
域对象其实就是一个类似于map的容器,可以向容器中存入指定的值,在需要的时候,可以通过key去获取对应的值来使用
getParameterMap() //获取所有参数的map集合
根据Java规范:request.getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。这个返回值有个特别之处——只能读。不像普通的Map类型数据一样可以修改。这是因为服务器为了实现一定的安全规范,所作的限制。比如WebLogic,Tomcat,Resin,JBoss等服务器均实现了此规范。
如果实在有必要在取得此值以后做修改的话,要新建一个map对象,将返回值复制到此新map对象中进行修改,用新的map对象代替使用之前的返回值。
----------------------------------------------------------分割线-----------------------------------------------------------
储存数据部分
setAttribute(String name,Object o)
向一个request域中存放一个映射关系,name留着取值时使用的
getAttribute(String name)
通过映射关系的key,获取对应的值。
removeAttribute(String name)
通过映射关系的key,移除这一关系
----------------------------------------------------------分割线-----------------------------------------------------------
乱码处理pos和set
set的乱码解决
package com.ithdy.web;
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.nio.charset.StandardCharsets;
/**
* 请求中的中文乱码问题解决方案
*/
@WebServlet("/req3")
public class ServletDemo9 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/**
* 解决方案:
* post: 设置输入流的编码
* req.setCharacterEncoding("UTF-8");
*/
//post:底层方法为 getReader()
//req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
System.out.println("解决乱码前" + username);
//get获取参数底层方法为 getQueryString()
//乱码原因,tomcat进行url解码,默认的字符集时ISO-8889-1
//先对uername进行编码,转换为字节数组
// byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
// //字符数组解码
// username = new String(bytes, StandardCharsets.UTF_8);
//简化版本
username = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
System.out.println("解决乱码后" + username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
post的乱码解决
setCharacterEncoding(String env) //post:底层方法为 getReader()
//req.setCharacterEncoding("UTF-8");
设置客户端提交数据解码时使用的编码表,只对post请求有效
getRequestDispatcher(String path)
获取转发器对象,调用forward()方法用于转发请求
getMethod()
获取客户端提交数据的方式 get 或post 方式
getContextPath()
拿到的是你的web项目的根路径
getRealPathURL() //类型为StringBuffer 输出返回结果需要toString()
返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数
getRequestURI()
得到的是request URL的部分值,并且web容器没有decode/解码过的
----------------------------------------------------------分割线-----------------------------------------------------------
URLDemo
package com.ithdy.web;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class URLDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
String username = "张三";
/**
* 1-2为tomcat8版本以下的编码
*/
//1.URL编码
String encode = URLEncoder.encode(username, "utf-8");
System.out.println(encode);
//2.URL解码
String decode = URLDecoder.decode(encode, "ISO-8859-1");
System.out.println(decode);
//3.转换为字节数据,编码
byte[] bytes = decode.getBytes("ISO-8859-1");
// for (byte b: bytes) {
// System.out.print(b +" ");
// }
System.out.println();
//4.把字节数组转换为字符串,解码
String s = new String(bytes, "utf-8");
System.out.println(s);
}
}