谁能告诉我如何使用 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 中?