Mapping問題
Servlet接口,這裏我們直接繼承HttpServlet類。
package com.edwin.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//此處再子項目中,是沒有這個依賴的,但是在父項目中有這個依賴,可以直接用。
/**
* @author Edwin D
* @date 2020.5.31 下午 10:38
*/
public class HelloServlet extends HttpServlet {
// 由於get或者post只是請求實現的不同方式,可以相互調用,業務邏輯都一樣。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// ServletOutputStream outputStream = resp.getOutputStream();
// 響應流。
PrintWriter writer = resp.getWriter();
writer.println("Hello,World!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
1.一個Servlet可以指定一個映射路徑
<-- 在web.xml 中-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
輸出入上上圖所示:
2.一個Servlet可以指定多個映射路徑
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello4</url-pattern>
</servlet-mapping>
效果同上:
3.一個Servlet可以指定通用映射路徑
/Hello/*: 在Hello/後面接上任何的字符,都可以運行處同一個結果:
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello/*</url-pattern>
</servlet-mapping>
效果同上:
4.默認請求路徑
<!--默認請求路徑-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5.指定後綴前綴等問題。
<!--可以自定義後綴實現請求映射
注意點:*前面不能加項目映射的路徑
hel1o/sajd1kajda.edwin-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>*.edwin</url-pattern>
</servlet-mapping>
進入:
更改後:
6.優先級問題
指定了固有的映射路徑優先級最高,如果找不到就會走默認的處理請求;
輸入Hello後:
<!--404-->
<servlet>
<servlet-name>Error</servlet-name>
<servlet-class>com.edwin.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
參考文獻
《【狂神說Java】JavaWeb入門到實戰》
2020.06.01