本文源碼:GitHub·點這里 || GitEE·點這里
一、核心API簡介
1、Servlet執行流程
Servlet是JavaWeb的三大組件之一(Servlet、Filter、Listener),它屬于動態資源。Servlet的作用是處理請求,服務器會把接收到的請求交給Servlet來處理,在Servlet中通常需要:接收請求數據;處理請求;完成響應。
2、核心API簡介
API作用描述
| ServletConfig | 獲取servlet初始化參數和servletContext對象。 |
| ServletContext | 在整個Web應用的動態資源之間共享數據。 |
| ServletRequest | 封裝Http請求信息,在請求時創建。 |
| ServletResponse | 封裝Http響應信息,在請求時創建。 |
二、ServletConfig接口
1、接口簡介
容器在初始化servlet時,為該servlet創建一個servletConfig對象,并將這個對象通過init()方法來傳遞并保存在此Servlet對象中。核心作用:1.獲取初始化信息;2.獲取ServletContext對象。
2、代碼案例
<servlet><init-param><param-name>my-name
</param-name><param-value>cicada
</param-value></init-param><servlet-name>servletOneImpl
</servlet-name><servlet-class>com.node02.servlet.impl.ServletOneImpl
</servlet-class>
</servlet>
<servlet-mapping><servlet-name>servletOneImpl
</servlet-name><url-pattern>/servletOneImpl
</url-pattern>
</servlet-mapping>
public class ServletOneImpl implements Servlet {@Overridepublic void init(ServletConfig servletConfig
) throws ServletException
{String servletName
= servletConfig
.getServletName() ;System
.out
.println("servletName="+servletName
);String myName
= servletConfig
.getInitParameter("my-name") ;System
.out
.println("myName="+myName
);Enumeration paramNames
= servletConfig
.getInitParameterNames() ;while (paramNames
.hasMoreElements()){String paramKey
= String
.valueOf(paramNames
.nextElement()) ;String paramValue
= servletConfig
.getInitParameter(paramKey
) ;System
.out
.println("paramKey="+paramKey
+";paramValue="+paramValue
);}ServletContext servletContext
= servletConfig
.getServletContext() ;servletContext
.setAttribute("cicada","smile");}
}
三、ServletContext接口
1、接口簡介
一個項目只有一個ServletContext對象,可以在多個Servlet中來獲取這個對象,使用它可以給多個Servlet傳遞數據,該對象在Tomcat啟動時就創建,在Tomcat關閉時才會銷毀!作用是在整個Web應用的動態資源之間共享數據。
1、ServletConfig#getServletContext();
2、GenericServlet#getServletContext();
3、HttpSession#getServletContext()
4、ServletContextEvent#getServletContext()
2、四大域對象
ServletContext是JavaWeb四大域對象之一:
1、PageContext;
2、ServletRequest;
3、HttpSession;
4、ServletContext;
所有域對象都有存取數據的功能,因為域對象內部有一個Map,用來存儲數據。
3、代碼案例
<context-param><param-name>my-blog</param-name><param-value>2019-11-19</param-value>
</context-param>
<servlet><servlet-name>servletTwoImpl</servlet-name><servlet-class>com.node02.servlet.impl.ServletTwoImpl</servlet-class>
</servlet>
<servlet-mapping><servlet-name>servletTwoImpl</servlet-name><url-pattern>/servletTwoImpl</url-pattern>
</servlet-mapping>
public class ServletTwoImpl extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request
, HttpServletResponse response
)throws ServletException
, IOException
{response
.setContentType("text/html;charset=utf-8");ServletContext servletContext
= this.getServletContext() ;String value
= String
.valueOf(servletContext
.getAttribute("cicada")) ;System
.out
.println("value="+value
);String myBlog
= servletContext
.getInitParameter("my-blog") ;System
.out
.println("myBlog="+myBlog
);String servletContextName
= servletContext
.getServletContextName() ;System
.out
.println("servletContextName="+servletContextName
);String pathOne
= servletContext
.getRealPath("/") ;String pathTwo
= servletContext
.getRealPath("/WEB-INF/") ;System
.out
.println("pathOne="+pathOne
+";pathTwo="+pathTwo
);response
.getWriter().print("執行:doGet; value:"+value
);}
}
四、ServletRequest接口
1、接口簡介
HttpServletRequest接口繼承ServletRequest接口,用于封裝請求信息,該對象在用戶每次請求servlet時創建并傳入servlet的service()方法,在該方法中,傳入的servletRequest將會被強制轉化為HttpservletRequest對象來進行HTTP請求信息的處理。核心作用:1.獲取請求報文信息;2.獲取網絡連接信息;3.獲取請求域屬性信息。
2、代碼案例
<servlet><servlet-name>servletThreeImpl
</servlet-name><servlet-class>com.node02.servlet.impl.ServletThreeImpl
</servlet-class>
</servlet>
<servlet-mapping><servlet-name>servletThreeImpl
</servlet-name><url-pattern>/servletThreeImpl
</url-pattern>
</servlet-mapping>
public class ServletThreeImpl extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request
, HttpServletResponse response
)throws ServletException
, IOException
{String method
= request
.getMethod();System
.out
.println("method="+method
); String requestURL
= request
.getRequestURL().toString();System
.out
.println("requestURL="+requestURL
);String requestURI
= request
.getRequestURI();System
.out
.println("requestURI="+requestURI
); String queryString
= request
.getQueryString() ;System
.out
.println("queryString="+queryString
); String myName
= request
.getParameter("myName");System
.out
.println("myName="+myName
); }
}
五、ServletResponse接口
1、接口簡介
HttpServletResponse繼承自ServletResponse,封裝了Http響應信息。客戶端每個請求,服務器都會創建一個response對象,并傳入給Servlet.service()方法。核心作用:1.設置響應頭信息;2.發送狀態碼;3.設置響應正文;4.重定向;
2、代碼案例
<servlet><servlet-name>servletFourImpl
</servlet-name><servlet-class>com.node02.servlet.impl.ServletFourImpl
</servlet-class>
</servlet>
<servlet-mapping><servlet-name>servletFourImpl
</servlet-name><url-pattern>/servletFourImpl
</url-pattern>
</servlet-mapping>
public class ServletFourImpl extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request
, HttpServletResponse response
)throws ServletException
, IOException
{response
.setContentType("text/html;charset=utf-8") ;response
.setCharacterEncoding("UTF-8");response
.setStatus(200) ;response
.getWriter().print("Hello,知了");}
}
3、轉發和重定向
服務器端進行的頁面跳轉的控制 ;
request
.getRequestDispatcher("/轉發地址").forward(request
, response
);
服務端響應跳轉信息,瀏覽器端進行的頁面跳轉 ;
response
.sendRedirect("重定向地址");
區別轉發重定向
| 地址欄 | 不變 | 變化 |
| 跳轉 | 服務端跳轉 | 瀏覽器端跳轉 |
| 請求次數 | 一次 | 兩次 |
| 域中數據 | 不會丟失 | 丟失 |
六、源代碼地址
GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent
總結
以上是生活随笔為你收集整理的JavaEE基础(02):Servlet核心API用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。