0

谁能告诉我如何使用 java servlet 指定特定资源的 url?我正在使用日食。下面的代码生成一个 servlet,其主页可以在 url 中查看:

http://www.mysite.com/myapp/thisservlet/  

相反,我希望能够在 url 访问特定的 jsp:

http://www.mysite.com/myapp/thisservlet/thishere.jsp  

另外,我希望 thishere.jsp 能够在 Eclipse 中调用位于我的应用程序目录结构中其他位置的代码。例如,在我的 eclipse 项目中,thishere.jsp 位于 myapp/web/WEB-INF/web 文件夹中。但是,ThatThereApplet.java 位于包 myapp.myapplets 中,该包位于我的 Eclipse 项目中的路径 myapp/src/myapp.myapplets/ThatThereApplet.java 中。或者,我还将 ThatThereApplet.class 捆绑在 test_applets_1.jar 中,我将其放置在我的 Eclipse 项目的 myapp/web/WEB-INF/lib 文件夹中,然后使用 Eclipse 中的上下文菜单将其添加到我的应用程序的构建路径中.

谁能告诉我如何更改下面的代码,以便它完成我上面描述的操作?

这是 ThisServlet.java 的代码:

package myapp.web;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ThisServlet extends HttpServlet {

   private RequestDispatcher jsp;

   public void init(ServletConfig config) throws ServletException {
      ServletContext context = config.getServletContext();
      jsp = context.getRequestDispatcher("/WEB-INF/jsp/thishere.jsp");
   }

   protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
   throws ServletException, IOException {
      jsp.forward(req, resp);
   }
}

这是 thishere.jsp 的代码:

<html>
<head>
<title>Test Applets Go Here</title>
</head>
<body>
<h1>Gonna put an applet below:</h1>
<applet code="myapp.myapplets.ThatThereApplet.class" archive="test_applets_1.jar" width="500" height="500">
<h1>The applet should be above this line.</h1>
</body>
</html>

这是我封装在 test_applets_1.jar 中并添加到构建路径中的代码:

package myapp.myapplets;
import java.applet.*;
import java.awt.*;

public class ThatThereApplet extends Applet {

   int width, height;

   public void init() {
      width = getSize().width;
      height = getSize().height;
      setBackground( Color.black );
   }

   public void paint( Graphics g ) {
      g.setColor( Color.green );
      for ( int i = 0; i < 10; ++i ) {
         g.drawLine( width, height, i * width / 10, 0 );
      }
   }
}

这是 web.xml 的相关部分:

<servlet>
    <servlet-name>thisservlet</servlet-name>
    <servlet-class>myapp.web.ThisServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>thisservlet</servlet-name>
    <url-pattern>/thisservlet</url-pattern>
</servlet-mapping>  

编辑:


我遵循了 Sudhakar 的建议并更改了 web.xml 以表明:

<url-pattern>/thisservlet/thishere.jsp</url-pattern>  

但是,当我在浏览器中加载 thishere.jsp 时,应用程序无法找到小程序的位置,因此即使加载了 thishere.jsp,小程序也不会加载。当我在 Web 浏览器中加载 thatthere.jsp 时,我运行了 Java 控制台,以下是它产生的错误日志:

load: class myapp.myapplets.ThatThereApplet.class not found.
java.lang.ClassNotFoundException: myapp.myapplets.ThatThereApplet.class
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.lang.ClassNotFoundException: myapp.myapplets.ThatThereApplet.class

谁能告诉我如何更改上面的代码,以便应用程序能够找到 ThatThereApplet.class 并将其成功加载到 thishere.jsp 中?

4

1 回答 1

1

url-patternweb.xml 中的更改为

<servlet-mapping>
    <servlet-name>thisservlet</servlet-name>
    <url-pattern>/thisservlet/thishere.jsp</url-pattern>
</servlet-mapping> 
于 2013-02-23T05:44:38.587 回答