Servlet.service() for servlet [jsp] in context ....错误

 

Servlet.service() for servlet [jsp] in context with path [/mvcTest] threw exception [java.lang.NullPointerException] with root cause
java.lang.NullPointerException这是在用tomcat写一个小应用时遇到的错误,在网上看了很多没看明白,最终试错n次后发现了问题,

其实这个问题(我遇到的那种情况,可能这个报错不止我遇到的这种情况导致)的根本原因是:.jsp页面代码导致的,因为为了实现

前端和后台的交互,在有些jsp代码中需要后台传入相应的数据到该jsp中,所以jsp代码中就有了接收的代码段,而当我们想跳转到该

jsp页面时却没有传入相应的数据就会报上面所示的错误:空指针(因为后端没有参数传入时那么jsp中的参数就是一个空值,而

空值是不能进行很多操作的)。我们有时直接跳到jsp页面成功是因为该jsp页面是不需要传入数据的。

如何处理这个问题:当然是传入相应的数据了,注意用request对象传数据时,requset对象  域空间中的数据只能存活于一个请求中,

那么就可能需要多次setAttribute()和多次getAttribute()

 

当然如果在jsp页面中对 用到传入参数的相关代码块做判断也是可以的,即满足相应的条件时再执行该代码块

即在jsp页面端时判断时要加上判断接收到的数据是否为null,不为空的话再执行含有参数的代码块;

 

你也可以自己测试,如果你想跳到相应的页面,则直接在浏览器中访问看是否可以访问到,访问出错,那肯定就说明该jsp页面是不能直接

访问的,可能需要传入参数,当然前提是你的代码要是正确的;

说到这里你明白的话就不必往下看了,下面是我遇到的场景

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

当然导致这个问题的原因可能不止我下面所说的这一种。下面我先说一下我出错时的应用场景:

我用一个servlet来管理所有的操作(简单的增删改查),其中需要查询 和 注册(增)的内容是通过表单提交的,而删除和修改

(应用中是通过id)是通过与记录绑定来实现是删除那条记录的,下面是具体的一个效果

当然进行编辑操作时需要跳转到另外一个页面(modify.jsp)因为编辑是和对象绑定的在前端是这样来写的:

这句话的作用是:点击编辑时跳到 servlet中去执行modify方法,在servlet配置时我将<url-pattern>这一项配置为 *udo,而在dopost方法中我做了一些出来,

截取方法名,利用反射通过方法名来调用具体的方法(这个地方可以不用纠结,当然后面我会在其他文章中另外说这个问题),modify()方法中,我跳转到了modify.jsp页面,并且携带上了记录的id信息,所以在写modify.jsp代码的时候,肯定就会出现接收id的相关信息,直接看运行吧

首先看我通过正确的方法访问到该页面:主要看浏览器的地址栏,传入了id,当然这里id是先传给servlet,servlet中的方法再转发到相应的modify.jsp页面去的,

转发的话地址栏是不会改变的,所以地址栏没有变为localhost:8080/mvcTest/modify.jsp?id=5;对这个地方不理解得话可以看一下转发与重定向的区别。

再看一下我直接访问modify.jsp页面,看到这里你可能会想我直接在url上传值过去可以访问吗?

答案当然可以:例如可以这样:localhost:8080/mvcTest/modify.jsp?id=10;但是可能会造成其他的问题,我这里是修改,如果我传入

的id数据库中没有怎么办,我还是去测试一下:

直接传id的截图:id=100在我的数据库中是没有的,结果浏览器页面就这样一直空白

 

posted on 2019-04-13 13:23  努力学习的菜鸡  阅读(24453)  评论(1编辑  收藏  举报

导航