jsp问题(菜鸟求救):登录模块的问题,登录时出现505错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp问题(菜鸟求救):登录模块的问题,登录时出现505错误相关的知识,希望对你有一定的参考价值。
网页显示的信息:
exception
org.apache.jasper.JasperException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.lang.NullPointerException
org.apache.jsp.login_jsp._jspService(login_jsp.java:85)
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:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Tomcat中显示的信息:
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.login_jsp._jspService(login_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
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.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
2009-5-9 9:34:16 org.apache.catalina.core.ApplicationContext log
应该不是Tomcat的问题,因为用另外一个登录模块可以实现,而这个不行:
然后使用传递过来的值;
空值问题多是因为你分配了空间,而没有赋值,出现错误,最好是每次定义为:例如Goods goods = null;
然后在判断 goods非空时引用。
每次用对象取值的时候,确保它非空,是一种好的习惯吧。 参考技术A java.lang.NullPointerException
应该是页面某数据为空,出现异常 参考技术B 这个是很正常的,你关掉服务器,然后在打开,tomcat服务器里面没有严重你就可以运行了,最坏的结果就 是重装,一切都好了(这个一般不用哈) 参考技术C 空指针异常,可能是你没有取到值。看看request中有没有值。
关于异步请求时出现的问题
第一个问题:
在struts2的配置文件中 如果不指定type的类型 那么在action中任何跳转都是默认forword类型的 称为内部跳转 比如下面的例子
第一个例子:
管理员登录成功之后 跳转到list.jsp页面
但是网页上的url却是下面的
第二个例子:
用户登录成功之后 跳转到detail.jsp页面
但是url
说了这么多 就是为了解决上面的操作和异步请求时 容易出现的问题
继续拿第二个例子来说明 如果在该详情页面中 我使用异步操作(比如做更新)
只要我们使用了异步操作 那么有没有想过 将来action中做了相应操作之后 无论是否返回数据给浏览器
异步请求之后 最终都是需要一个返回一个地址的 这个地址怎么确定呢
就是你在那个url上发送的异步请求 说到这 我们似乎有点明白了 即如果在一个url=.jsp上发送的异步请求 那么将来返回的
地址就是这个.jsp页面 如果在url =xxx.action上发送的异步请求 那么将来返回的时候 还会去找这个action地址
所以就造成了如下的结果
登录成功之后(url=xx.action 只是把登录成功之后的detail.jsp页面在当前url下展示了出来 所以请求地址不是xx.jsp 在以前的总结中提到过forward和redirect的区别) 在该页面上 我想要修改员工的信息
那么我们点击提交 打个断点来观察 下面是点击“信息变更”之后 准备发送异步请求(时刻记得当前请求的url=empAction_login.action 因为一会返回时就会返回个这个action 而不是detail这个页面)
继续下一步
正常进入提高的更新action 这里我把response给注销掉了(其实有没有该语句 执行效果都 一样 如下面的情况)
首先 我在empAction_login.action中 打上了断点 易于观察
然后继续下一步
可以看到 我们刚才的推论是正确的 它的确返回给了发送异步请求处的url 即empAction.action
所以这就出现了问题 我们明明做的是更新操作 预想结果:要么成功 要么失败 可以现在却又来到了登录处的action 无论登录成功或者失败 都不是我们想要的处理流程
所以 结论:
如果在一个url=.jsp上发送的异步请求 那么将来返回的地址就是这个.jsp页面 如果在url =xxx.action上发送的异步请求 那么将来返回的时候 还会去找这个action地址
问题二:根据上边出现的问题 我现在的思路就是在登录成功之后 在struts2中的配置文件中 改变type类型 使其直接重定向到detail.jsp页面 这样就可以解决上面的问题了
修改如下:
然后登录访问
登录成功
然后根据struts2.xml的配置 进行重定向
但是却出现了如下的结果:
这是因为 我们的detail.jsp页面在WEB-INF下面 重定向 相当于客户端重新发送一次请求 直接访问 所以 访问不到
到这都非常有意思了 一方面是 为了保证页面的安全 不登录不让其访问 一方面又想通过重定向访问 这怎么搞呢
解决办法(其实也可以把该页面给拿到web-inf外部 因为这个页面不是安全性不是非常高)
看到没 我在web.xml中配置了一个映射 注意和servlet程序映射的不同
这样配置之后 就可以通过浏览器直接访问web-inf下的内容了
然后 在struts配置文件中 我们这样写
不过因为使用了重定向 所以需要把查询到的数据放在session域中 但是问题还是存在 因为我们登录成功 重定向之后的url是这样的
比较坑爹 这样提交之后 将来返回的目标还不是真正的xx.jsp页面 所以使用ajax异步请求的正确做法是:在某个确定的页面上 需要获得来自后台的数据时 从页面上发起请求
问题二主要是让我们明白:web-inf下的文件通过重定向的方式是不可以直接访问的 如果需要访问就像上边的那样 在web.xml中配置映射 但是这样和放在webroot下有什么区别呢!
以上是关于jsp问题(菜鸟求救):登录模块的问题,登录时出现505错误的主要内容,如果未能解决你的问题,请参考以下文章
IDEA+MySQL实现登录注册的注册验证时出现 Cannot resolve query parameter '2'
Android:铵手机上的返回键,照理来说是跳转到主页面的,但它有时却跳转到了登录页面,求救,我是菜鸟。