1.requset对象和response对象的原理
- request和response对象是由服务器创建的。我们使用他们
- request对象是来获取请求消息,response对象是来设置响应消息的
2.request:获取请求消息
1.获取请求行数据 Get /day14/demo1?name=zhangsan http/1.1
方法:
1.获取请求方式:GET String getMethod()
2.获取虚拟目录:/day14 String getContextPath()
3.获取servlet路径:/demo1 String getServletPath()
4.获取get方式请求参数:name=zhangsan String getQueryString()
5.获取URL:/day14/demo1 String getRequestURI()
:http://localhost/day14/demo1 StringBuffer getRequestURL
URL:统一资源定位符 URI:统一资源标识符
6.获取协议及版本: HTTP/1.1 String getProtocol()
7.获取客户机的IP地址:String getRemoteAddr()
@WebServlet("/requestDemo1")
public class request extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
1.获取请求方式:GET String getMethod()
2.获取虚拟目录:/day14 String getContextPath()
3.获取servlet路径:/demo1 String getServletPath()
4.获取get方式请求参数:name=zhangsan String getQueryString()
5.获取URL:/day14/demo1 String getRequestURI() :http://localhost/day14/demo1 StringBuffer getRequestURL
6.获取协议及版本: HTTP/1.1 String getProtocol()
7.获取客户机的IP地址:String getRemoteAddr()
*/
//1.获取请求方式:GET String getMethod()
String method = req.getMethod();
System.out.println(method);
//2.获取虚拟目录:/day14 String getContextPath()
String contextPath = req.getContextPath();
System.out.println(contextPath);
//3.获取servlet路径:/demo1 String getServletPath()
String servletPath = req.getServletPath();
System.out.println(servletPath);
//4.获取get方式请求参数:name=zhangsan String getQueryString()
String queryString = req.getQueryString();
System.out.println(queryString);
//5.获取URL:/day14/demo1 String getRequestURI() :http://localhost/day14/demo1 StringBuffer getRequestURL
String requestURI = req.getRequestURI();
System.out.println(requestURI);
StringBuffer requestURL = req.getRequestURL();
System.out.println(requestURL);
//6.获取协议及版本: HTTP/1.1 String getProtocol()
String protocol = req.getProtocol();
System.out.println(protocol);
//7.获取客户机的IP地址:String getRemoteAddr()
String remoteAddr = req.getRemoteAddr();
System.out.println(remoteAddr);
}
}
2.获取请求头数据:
*方法:
String getHeader(String name) //通过请求头的名称获取请求头的值
Enumeration<String> getHeaderName() //获取所有的请求头名称请求头:
Enumeration<String> headerNames = req.getHeaderNames();
while(headerNames.hasMoreElements()){
String name=headerNames.nextElement();
String value=req.getHeader(name);
System.out.println(name+"---"+value);
}
user-agent: 判断使用的浏览器请求头:referer:判断来源路径
实例:
@WebServlet("/requestDemo3")
public class request2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//演示获取请求头:referer
String referer = req.getHeader("referer");
System.out.println(referer);
if (referer != null) {
if (referer.contains("/day14")) {
System.out.println("播放电影");
}else
System.out.println("来我们网址吧!!!");
}
}
}
@WebServlet("/requestDemo2")
public class request1 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//演示获取请求头:user-agent
String agent=req.getHeader("user-agent");
if(agent.contains("Chrome")){
System.out.println("Chrome棒");
}else if(agent.contains("firefox")){
System.out.println("火狐棒");
}
}
}
3.获取请求体数据:
*请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
*步骤:
1.获取流对象:
- BufferedReader getReader() :获取字符输入流,只能操作字符数据
@WebServlet("/requestDemo4")
public class request3 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求消息体 --请求参数
BufferedReader reader = req.getReader();
//1.获取字符流
String line=null;
while((line = reader.readLine()) != null){
System.out.println(line);
}
}
}
- ServletInputStream getInputStream(): 获取字节输入流,可以操作所有数据类型
4.其他功能:####
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[]> getParameter() //获取所有参数的Map集合
2.请求转发: 一种在服务器内部的资源跳转方式
1.步骤;
1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2.使用RequestDispatcher对象来进行转发:forword(ServletRequest request,ServletResponse response)
2.特点:
- 浏览器地址栏不发生变化
- 只能转发到当前服务器内部资源中
- 只发送了一次请求
@WebServlet("/requestDemo5")
public class request4 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("requsetdemo4...");
req.setAttribute("msg","hello");
req.getRequestDispatcher("/requestDemo6").forward(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
@WebServlet("/requestDemo6")
public class request5 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object msg = req.getAttribute("msg");
System.out.println(msg);
System.out.println("requestdemo5...");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp); //这样写非必须
}
}
3.共享资源:
- 域对象:一个有作用范围的对象,可以在范围内共享数据
- request域:代表一次请求的范围,一般用于请求转发的多个资源共享数据
方法:
- void setAttribute(String name,Object obj):存储数据
- Object getAttitude(String name) :通过键获取值
- void removeAttribute(String name) :通过键移除键值对
4.获取ServletContext:
ServletContext getServletContext() //获取Servlet对象