这可能吗?
RequestDispatcher rd = request.getRequestDispatcher("index.html");
rd.forward(request, response);
Run Code Online (Sandbox Code Playgroud) 在我的一个servlet中,我RequestDispatcher.forward()在WEB-INF文件夹下的某个地方调用静态资源:
request
.getRequestDispatcher( "/WEB-INF/some/path/image.gif" )
.forward( request, response );
Run Code Online (Sandbox Code Playgroud)
导航到这个servlet在Tomcat,Jetty等下工作正常,但在WebSphere 7中不起作用.我得到的错误(在浏览器和服务器日志中)都是
Error 403: SRVE0190E: File not found: /WEB-INF/some/path/image.gif
Run Code Online (Sandbox Code Playgroud)
最初我假设WebSphere可能需要一些特定的配置来允许内部转发到WEB-INF下的资源,但我没有谷歌任何有用的东西.
任何想法为何会发生这种情况?
提前致谢!
根据javadoc:
在-request.getRequestDispatcher("/Test").forward(request,response);
forward 应该在响应提交给客户端之前调用(在响应正文输出被刷新之前)。响应缓冲区中未提交的输出在转发之前自动清除。
当提交或刷新此响应时,我感到困惑?
这是写作println的printwriter。
我对 request.getContextPath() 的含义感到困惑。我的文件布局如下:
MyServer/WebContent:
/Resources/MyImage.jpg
/Resources/Scripts/MyScript.js
/WEB-INF/JSP/MyPage.jsp
Run Code Online (Sandbox Code Playgroud)
在MyPage.jsp我能够通过以下方式找到JavaScript和图像
MyServer/WebContent:
/Resources/MyImage.jpg
/Resources/Scripts/MyScript.js
/WEB-INF/JSP/MyPage.jsp
Run Code Online (Sandbox Code Playgroud)
和
<script src="${pageContext.request.contextPath}/Resources/Scripts/MyScript.js">
Run Code Online (Sandbox Code Playgroud)
由此我得出的结论是,${pageContext.request.contextPath}动态解析为“WebContent”文件夹,并且我的理解是,无论它的名称是什么,这都将解析为该文件夹。那是有效的。
然而,从所有这些我得出的结论是,回到我的 .java 代码中request.getContextPath()也会动态解析为“WebContent”。但是当我尝试从 .java 代码转发到MyPage.jsp使用 .java 代码形成的字符串时request.getContextPath()+"/WEB-INF/JSP/MyPage.jsp",无法找到 JSP;这会导致 404 错误 - “请求的资源 (/MyServer/WEB-INF/JSP/MyPage.jsp) 不可用”。如果我调用,"/WEB-INF/JSP/MyPage.jsp"我们就会启动 JSP 页面。有人可以解释为什么预挂起request.getContextPath()会导致此失败吗?我是否应该使用其他方法来确保 .JSP 的路径始终得到解析?
有人请帮助我.
private void forward(String address,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
getServletContext()
.getRequestDispatcher("/" + address)
.forward(request, response);
}
private void include(String address,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
getServletContext()
.getRequestDispatcher("/" + address)
.include(request, response);
}
Run Code Online (Sandbox Code Playgroud)
这两个函数已经编写在我的项目中的每个servlet中,问题是当我在servlet中首先使用这两个函数时包含("servlet/abc",request.response); 之后它使用了forward("servlet/def",request.response); 所以使用Netbeans 7我一步一步地看着前进不是转发servlet的控制但是当我在转发前不使用include时它转发控件.
所以我想知道为什么会发生这种情况,原因是什么以及如何在包含任何servlet后继续前进.
请有人帮助我...这是一个有趣的问题.
include("servlet/abc",request, response);
forward("servlet/def",request, response); //HERE IS PROBLEM NOT FORWRDING AFTER INCLUDE
Run Code Online (Sandbox Code Playgroud) 我正在将我的请求从Login servlet转发到位于faculty文件夹(位于子文件夹)中的FacultyHomePage.jsp。...该页面已显示,但URL仍为/ LoginServlet。为什么网址没有更改?
HttpSession sc= request.getSession();
if(usertype==0)
{
sc.setAttribute("type", usertype);
sc.setAttribute("id",id );
rd=request.getRequestDispatcher("/faculty/FacultyHomePage.jsp");
rd.forward(request, response);
}
Run Code Online (Sandbox Code Playgroud) 这是我得到的错误:
SEVERE: Exception starting filter struts2
java.lang.NoClassDefFoundError: com/opensymphony/xwork2/config/FileManagerProvider
at org.apache.struts2.dispatcher.Dispatcher.init_FileManager(Dispatcher.java:336)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:465)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:193)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:424)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.ClassNotFoundException: com.opensymphony.xwork2.config.FileManagerProvider
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) …Run Code Online (Sandbox Code Playgroud) 我配置了应用程序并将"DispatcherServlet"编码为viewResolver,如下所示:
@Configuration
@EnableWebMvc
@ComponentScan ({"controllers"})
@EnableAutoConfiguration
@SpringBootApplication
public class Application {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
处理请求的Controller类看起来像这样:
@Controller
public class HelloControllerImpl {
@RequestMapping(value= "/welcome", method= RequestMethod.GET)
public String getWelcomePage(ModelMap model) {
model.addAttribute("message", "Spring 3 MVC - Hello World");
model.addAttribute("name", "vzateychuk");
return "welcome";
}
}
Run Code Online (Sandbox Code Playgroud)
视图文件:\ WEB-INF\views\welcome.jsp
<html>
<body>
<h1>Hello, : ${name}</h1>
<h2>Message : ${message}</h2>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
应用程序结构: 欢迎应用程序结构
我认为配置文件中缺少某些东西,但我看不到.你可以访问错误和意味着什么:"找不到带URI的HTTP请求的映射[/WEB-INF/views/welcome.jsp]"?我应该提供像dispatcher-servlet.xml这样的xml configuratin吗?先感谢您. …
如何doGet()从调用方法RequestDispatcher?
RequestDispatcher rd = sc.getRequestDispatcher("/CartServlet");
rd.forward(request, response);
此代码调用doPost()作为默认操作。