关于Servlet映射 你还得写: <servlet> <servlet-name>controller</servlet-name> <servlet-class>你的包名.ControlServlet</servlet-class> </servlet> 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主,多此一举,为什么映射成*.html,对于.html的文件首先在服务器端是由html的引擎处理的,那里轮到jsp的引擎。 楼主的做法的确比较奇怪,如果非要这么做的话,可以参考struts中actionservlet的作法 感谢诸位回答。对:zyymmm(娃哈哈) 我的web.xml有相应的设置。我的想法是先把对html的访问请求完全交由一个控制器Servlet来控制,再由控制器分配到相应的jsp页面上。这是Professional Java Programming J2EE 一书中介绍的MVC实现手段,但不知为何我的设置不行。盼望高手们继续指点!谢谢! 你这样: ServletContext context = this.getServletContext() ; RequestDispatcher rd = context.getRequestDispatcher(page); rd.forward(request,response); //page 是你要的*.html你的程序咋写的,帖给我看看 程序如下: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文件? 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文件的名字 To: ZeroC(笨小孩) 多谢! 还是有一点不明白,怎么“把这个*.html对应到实际的html文件”?难道要在web.xml中把所有可能请求的html都列出来吗? 请指教谢谢! handle.jsp在什么位置?你servlet的启动页面是的路径是localhost:8080/myweb/*.html当然你的启动html的名称也为*.html,让后在*.html中提交servlet处理处理是你的handle.jsp应该放在myweb这个目录下面 当然*在里面是不会识别为通配符的 何必非要用后缀匹配呢?前缀匹配覆盖你所有的html不就没这么多麻烦事了 To:yfh0919(梦白) 我的文件路径和你说的一样。既然"*"不作为通配符,那如何实现我的要求呢?To:phoenixtree(单身贵族) 怎样实现前缀匹配?望指教,谢谢! /test/*那么所有以这个为前缀的URL(比如:http://localhost:8080/test/controller/your.html)都会交给对应的servlet处理 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 做的。 注意:<servlet-mapping> <servlet-name>MainServlet</servlet-name> <url-pattern>*.do</url-pattern></servlet-mapping>中*.do不要/,切记,我也因/*.do而报错。 如果是resin的话,要看看resin.conf中的servlet-mapping 【100分】怎么知道浏览器已关闭? 对于XXX路径的访问被拒绝是怎么回事啊? hibernate中自动生成dao文件的问题 【请问】既然JBoss既是web容器又是EJB容器,那么为什么还要在Tomcat中调用EJB啊? 关于方法覆盖的问题,程序运行成功,马上给分。 struts标签问题 JFreeChart 问题 tomcat重复配置出错问题 (想请客有没有人赏脸?)为什么我的java程序在更新库时总会死掉 使用文档对象模式脚本显示xml文档的问题? EJB返回值问题!!!急!在线等 J2EE和EJB是什么关系,JSP又和两者是什么关系?
ServletContext context = this.getServletContext() ;
RequestDispatcher rd = context.getRequestDispatcher(page);
rd.forward(request,response);
//page 是你要的*.html你的程序咋写的,帖给我看看
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文件?
{
String viewURL = "handle.jsp";
request.getRequestDispatcher(viewURL).forward(request,response);
}
你这段根本没办法跳转,当你定义了映射了之后*.html并不代表html文件,它只是一个请求,你要把这个*.html对应到实际的html文件,虽然他们可能是相同的,然后通过request.getRequestDispatcher(viewURL).forward(request,response);跳转,记得viewURL需要转化为时间的html文件的名字
当然你的启动html的名称也为*.html,让后在*.html中提交servlet处理处理是你的handle.jsp应该放在myweb这个目录下面 当然*在里面是不会识别为通配符的
是指你的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 做的。
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>中*.do不要/,切记,
我也因/*.do而报错。