##HttpServletRequest request(請求) 所有的 和請求相關的操作,都用這對象來處理 當有請求來的時候 , request就被實例化 ##HttpServletResponse response(響應) 所有和響應相關的操作,都用這個對象來處理 當有請求來的時候 , resp ...
HttpServletRequest --- request(請求)
所有的 和請求相關的操作,都用這對象來處理
當有請求來的時候 , request就被實例化
HttpServletResponse --- response(響應)
所有和響應相關的操作,都用這個對象來處理
當有請求來的時候 , response 就被實例化
當你想要給出響應就使用 response ,, 我們給出的響應,必須要展示在客戶端(瀏覽器)
init方法什麼時候執行?
* 預設當我們第一次訪問servlet的時候被調用,延遲載入。
* 初始化方法只執行一次。
public class HelloServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("servlet初始化");
System.out.println(config.getInitParameter("username"));
System.out.println(config.getInitParameter("password"));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收參數 ,處理請求
request.getParameter("username");
request.getParameter("password");
// 給出響應
// 客戶端和伺服器端的信息傳遞
// 設置響應的字元集 一定要放在獲取流之前
// 伺服器處理字元串按照UTF-8處理
response.setCharacterEncoding("utf-8");
// 添加響應頭,告訴瀏覽器以HTML的格式來解析響應字元串
response.addHeader("content-type","text/html;charset=utf-8");
//Io流
PrintWriter writer = response.getWriter();
//向客戶端回覆數據
writer.write("我是後臺返回的數據");
// * writer.write---寫字元。
// * writer.print---寫位元組。
//流的操作
writer.flush();
writer.close();
}
}
System.out.println("請求的方法:" + request.getMethod());
System.out.println("請求的根路徑:" + request.getContextPath());
System.out.println("請求的URI:" + request.getRequestURI());
System.out.println("請求的URL:" + request.getRequestURL());
System.out.println("請求的servletPath:" + request.getServletPath());
@WebServlet("/demo.do")
public class Demo01Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 根據key獲取對應的value
request.getParameter("");
// 獲取一個key對應的多個值,返回值為String類型的數組 例如:覆選框
String[] hobbies = request.getParameterValues("hobby");
// System.out.println(Arrays.toString(hobbies));
// 獲取請求中傳過來的參數的key值,根據key值獲取對應的value值
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()){
System.out.println(parameterNames.nextElement());
}
// 可以獲取到請求中的所有的鍵值對,返回值是一個map集合
// 這個map集合的key是String,value是String[]
// username=admin,password=123456,hobby=a,b,c,gender=man
Map<String, String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> name : map.entrySet()) {
String key = name.getKey();
String[] value = name.getValue();
System.out.println(key + "--->" + Arrays.toString(value));
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
轉發 request.getRequestDispatcher("demo03.do").forward(request,response);
@WebServlet("/demo02.do")
public class Demo02Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 請求轉發---由多個servlet來處理同一個請求
*
* 請求轉發是在伺服器上完成的,跟客戶端是否無關!!!
*
*
*/
String name = request.getParameter("name");
System.out.println("Demo02Servlet,name:" + name);
// getRequestDispatcher參數:轉發的servlet的地址
// forward參數:request,response,把當前servlet用的request和response傳給下一個
request.getRequestDispatcher("demo03.do").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
@WebServlet("/demo04.do")
public class Demo04Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 作用域:起作用的區域
*
* 往request作用域中添加了一個屬性name,值是zhangsan
*
* 請求轉發的時候是同一個request
*
*/
request.setAttribute("name","zhangsan");
// name怎麼取出來?
System.out.println("demo04.do---name:" + request.getAttribute("name"));
request.getRequestDispatcher("demo05.do").forward(request,response);
// 根據指定的key,刪除對應的value
// request.removeAttribute("name");
// 獲取request作用域中的所有的key
// Enumeration<String> attributeNames = request.getAttributeNames();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
request.getRequestDispatcher("demo03.do").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
重定向 response.sendRedirect("success.html");
@WebServlet("/demo06.do")
public class Demo06Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter()
response.setCharacterEncoding("utf-8");
response.addHeader("content-type","text/html;charset=utf-8");
response.sendRedirect("success.html");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
請求轉發和重定向的區別:
1.重定向是兩次請求,請求轉發是一個請求
2.重定向是客戶端行為,請求轉發是伺服器行為
3.重定向瀏覽器地址會發生改變,轉發不會
最常見的客戶端傳參的方式兩種,get,post
* 瀏覽器地址欄直接輸入:一定是get請求
* 超級鏈接:一定是get請求
* 表單:可以是get,也可以是post,取決於method
*
* GET請求和POST請求的區別:
* GET:請求的參數會在瀏覽器的地址欄中顯示,不安全;請求的長度限制在1K之內。
* 沒有請求體,無法通過request去設置一些參數。
* POST:請求的參數不會在瀏覽器的地址欄中顯示,相對安全。
* 把請求的參數封裝成幾個數據報文(請求體)。請求參數的長度沒有限制。
本文來自博客園,作者:阿薩德菩提子,轉載請註明原文鏈接:https://www.cnblogs.com/ychptz/p/16640749.html