Java Web 应用程序未使用注释
Java Web App NOT using annotation
需要构建一个不使用 >Java3 中使用的注释的应用程序,并且在开始时遇到了一些麻烦。似乎 web.xml/view/controller 中的设置是合乎逻辑的并且应该有效。给出 404 错误,如果我使用注释则不会。我想这就是作业声明不使用注释的原因!老朋友对 S.O 有什么建议吗?
P.S 任何建议都会真正帮助我启动此应用程序,我正在网上阅读,但我阅读的解决方案似乎不起作用。大多数最终建议使用注释...我不能使用!
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome Page</title>
</head>
<body>
<h1>Welcome Page</h1>
<br/>
<form action="/OptionsForYou" name="options">
<select>
<option>---Select---</option>
</select>
<button type="submit" value="submit">Submit</button>
</form>
</body>
</html>
OptionsWork.java
package com.server;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class OptionsWork
*/
public class OptionsWork extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String options = req.getParameter("options");
System.out.println(options);
}
}
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>Options</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>OptionsWork</servlet-name>
<servlet-class>com.server.OptionsWork</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OptionsWork</servlet-name>
<url-pattern>/OptionsForYou</url-pattern>
</servlet-mapping>
</web-app>
问题是,除非您的 webapp 部署在 ROOT 上下文中,否则您必须在任何 link 中指定上下文路径,包括表单的 action
属性。
假设您的应用部署为 myApp
(即在 $TOMCAT_ROOT/webapps/myApp
文件夹中的 Tomcat 中),那么您的 welcome.jsp
有 URL http://localhost:8080/myApp/welcome.jsp
和 OptionsWork
servlet "sits" 在 http://localhost:8080/myApp/OptionsForYou
URL。但是如果你在 <form action="/OptionsForYou" name="options">
中只指定 /OptionsForYou
,那么你调用 http://localhost:8080/OptionsForYou
,它确实不存在,你会得到 404 错误。
因此,在 之前添加 <%= request.getContextPath() %>
/OptionsForYou
以在操作中包含上下文路径,即您的 <form>
标记应该如下所示
<form action="<%= request.getContextPath() %>/OptionsForYou" name="options">
它应该可以工作。
需要构建一个不使用 >Java3 中使用的注释的应用程序,并且在开始时遇到了一些麻烦。似乎 web.xml/view/controller 中的设置是合乎逻辑的并且应该有效。给出 404 错误,如果我使用注释则不会。我想这就是作业声明不使用注释的原因!老朋友对 S.O 有什么建议吗?
P.S 任何建议都会真正帮助我启动此应用程序,我正在网上阅读,但我阅读的解决方案似乎不起作用。大多数最终建议使用注释...我不能使用!
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome Page</title>
</head>
<body>
<h1>Welcome Page</h1>
<br/>
<form action="/OptionsForYou" name="options">
<select>
<option>---Select---</option>
</select>
<button type="submit" value="submit">Submit</button>
</form>
</body>
</html>
OptionsWork.java
package com.server;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class OptionsWork
*/
public class OptionsWork extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String options = req.getParameter("options");
System.out.println(options);
}
}
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>Options</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>OptionsWork</servlet-name>
<servlet-class>com.server.OptionsWork</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OptionsWork</servlet-name>
<url-pattern>/OptionsForYou</url-pattern>
</servlet-mapping>
</web-app>
问题是,除非您的 webapp 部署在 ROOT 上下文中,否则您必须在任何 link 中指定上下文路径,包括表单的 action
属性。
假设您的应用部署为 myApp
(即在 $TOMCAT_ROOT/webapps/myApp
文件夹中的 Tomcat 中),那么您的 welcome.jsp
有 URL http://localhost:8080/myApp/welcome.jsp
和 OptionsWork
servlet "sits" 在 http://localhost:8080/myApp/OptionsForYou
URL。但是如果你在 <form action="/OptionsForYou" name="options">
中只指定 /OptionsForYou
,那么你调用 http://localhost:8080/OptionsForYou
,它确实不存在,你会得到 404 错误。
因此,在 之前添加 <%= request.getContextPath() %>
/OptionsForYou
以在操作中包含上下文路径,即您的 <form>
标记应该如下所示
<form action="<%= request.getContextPath() %>/OptionsForYou" name="options">
它应该可以工作。