关于Servlet映射

princerock 2003-06-12 04:37:53
在JBuilder7下,想用一个ControllerServlet接受所有对*.html文件的访问,在web.xml中应该如何设置servlet-mapping?

如设置成:
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>/*.html</url-pattern>
</servlet-mapping>
则默认页成为了“*.html”,而对所有html的访问(如index.html)都提示“document not found."为什么?

希望高手指点!
...全文
71 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdev 2003-06-22
  • 打赏
  • 举报
回复
如果是resin的话,要看看resin.conf中的servlet-mapping
liliang_740705 2003-06-22
  • 打赏
  • 举报
回复
注意:
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

中*.do不要/,切记,
我也因/*.do而报错。
liliang_740705 2003-06-22
  • 打赏
  • 举报
回复
ZeroC(笨小孩)的“把这个*.html对应到实际的html文件”?
是指你的jsp或html中的<form>中的action应为“??.html"

而不是页面hHtml页面

我的一个例子create_customer.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/waftags.tld" prefix="waf" %>

<form method="POST" action="createcustomer.do">

<input type="hidden" name="action" value="create"/>

<table cellpadding="5" cellspacing="0" width="100%" border="0">

<tr>
<td colspan="3"><p class="kmcatv_title"><h1>请填写客户信息</h1></p></td>
</tr>

</table>
</form>


web.xml
<servlet>
<servlet-name>MainServlet</servlet-name>
<display-name>MainServlet</display-name>
<description>The Front Controller for the Pet Store</description>
<servlet-class>com.sun.j2ee.blueprints.waf.controller.web.MainServlet</servlet-class>
<init-param>
<param-name>default_locale</param-name>
<param-value>en_US</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

是模仿pet store 做的。
phoenixtree 2003-06-21
  • 打赏
  • 举报
回复
/test/*

那么所有以这个为前缀的URL(比如:http://localhost:8080/test/controller/your.html)都会交给对应的servlet处理
princerock 2003-06-17
  • 打赏
  • 举报
回复
问题还是没有解决啊,还请诸位高手再关注一下。
princerock 2003-06-15
  • 打赏
  • 举报
回复
顶。
princerock 2003-06-15
  • 打赏
  • 举报
回复
顶。
princerock 2003-06-15
  • 打赏
  • 举报
回复
To:yfh0919(梦白) 我的文件路径和你说的一样。既然"*"不作为通配符,那如何实现我的要求呢?

To:phoenixtree(单身贵族) 怎样实现前缀匹配?望指教,谢谢!
phoenixtree 2003-06-15
  • 打赏
  • 举报
回复
何必非要用后缀匹配呢?前缀匹配覆盖你所有的html不就没这么多麻烦事了
yfh0919 2003-06-15
  • 打赏
  • 举报
回复
handle.jsp在什么位置?你servlet的启动页面是的路径是localhost:8080/myweb/*.html
当然你的启动html的名称也为*.html,让后在*.html中提交servlet处理处理是你的handle.jsp应该放在myweb这个目录下面 当然*在里面是不会识别为通配符的
princerock 2003-06-14
  • 打赏
  • 举报
回复
To: ZeroC(笨小孩) 多谢! 还是有一点不明白,怎么“把这个*.html对应到实际的html文件”?难道要在web.xml中把所有可能请求的html都列出来吗? 请指教谢谢!
ZeroC 2003-06-14
  • 打赏
  • 举报
回复
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String viewURL = "handle.jsp";
request.getRequestDispatcher(viewURL).forward(request,response);
}


你这段根本没办法跳转,当你定义了映射了之后*.html并不代表html文件,它只是一个请求,你要把这个*.html对应到实际的html文件,虽然他们可能是相同的,然后通过request.getRequestDispatcher(viewURL).forward(request,response);跳转,记得viewURL需要转化为时间的html文件的名字
princerock 2003-06-14
  • 打赏
  • 举报
回复
程序如下:

package myweb;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class ControllerServlet extends HttpServlet
{
public void init() throws ServletException
{
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String viewURL = "handle.jsp";
request.getRequestDispatcher(viewURL).forward(request,response);
}
public void destroy()
{
}
}

相应web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>controllerservlet</servlet-name>
<servlet-class>myweb.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>controllerservlet</servlet-name>
<url-pattern>/*.html</url-pattern>
</servlet-mapping>
</web-app>

在JBuilder中运行时,默认指向了localhost:8080/myweb/*.html(为何它不识别"*"昨为通配符?),显示正常,但输入其它html网址(如index.html)则出现"document not found"错误。 是不是"/*.html"并不代表所有html文件?
princerock 2003-06-14
  • 打赏
  • 举报
回复
顶。
zyymmm 2003-06-13
  • 打赏
  • 举报
回复
你这样:
ServletContext context = this.getServletContext() ;
RequestDispatcher rd = context.getRequestDispatcher(page);
rd.forward(request,response);
//page 是你要的*.html

你的程序咋写的,帖给我看看
princerock 2003-06-13
  • 打赏
  • 举报
回复
liwon 2003-06-13
  • 打赏
  • 举报
回复
gz
princerock 2003-06-12
  • 打赏
  • 举报
回复
感谢诸位回答。对:zyymmm(娃哈哈) 我的web.xml有相应的设置。

我的想法是先把对html的访问请求完全交由一个控制器Servlet来控制,再由控制器分配到相应的jsp页面上。这是Professional Java Programming J2EE 一书中介绍的MVC实现手段,但不知为何我的设置不行。

盼望高手们继续指点!谢谢!
huaiqing 2003-06-12
  • 打赏
  • 举报
回复
同意楼上!
bighappy 2003-06-12
  • 打赏
  • 举报
回复
楼主的做法的确比较奇怪,如果非要这么做的话,可以参考struts中actionservlet的作法
加载更多回复(3)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧