Servlet的實(shí)現(xiàn)方式
-
實(shí)現(xiàn) javax.servlet.Servlet
@Override public void destroy() {} @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void init(ServletConfig config) throws ServletException { } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { } -
繼承 javax.servlet.GenericServlet (其實(shí)就是封裝了ServletConfig的方法)
public class Demo extends GenericServlet{ @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { } } -
繼承 javax.servlet.http.HttpServlet (先調(diào)用service方法在調(diào)用doGet或者doPost 如果沒(méi)有覆蓋405哦)
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.service(req, resp); }

訪問(wèn)doGet方法但是沒(méi)有重寫(xiě)
生命周期方法
init() 僅僅調(diào)用一次
service() 每次處理請(qǐng)求都會(huì)被調(diào)用
destroy() 服務(wù)器停止之前
實(shí)例化是單利模式,線程不安全。
瀏覽器訪問(wèn)Servlet
- web.xml
- servlet
<servlet> <servlet-name>demo</servlet-name> <servlet-class>com.suse.yuxin.servlet.Demo</servlet-class> <load-on-startup>servlet的啟動(dòng)順序 0 服務(wù)器啟動(dòng)就創(chuàng)建</load-on-startup> </servlet>- servlet-mapping
<servlet-mapping> <servlet-name>demo</servlet-name> <url-pattern>/demo</url-pattern> <url-pattern>/demo1</url-pattern> //可以匹配多個(gè)路徑 </servlet-mapping>
ServletConfig(servlet的配置信息[web.xml中該servlet配置信息]將會(huì)被加載進(jìn)去)
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>com.suse.yuxin.servlet.Demo</servlet-class>
<init-param>
<param-name>test</param-name>
<param-value>test</param-value>
</init-param>
</servlet>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
config.getServletName(); // demo
config.getInitParameter("test"); // test
config.getServletContext();
ServletContext(一個(gè)項(xiàng)目只有一個(gè)ServletContext)
- 域?qū)ο蠊δ?保存和獲取數(shù)據(jù)
- 獲取應(yīng)用的初始化參數(shù)
<web-app> <context-param> <param-name>test</param-name> <param-value>test</param-value> </context-param> </web-app> ------------------------------ getInitParameter("test"); - 獲取路徑
getServletContext().getRealPath("");
Response
- 發(fā)送狀態(tài)碼
resp.sendError(404,"沒(méi)有找到資源");//用于發(fā)送404 500等錯(cuò)誤碼
resp.setStatus(302);//用于發(fā)送成功的狀態(tài)碼
- 響應(yīng)頭信息**一般是一個(gè)頭一個(gè)值也有一個(gè)頭多個(gè)值**
```java
resp.setHeader("Refresh","test");//用于單個(gè)值
resp.addHeader("xxx", "value");//用于多個(gè)值
- 重定向
resp.sendRedirect("/demo1"); ---------------------------------------- resp.setHeader("Location", "/demo1"); resp.setStatus(302); - 輸出流
resp.getOutputStream().write("hello word".getBytes());
resp.getWriter().write("hello word");
- - -
###Request
- 獲取客戶端ip
```java
req.getRemoteAddr();
- 獲取請(qǐng)求頭
req.getHeader(String name); //可以使用**refresh**請(qǐng)求頭來(lái)防止倒鏈 refresh 指的是該請(qǐng)求是從哪個(gè)界面?zhèn)鬟^(guò)來(lái)的 - 獲取參數(shù)
req.getParameter(""); req.getParameterValues("");