我目前正在尝试运行一个servlet,该servlet检查GET值并写入该值。
这是我的课:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet extends HttpServlet {
/**
*
*/
public Servlet() {
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
final String myValue = request.getParameter("MyValue");
if (myValue != null && !myValue.isEmpty()) {
response.getWriter().write(myValue);
}
}
}
这很简单,对吧?
我已经尝试了很多url,以便能够看到我的结果如下:
- http://localhost:8080/Servlet/servlet/Servlet
- http://localhost:8080/Servlet/servlet/Servlet?MyValue=Test
- http://127.0.0.1:8080/Servlet/servlet/Servlet
- http://127.0.0.1:8080/Servlet/servlet/Servlet?MyValue=Test
我的代码有问题吗?还是eclipse有问题?
Thx
您没有告诉任何关于问题症状的信息,但我假设您在所有尝试中都会收到HTTP 404错误页面,对吧?
您需要将servlet映射到URL模式上。首先,您需要确保servlet类被放置在一个包中(我们在这个答案中假设com.example
)。
如果您仍然使用JavaEE5(甚至J2EE..),请在Web应用程序的/WEB-INF/web.xml
中注册它(Eclipse应该已经自动生成了一个):
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>com.example.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
(servlet名称基本上是实例变量名称,在整个应用程序中只有一个;servlet类显然是FQN;URL模式是servlet的Web内容相对URL)
或者,当您已经使用了最新的Java EE 6时,请使用@WebServlet
对其进行注释,其中您将URL模式指定为值:
package com.example;
// ...
@WebServlet("/servlet")
public class Servlet extends HttpServlet {
// ...
}
无论哪种方式,它基本上都表明servlet应该侦听与/servlet
匹配的与web内容相关的URL。因此,假设您的web上下文根路径是/Servlet
,那么应该这样做:
http://localhost:8080/Servlet/servlet
将来,如果您通过New>创建servlet类,会更容易;Servlet而不是新建>类,那么这一切都将在向导中自动考虑在内。
另请参阅:
- 我们的Servlet wiki页面-包含一些Hello World示例-您可以将鼠标悬停在servlet上方一段时间,直到出现一个黑色信息框,然后单击其中的info链接来访问此页面
您可以在eclipse->Properties->Web project Settings中右键单击您的项目来找到您的Context Root。