¿Cómo configurar la ruta del servlet para que HTML invoque correctamente el archivo servlet?

Mi objective : acceder a un archivo .htm y pasar la entrada del usuario al servlet invocado y mostrar el contenido.

Lo que hice: utilicé eclipse Juno para crear un proyecto dynamic: ServeletTest. La estructura del proyecto es la siguiente:

enter image description here

El archivo de servlet es MyServlet.java y el código relacionado es:

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("") ; out.println("Hello Servlet") ; out.println("") ; out.println("

" + info + "

") ; out.println("") ; out.println("") ; 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); } }

El archivo html es input.htm. Y el código de detalle es:

  This is html file  
Type something:

Y el web.xml se define como:

  Welcome to Tomcat  Welcome to Tomcat   myservlet ylai.Servlet.test.MyServlet   myservlet /myservlet   

Cuando ejecuto el archivo input.htm usando Tomcat incorporado dentro de Eclipse, funciona bien, y MyServlet.java puede mostrar el contenido de entrada en input.htm. La captura de pantalla es como sigue:

enter image description here

enter image description here

Parece que funciona bien

Mi pregunta :

Si quiero modificar el valor de en el web.xml como

   myservlet /myservletURL  

Lo que esperaba era que una vez que se enviara input.htm, invocaría el serlvet y la dirección de la página web debería ser:

 http://localhost:8080/ServeletTest/myservletURL 

Pero la dirección de la página de visualización es fija, no cambia:

http://localhost:8080/ServeletTest/myservlet con error HTTP de estado 404.

¡Se ve raro! El mecanismo debería ser: Cuando envío la página input.htm, invocará servlet por servlet-name en web.xml. En este caso, servlet-name es myservlet. Tomcat utilizará servlet-name para encontrar la ubicación real del archivo servlet: MyServlet.java y ejecutarlo. La dirección de la página de redireccionamiento dependerá de lo que defina. En este caso, debería / ServeletTest / myservletURL Pero ahora mismo. El archivo de servlet no se puede invocar y la dirección de la página no es lo que espero.

¿Tengo mal entendimiento sobre el mecanismo de invocación de servlets u otros?

Si cambiaste el url-pattern a myservletURL, también necesitarás actualizar la acción del formulario para apuntar a esta nueva url.

 LifeCycleServlet--@WebServlet("/LifeCycleServlet") MyServlet--@WebServlet(description = "test servlet", urlPatterns = { "/MyServlet" }) 

borre estas líneas porque aquí ha mencionado url como MyServlet

o

Cambie este urlpattern {“/ MyServlet”} también