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對象