我正在开发一个需要两个界面的应用程序 - 一个用于手机浏览器,另一个用于普通PC浏览器。第二个界面需要提供更多信息并具有更多功能。当然,它们都在同一个项目中并使用相同的bean等。它只是表示层的变化。目前,我只有手机界面。当我选择地址时可以访问它:// ip-address:8080 / App /但是当我尝试直接进入具有该界面的页面时不可访问://ip-address:8080/App/page.jsp。我收到以下错误:
org.apache.jasper.JasperException:An 处理JSP页面时发生异常 第30行的/page.jsp
javax.faces.context.FacesContext context = javax.faces.context.FacesContext.getCurrentInstance(); 30:
。context.getViewRoot()的setLocale(newLocale); 31:%> 32:33:堆栈跟踪: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
根本原因
显示java.lang.NullPointerException org.apache.jsp.page_jsp._jspService(page_jsp.java:91) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
当然,我的web.xml中的信息是欢迎页面设置为
<welcome-file-list>
<welcome-file>faces/page.jsp</welcome-file>
</welcome-file-list>
如果我要从web.xml中删除此部分,我能够访问该页面还是与其他内容相关的问题?最后,我希望通过提供这样的链接来达到不同的界面:
// IP地址:8080 /应用/ mobile_page.jsp //ip-address:8080/App/browser_page.jsp
感谢您的任何意见。 最好的祝福, SASS。
答案 0 :(得分:2)
此异常表示FacesContext#getCurrentInstance()
正在返回null
。这意味着尚未创建FacesContext
。对此负责的是FacesServlet
。这反过来意味着根本没有调用FacesServlet
。
要调用FacesServlet
,您需要确保请求网址与url-pattern
中定义的FacesServlet
的{{1}}相匹配。
您似乎已在web.xml
上映射了FacesServlet
。因此,您需要按http://ip-address:8080/App/faces/page.jsp打开页面,而不是http://ip-address:8080/App/page.jsp。
答案 1 :(得分:1)
如果您使用JSF,则不应直接访问JSP页面,而应通过处理程序(faces / *或* .jsf)