导读
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版权协议,转载请附上原文出处链接和本声明。