我正在为学校做一个项目,我非常沮丧。该项目是在我们的个人网站上获得一个简单的JSP/Servlet演示,经过大约20多个小时的工作,我仍然没有成功地完成这项工作。真正令人沮丧的是,我已经得到了所有的代码,但仍然不能真正让它工作。好吧,这并不完全正确。我已经让它在我的本地tomcat服务器上工作,但我不能在我的个人网站上复制这种魔力。所以,这就是我所拥有的。
首先是代码。该任务由两个servlet类、两个jsp和一个web.xml文件组成。
这是第一个servlet,名为ControllerServlet.java
package test;
// Import the servlet classes
import javax.servlet.*;
import javax.servlet.http.*;
// Import the standard Java classes
import java.io.*;
import java.util.*;
/**
* Controller Servlet
*/
public class ControllerServlet extends HttpServlet
{
private static String HELLO_JSP = "hello.jsp";
private static String GOODBYE_JSP = "goodbye.jsp";
private static String OTHER_JSP = "main.jsp";
public void init() throws ServletException
{
// Typically initialize your request to page mappings here
}
public void service( HttpServletRequest req, HttpServletResponse res ) throws ServletException
{
try
{
// Get the path - this is our key to our Request map
String pathInfo = req.getPathInfo();
// Find out what the user is requesting
String jsp = null;
if( pathInfo.equalsIgnoreCase( "/hello" ) )
{
String name = req.getParameter( "name" );
PersonBean person = new PersonBean( name );
HttpSession session = req.getSession();
session.setAttribute( "person", person );
jsp = HELLO_JSP;
}
else if( pathInfo.equalsIgnoreCase( "/goodbye" ) )
{
HttpSession session = req.getSession();
PersonBean person = ( PersonBean )session.getAttribute( "person" );
req.setAttribute( "person", person );
session.removeAttribute( "person" );
jsp = GOODBYE_JSP;
}
else
{
jsp = OTHER_JSP;
}
// Foward the request to the jsp
RequestDispatcher dispatcher = req.getRequestDispatcher( "/" + jsp );
dispatcher.forward( req, res );
}
catch( IOException ioe )
{
throw new ServletException( ioe );
}
}
}
现在PersonBean.java:
package test;
public class PersonBean implements java.io.Serializable
{
private String name;
public PersonBean()
{
}
public PersonBean( String name )
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setName( String name )
{
this.name = name;
}
}
现在是hello.jsp:
<jsp:useBean id="person" class="test.PersonBean" scope="session" />
<HTML>
<HEAD>
<TITLE>Hello, <jsp:getProperty name="person" property="name" /></TITLE>
</HEAD>
<BODY>
<P>Hello, <jsp:getProperty name="person" property="name" /></P>
<A HREF="goodbye">Goodbye</A>
</BODY>
</HTML>
和goodbye.jsp
<jsp:useBean id="person" class="test.PersonBean" scope="session" />
<HTML>
<HEAD>
<TITLE>Good bye, <jsp:getProperty name="person" property="name" /></TITLE>
</HEAD>
<BODY>
<P>Good bye, <jsp:getProperty name="person" property="name" /></P>
</BODY>
</HTML>
最后我的web xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>deploy</display-name>
<servlet>
<description>
</description>
<display-name>ControllerServlet</display-name>
<servlet-name>ControllerServlet</servlet-name>
<servlet-class>test.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ControllerServlet</servlet-name>
<url-pattern>/testing/*</url-pattern>
</servlet-mapping>
</web-app>
我的web服务器的文件管理器在public_html部分下有一个名为web - inf的文件夹,因此在该文件夹中我放置了两个jsp和web xml文件。下面是一个预先存在的名为classes的文件夹,我在其中创建了一个名为test的新文件夹,并在该文件夹中放置了两个类文件。我想去mysite.com/testing/hello?name=Bradley会导致正确的事情发生,但不幸的是,我得到一个404错误,说url测试/你好没有找到。
有没有人有任何建议,为什么和不能使这种情况发生?
web.xml
中的servlet类声明错误。将ControllerServlet
放入test
包中。所以正确的servlet类声明应该是:
<servlet-class>test.ControllerServlet</servlet-class>
我不明白你是怎么让它在当地环境下工作的。也许这个包最初根本不存在,或者您从servlet类声明中删除了这个包,或者您在默认包和test
包中都有两个servlet类。
更新:根据目前给出的代码(并假设您在web.xml
中修复了servlet声明),文件夹结构应该是这样的:
public_html
|-- WEB-INF
| |-- classes
| | `-- test
| | |-- ControllerServlet.class
| | `-- PersonBean.class
| `-- web.xml
|-- goodbye.jsp
|-- hello.jsp
`-- main.jsp
你说的几件事让我对你的问题有点紧张。
-
通常使用构建工具(例如Ant或Maven)。您没有提及您正在使用的构建工具。
-
通常创建一个WAR文件并将其部署到应用程序服务器(例如Tomcat)。虽然可能,但手工将类文件复制到应用程序服务器上是不寻常的(如果您这样做,我认为您需要重新启动Tomcat以识别这个新应用程序)。
-
public_html听起来不像Tomcat,更像Apache。通常Tomcat web应用程序位于webapps目录下。
你的web应用程序应该包含如下内容:
~webapps/deploy/WEB-INF/web.xml
~webapps/deploy/WEB-INF/classes/test/ControllerServlet.class
~webapps/deploy/WEB-INF/classes/test/PersonBean.class
~webapps/deploy/hello.jsp
~webapps/deploy/goodbye.jsp
~webapps/deploy/main.jsp
~webapps/deploy/index.jsp
通常你的战争让我们称之为部署。war(以web.xml中的display-name命名)将包含上面部署目录中的所有内容。这个WAR文件将被部署到Tomcat。部署可以通过将WAR文件复制到Tomcat的webapps目录或使用Tomcat管理器App来完成。
index.jsp通常是web应用程序的默认登录页面(您可以在web.xml中更改此设置)