网站预订模板怎么做,wordpress容器,wordpress快速网店主题,公司网站建设需求书request对象的继承关系
1.HttpServletRequest接口继承了ServletRequest接口#xff0c;对其父接口进行了扩展#xff0c;可以处理满足所有http协议的请求
2.HttpServletRequest和ServletRequest都是接口#xff0c;不能创建对象#xff0c;因此在tomcat底层定义实现类并创…request对象的继承关系
1.HttpServletRequest接口继承了ServletRequest接口对其父接口进行了扩展可以处理满足所有http协议的请求
2.HttpServletRequest和ServletRequest都是接口不能创建对象因此在tomcat底层定义实现类并创建实现类对象 public class RequestFacade implements HttpServletRequest{} tomcat底层创建门面类RequestFacade对象 ServletRequest requestnew RequestFacade();多态 request对象的API方法
获取请求行
String getMethod() Get the request method, e.g. GET, POST, etc. 获取请求方法 public String getContextPath() 访问虚拟目录项目访问路径就是我们在Tomcat配置的位置设置的路径是虚拟的就是随便定义的 如果设置虚拟路径位置是/ 那么该方法获取的内容是空字符串 public StringBuffer getRequestURL() 返回的 URL 包含一个协议、服务器名称、端口号、服务器路径但是不包含查询字符串参数获取的是请求资源的绝对路径包含三要素IP协议IP地址端口号没有请求参数 public String getRequestURI() 获取的是请求资源的绝对路径但是不包含三要素没有请求参数 public String getQueryString() 返回包含在请求 URL 中路径后面的查询字符串。如果 URL 没有查询字符串则此方法返回 null。只能获取GET请求的请求参数因为get请求的请求参数在URL后面 测试
浏览器页面 WebServlet(/requestDemo1)
public class requestDemo1 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求方法String method request.getMethod();System.out.println(method);//GET//访问虚拟目录String contextPath request.getContextPath();System.out.println(contextPath);//如果是/ 则为空字符串//获取URL路径资源的URL路径包含三要素StringBuffer requestURL request.getRequestURL();//StringBufffer和StringBuilder都是字符串缓冲区 字符可以改变//StringBuilder线程不安全效率高//StringBuffer线程安全效率低String rs requestURL.toString();System.out.println(rs);//http://localhost:8080/requestDemo1//获取URI路径不包含三要素的URL路径String requestURI request.getRequestURI();System.out.println(requestURI);///requestDemo1//获取请求参数GET方式适用String queryString request.getQueryString();System.out.println(queryString);//usernameaapwdbb}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
} 获取请求头
public String getHeader(String name) 以 String 的形式返回指定请求头的值。如果该请求不包含指定名称的头则此方法返回 null。如果有多个具有相同名称的头则此方法返回请求中的第一个头。头名称是不区分大小写的。可以将此方法与任何请求头一起使用。 name指定头名称的 Stringreturn包含请求头的值的 String如果该请求没有该名称的头则返回 null name就是冒号左边的标识 获取请求体POST请求 public ServletInputStream getInputStream() 获取字节和字符数据 public java.io.BufferedReader getReader() 获取字符数据 前端页面 !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
h2POST请求/h2
form action/requestDemo2 methodpostinput typetext nameusername/ brinput typetext namepassword/ brinput typesubmit value提交 br
/form
/body
/html WebServlet(/requestDemo2)
public class RequestDemo2 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取输入流对象BufferedReader reader request.getReader();String linenull;while((linereader.readLine())!null){System.out.println(line);//usernamehhhhpassword123456}}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
} 浏览器 获取请求参数的通用方式
get请求是getQueryString()方法
post请求是getReader(),getInputStream()
目录
request对象的继承关系
request对象的API方法
获取请求行
String getMethod() public String getContextPath()
public StringBuffer getRequestURL()
public String getRequestURI()
public String getQueryString()
获取请求头
public String getHeader(String name) 获取请求体POST请求 public ServletInputStream getInputStream()
public java.io.BufferedReader getReader()
获取请求参数的通用方式
public java.util.MapgetParameterMap(),
String[] getParameterValues(String name) String getParameter(String name) 通用方法
public java.util.MapString, String[]getParameterMap() 获取所有请求参数的map集合 String[] getParameterValues(String name) 根据参数名字获取参数值(数组) name是前端请求参数的等号左边的key String getParameter(String name) 根据参数名字获取参数值(单个值) 注意:如果参数name有多个值取第一个 前端 !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
bodyform action/requestDemo3 methodpost用户input typetext nameusername br密码input typepassword namepwd br爱好input typecheckbox namehoppy value1爬山input typecheckbox namehoppy value2游泳brinput typesubmit value提交/form/body
/html WebServlet(/requestDemo3)
public class requestDemo3 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(前端提交数据的方式是request.getMethod());//获取所有请求参数的map对象MapString, String[] map request.getParameterMap();map.forEach((key,value)- System.out.println(key--- Arrays.toString(value)));//获取指定name的参数值(数组)String[] usernames request.getParameterValues(username);System.out.println(Arrays.toString(usernames));// //获取指定name的参数值(单个值)String hoppy request.getParameter(pwd);System.out.println(hoppy);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}浏览器 结果 前端提交数据的方式是POST username---[hhhh] pwd---[aa] hoppy---[1, 2] [hhhh] aa POST请求 如果输入的值有中文就会出现乱码的问题 前端提交数据的方式是POST username---[?????????] pwd---[qqq] hoppy---[1, 2] [?????????] qqq 解决方法 //方法一//使用request对象调用方法request.setCharacterEncoding(UTF-8);//告知tomcat使用UTF-8进行解码//注意解决请求体数据的乱码解决POST乱码的//方法二//使用javase的API方法String username request.getParameter(username);username URLEncoder.encode(username, ISO-8859-1);//编码username URLDecoder.decode(username,UTF-8);//解码System.out.println(username);//方法三//使用javase的API解决即String类byte[] bytes username.getBytes(ISO-8859-1);//编码String s new String(bytes,UTF-8);//解码System.out.println(s);