我的目標:訪問.htm文件,並將用戶輸入傳遞給調用的servlet並顯示內容。如何設置Servlet路徑使HTML正確調用servlet文件?
我做了什麼:我用eclipse Juno創建了一個動態項目:ServeletTest。該項目的結構如下:
該servlet文件MyServlet.java和相關的代碼是:
package ylai.Servlet.test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* Servlet implementation class MyServlet
*/
@WebServlet(description = "test servlet", urlPatterns = { "/MyServlet" })
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String info = request.getParameter("info") ;
PrintWriter out = response.getWriter() ;
out.println("<html>") ;
out.println("<head><title>Hello Servlet</title></head>") ;
out.println("<body>") ;
out.println("<h1>" + info + "</h1>") ;
out.println("</body>") ;
out.println("</html>") ;
out.close() ;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(request, response);
}
}
HTML文件是input.htm。和細節代碼:
<html>
<head><title>This is html file</title></head>
<body>
<form action="myservlet" method="post">
Type something:<input type="text" name="info">
<input type="submit" value="submit">
</form>
</body>
</html>
和web.xml文件中定義爲:當我運行使用內置的Tomcat在Eclipse中的input.htm
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>ylai.Servlet.test.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
</web-app>
,它工作正常,並input.htm中的輸入內容可以由MyServlet.java顯示。的屏幕快照如下:
似乎工作正常。
我的問題:
如果我想修改的值在web.xml作爲
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/myservletURL</url-pattern>
</servlet-mapping>
我所期待的是,一旦Input.htm位於提交,它會調用serlvet和網頁地址應該是:
http://localhost:8080/ServeletTest/myservletURL
但顯示頁面a地址仍然不變:
http://localhost:8080/ServeletTest/myservlet
帶有HTTP狀態404錯誤。
它看起來很奇怪!該機制應該是:當我提交input.htm頁面時,它將通過web.xml中的servlet-name調用servlet。在這種情況下,servlet-name是myservlet。 Tomcat將使用servlet-name來查找servlet文件的實際位置:MyServlet.java並執行它。重定向頁面地址取決於你定義的內容。在這種情況下,它應該/ ServeletTest/myservletURL 但現在。 Servlet文件不能被調用,並且頁面地址不是我所期望的。
我對servlet調用機制或其他方面有錯誤的理解嗎?如果你改變了URLPATTERN
你確定表單操作應該與url-pattern匹配嗎?不是web.xml中的Servelt名稱?我累了,但問題仍在這裏。 –
是的,因爲瀏覽器會打電話給你的網頁打電話。它不知道web.xml文件中的內容,web.xml告訴服務器哪些URL映射到哪個servlet類。 – nitind
您的意思是說html文件會根據web.xml中的的值而不是servlet-name的值來找到重定向頁面?如果是的話,HTML如何知道它需要提交哪個servlet? mapping-url是自定義的,與實際調用servlet信息沒有關係。 –