在 Apache Tomcat 上运行 JSF 项目
如何在Tomcat上午餐JSP项目?我将 WebContent
文件夹复制到 Apache 的 webapp
文件夹,但它找不到我的 jsp 页面,但如果我将 jsp 更改为 jsf (index.jsf) 则可以正常工作。我该如何解决这个问题?
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Graph</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<description>
This parameter tells MyFaces if javascript code should be allowed in
the rendered HTML output.
If javascript is allowed, command_link anchors will have javascript code
that submits the corresponding form.
If javascript is not allowed, the state saving info and nested parameters
will be added as url parameters.
Default is 'true'</description>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>
If true, rendered HTML code will be formatted, so that it is 'human-readable'
i.e. additional line separators and whitespace will be written, that do not
influence the HTML code.
Default is 'true'</description>
<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<description>
If true, a javascript function will be rendered that is able to restore the
former vertical scroll on every request. Convenient feature if you have pages
with long lists and you do not want the browser page to always jump to the top
if you trigger a link or button action that stays on the same page.
Default is 'false'
</description>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<servlet>
<servlet-name>faces</servlet-name>
<servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>controler.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/Upload</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
</web-app>
错误: 类型 状态报告
消息/Graph/index.jsp
描述请求的资源 (/Graph/index.jsp) 不可用。
How can lunch JSP project on Tomcat? I copy WebContent
folder to webapp
folder of Apache but it can't find my jsp page, but if I change jsp to jsf (index.jsf) works fine. How can I solve this problem?
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Graph</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<description>
This parameter tells MyFaces if javascript code should be allowed in
the rendered HTML output.
If javascript is allowed, command_link anchors will have javascript code
that submits the corresponding form.
If javascript is not allowed, the state saving info and nested parameters
will be added as url parameters.
Default is 'true'</description>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>
If true, rendered HTML code will be formatted, so that it is 'human-readable'
i.e. additional line separators and whitespace will be written, that do not
influence the HTML code.
Default is 'true'</description>
<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<description>
If true, a javascript function will be rendered that is able to restore the
former vertical scroll on every request. Convenient feature if you have pages
with long lists and you do not want the browser page to always jump to the top
if you trigger a link or button action that stays on the same page.
Default is 'false'
</description>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<servlet>
<servlet-name>faces</servlet-name>
<servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>controler.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/Upload</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
</web-app>
Error:
type Status report
message /Graph/index.jsp
description The requested resource
(/Graph/index.jsp) is not available.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
那不是问题。这是预期的行为。您只是误解了基本 Servlet API 的工作原理。您已将 JSF 标准
FacesServlet
配置为侦听与/faces/*
匹配的 URL,并且已将 Apache MyFaces 特定的MyFacesServlet
配置为侦听 URls匹配*.jsf
和*.faces
。要运行 JSF,您必须通过与 FacesServlet 映射匹配的 URL 在浏览器中打开页面。鉴于您有一个
index.jsp
文件,并且您的上下文路径是Graph
,并且您已经在三种不同的 URL 模式上配置了两个 JSF servlet,您可以打开通过以下 URL 访问 JSP:FacesServlet
)MyFacesServlet
)MyFacesServlet
)也就是说,您的配置不必要地过于复杂。删除
MyFacesServlet
条目及其所有关联的 URL 映射(servlet 名称为faces
)。只需坚持标准的 FacesServlet 并使用其映射,或更改它即可。我个人推荐使用*.jsf
。然后你就可以通过 http://localhost:8080/Graph/index.jsf 打开页面。
与具体问题无关,您的
welcome-file
不会以这种方式工作。 Tomcat 会给出 HTTP 404 错误(未找到页面/资源)。您需要将index.jsf
指定为welcome-file
并提供一个具体但空index.jsf
文件与您的index.jsp
相同的文件夹。这样Tomcat就会被欺骗,认为文件存在,并通过调用http://localhost:8080/Graph来显示页面。如果您担心可以通过
*.jsp
扩展名打开 JSF 页面,这会导致RuntimeException: FacesContext not found
并且您实际上没有 JSP 文件它将以普通方式提供服务,那么您可以通过web.xml
中的以下安全约束来限制对 JSP 文件的直接访问:(在 JSF 2.0 中,这不再需要了,使用默认视图技术 Facelets,可以将
FacesServlet
映射到*.xhtml
,这与 Facelets 文件的默认扩展名相同)That's not a problem. That's expected behaviour. You're just misunderstanding how the basic Servlet API works. You have configured the JSF-standard
FacesServlet
to listen on URLs matching/faces/*
and you have configured Apache MyFaces specificMyFacesServlet
to listen on URls matching*.jsf
and*.faces
.To get JSF to run, you have to open the page in browser by an URL which matches the mapping of the
FacesServlet
. Given the fact that you've anindex.jsp
file and that your context path isGraph
and that you have configured two JSF servlets on three different URL patterns, you can open the JSP by the following URLs:FacesServlet
)MyFacesServlet
)MyFacesServlet
)Said that, your configuration is unnecessarily overcomplicated. Get rid of the
MyFacesServlet
entry and all of its associated URL mappings (with the servlet name offaces
). Just stick to the standardFacesServlet
and use its mapping instead, or alter it instead. I personally recommend using*.jsf
.Then you can just open the page by http://localhost:8080/Graph/index.jsf.
Unrelated to the concrete problem, your
welcome-file
won't work that way. Tomcat would give a HTTP 404 error on that (page/resource not found). You need to specifyindex.jsf
aswelcome-file
and supply a concrete but emptyindex.jsf
file in the same folder as yourindex.jsp
. This way Tomcat will be fooled that the file exist and show the page by just calling http://localhost:8080/Graph.If your concern is that it is possible to open JSF pages by their
*.jsp
extension which would result in aRuntimeException: FacesContext not found
and you have actually no one JSP file which is to be served plain vanilla, then you can restrict direct access to JSP files by the following security constraint inweb.xml
:(in JSF 2.0 this is by the way not needed anymore, with the default view technology Facelets it's possible to map the
FacesServlet
on just*.xhtml
, which is the same as the default extension of Facelets files)可以使用 tomcat 管理器
http://tomcatIP:8080/manager/html
您 部署您的应用程序上传您的应用程序,它应该开箱即用
如果您不知道应该输入什么用户名和密码,则必须配置 tomcat-users.xml
you can deploy your application with the tomcat manager
http://tomcatIP:8080/manager/html
there you can upload your application and it should run out of the box
if you have no idea what username and password you should type in, you have to configure your tomcat-users.xml