一定要幾年這個開心的時刻!!!因此大晚上的解決了Servlet重定向404的問題,針對我自己的問題,如果你也有這樣的情況,可以參考一下!
工具:IDEA 2020、Tomcat 9(本來使用的是10,但是發現怎么也實現不了!后來就換成了9)
public void sendRedirect(String URL)throws IOException;
sendRedirect()
方法的示例:
response.sendRedirect("http://www.baidu.com");
首先從配置Tomcat開始,因為不像在Eclipse上會直接部署到webapps上,因此對於IDEA的使用者需要事先配置:
第一步:
創建項目,對於IDEA 2020要做web項目,要選擇:
java Enterprise ->勾選Web Application -> 創建項目名稱MyServlet-03
第二步:配置相關路徑
1、在web文件夾下的WEB-INF下創建兩個文件夾分別是classes和lib
2、File -> Project Structure -> Modules -> Paths(選擇Use module compile output path),注意:兩個地址都要配置到剛剛創建的classes下
3、Libraries-> "+"-> java-> 選擇剛剛創建的lib文件-> jar Directory-> ok
第三步:配置Tomcat
Run-> Edit Configurations-> "+"-> Tomcat Server -> local-> Server的Application server-> Configure-> 選擇你的Tomcat位置(比如我的apache-tomcat-9.0.46)
注意:在Deployment下的Application context就是訪問的地址,比如說我的“/MyServlet_03_war_exploded”,那么我的訪問地址就是“localhost:8080/MyServlet_03_war_exploded”
第四步:創建RedirectServlet.java和BaiduSearch.java
public class RedirectServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 設置服務器端內容類型器 response.setContentType("text/html"); // 獲取服務器端輸出對象 PrintWriter out = response.getWriter(); // 直接重定向到:www.baidu.com response.sendRedirect("https://www.baidu.com"); out.close(); } }
public class BaiduSearch extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 獲取用戶輸入的關鍵字 String keyword =request.getParameter("keyword"); System.out.println(keyword); String url = "https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd="+keyword+"&oq=serious&rsv_pq=b7e075bf00169b14&rsv_t=6c67hEJVKkO%2Bkg08XTXPh9dlymb7lzNfD9TVjJHyHFxBgPqqSGuCNRywm30&rqlang=cn&rsv_enter=1&prefixsug=%25E4%25BD%25A0%25E5%25A5%25BD&rsp=1&rsv_dl=ts_1&inputT=8774"; System.out.println(url); // 重定向的百度搜索 response.sendRedirect(url); } }
第五步:創建redirect.html(注意:這個html的位置一定要放在和jsp同一個文件下)而我總是把它放到了WEB-INF文件夾下與xml並列,在servlet類中肯定識別不(我是這么理解的)。這也是我出現404的原因!
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Search by KeyWord</title> </head> <body> <div style="text-align: center"> <form action="BaiduSearch"> 關鍵字:<input type="text" name="keyword"><input type="submit" value="百度搜索"> </form> </div> </body> </html>
第六步:配置web.xml
?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>ServletRequest</display-name> <welcome-file-list> <welcome-file>redirect.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>RedirectServlet</servlet-name> <servlet-class>RedirectServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RedirectServlet</servlet-name> <url-pattern>/RedirectServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>BaiduSearch</servlet-name> <servlet-class>BaiduSearch</servlet-class> </servlet> <servlet-mapping> <servlet-name>BaiduSearch</servlet-name> <url-pattern>/BaiduSearch</url-pattern> </servlet-mapping> </web-app>
完成以后!運行就可以了實現Servlet重定向了!!!