Servlet的forward的简单问题?

unm 2010-01-20 11:50:53
奇怪,按理说是非常简单的问题,可是这里出错了

webpart目录下项目为myproject

web.xml 里映射为
<servlet-mapping>
<servlet-name>Srvt</servlet-name>
<url-pattern>/servlet/Srvt</url-pattern>
</servlet-mapping>

login页面post到servlet处理

String webPath = Config.getWebPath();// webpath=myproject

getServletConfig().getServletContext().getRequestDispatcher(webPath+path).forward(req, res);

执行都正确,但是浏览器直接找不到文件:
type Status report
message /myproject/myproject/index.jsp
description The requested resource (/myproject/myproject/index.jsp) is not available.

也就是项目路径直接出现了2次,肯定找不到这个了
可是,如果
getServletConfig().getServletContext().getRequestDispatcher(webPath+path).forward(req, res);
不加webPath,直接执行到这里就出现异常,路径就不对

可是加上webPath没有报异常可是项目路径又出错了。。。。。。。。
这个地方没搞清楚。

对有搞过的清楚,我就不清楚了,哪位达人给个清楚的解释?或者还有哪里配置错误?谢谢
...全文
196 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
unm 2010-02-09
sorry,我每个都给分了
但选择的无满意结贴,分都没了。。。。。
不好意思各位
回复
crazylaa 2010-01-25
[Quote=引用 15 楼 unm 的回复:]
安装突然发现一个状况
如果集成到eclipse中的tomcat,在调试状况下,一直是这个问题
但是!!!!!!!!!
如果单独执行tomcat目录下的启动,则不会出现这个问题,eclipse下tomcat也使用的这个tomcat!!!

晕了
[/Quote]
eclipse下有个地方,可能是在工程的properties里面,可以设置一个项目的ContextPath还是URL partern(单词忘了),把那里不要用/myproject了,直接/试试看
回复
unm 2010-01-25
安装突然发现一个状况
如果集成到eclipse中的tomcat,在调试状况下,一直是这个问题
但是!!!!!!!!!
如果单独执行tomcat目录下的启动,则不会出现这个问题,eclipse下tomcat也使用的这个tomcat!!!

晕了
回复
caolijunmingyan 2010-01-23
关注,
回复
crazylaa 2010-01-22
forward是很久以前的事了。。。现在用struts,不用自己写forward,当然就没遇到咯。
回复
unm 2010-01-22
forword的路径问题好似大家都没问题的额

2次forword都没有遇到过吗?
回复
unm 2010-01-21
[Quote=引用 3 楼 zl3450341 的回复:]
request.getRequestDispatcher("xxx").forward(request, response);
[/Quote]

request也不行,执行到这里也是抛出异常
java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/CategorizedProblem;
at org.apache.jasper.compiler.JDTCompiler$2.acceptResult(JDTCompiler.java:354)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:335)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:413)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:316)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:294)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:281)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
回复
au5ju38ix 2010-01-21
关注一下,帮顶
回复
unm 2010-01-21
[Quote=引用 2 楼 crazylaa 的回复:]
path是个啥?
path前面不要/;webPath不要了,试试
[/Quote]

path 是要forword的路径,path钱不要 / 不行,执行到这里抛出异常
回复
request.getRequestDispatcher("xxx").forward(request, response);
回复
unm 2010-01-21
也就是提交到servlet后先forword到toxml.jsp执行完成后再到servlet执行forword到index.jsp
我不太清楚是什么时候 根路径变成两个 myprojetc 了
如何以及在哪里可设定?
回复
unm 2010-01-21
里面的逻辑我详细描述一遍:
这里是执行了2个界面,先toxml.jsp返回一个信息,然后再到index.jsp界面
我在内部先
getServletConfig().getServletContext().getRequestDispatcher(“toxml.jsp”).forward(req, res);也就是forword到一个toxml.jsp先返回一个xml
然后再forward到index.jsp,
getServletConfig().getServletContext().getRequestDispatcher(“index.jsp”).forward(req, res);

Servlet中间执行的过程我感觉就是第一次forword的时候根路径是myprojetc,当toxml.jsp执行完后服务端的Servlet路径变掉了,当第一次forword的时候,虽然编译过去了,但是myprojetc有重复,导致出现问题。
回复
whut_lcy 2010-01-21
RequestDispatcher要求它的path一定是/开头的
这个/是什么?是webapps下面web程序的路径。就一个/表示ROOT名称的web程序,/myproject表示你的myproject程序的路径。懂Linux的话这个很容易理解,Linux的文件系统就是这样的

如果你直接给dispatchter传递"/index.jsp"的话,它就给你导航到了ROOT的index.jsp

明白了这个,就好办了。

你要导航到myprojetc/index.jsp,那么好办。只要你的路径是/myproject/index.jsp就行了
往这个方向努力吧:/+web程序名称+/+jsp路径
String path = "/"+getAppName+"/"+jsp路径

getAppName就是获取你的web程序名称的方法



回复
hyowner 2010-01-21
弄个新页面先测试下
回复
todayclock 2010-01-21
那你就先测试一下,新建一个页面,然后添加一个链接,跳转到Svt中,看一下是否成功
回复
crazylaa 2010-01-20
path是个啥?
path前面不要/;webPath不要了,试试
回复
feyyee 2010-01-20
找个纯净的JSP页,来做。
去掉MyEclipse给你生成的<% %> 里的东西
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告