当前位置:编程学习 > JAVA >>

来个牛人帮小弟看看

最近学习httpservlet,在用jsp和servlet实现一个简单的登陆页面,填写完登陆信息提交时,抛出如下错误:java.lang.NullPointerException
at com.bjsxt.servlet.LoginServlet.doPost(LoginServlet.java:15)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703)
at java.lang.Thread.run(Thread.java:619)
2013-3-30 22:41:25 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet LoginServlet threw exception
点开相应行调试的时候提示
The source attachment does not contains the source for the file httpservlet.class ,you can change the source attachment by clicking change the source attachment below  
折腾了大半天还没弄好,我怀疑是与httpservlet相关的包没有导入,但servlet.api包已经导入了,不知道是不是导入方式不对还是其他原因,用的是myeclipse,是win7系统,小弟刚刚接触java,有高手吗,跪求帮忙啊 servlet jsp java --------------------编程问答-------------------- 把你的Servlet源程序贴出来,话说,你是尚学堂哪个班的,还是只是下了源码自己调试的? --------------------编程问答--------------------
引用 楼主 ittia123321 的回复:
最近学习httpservlet,在用jsp和servlet实现一个简单的登陆页面,填写完登陆信息提交时,抛出如下错误:java.lang.NullPointerException
at com.bjsxt.servlet.LoginServlet.doPost(LoginServlet.java:15)
at javax.servlet.http.HttpServle……


根据错误信息,你的错误出现在
LoginServlet.java 的第 15 行,原因
某个变量的值是 null.

LoginServlet.java 是你写的吗?你应该有 source 吧?你自己查查看。


--------------------编程问答-------------------- 空指针异常,这种错误应该是比较容易发现的具体是什么原因的 --------------------编程问答-------------------- 空指针异常  应该是获取页面参数没获取到 --------------------编程问答-------------------- NullPointException一般来说是程序不严谨造成的后果,认真检查哪个变量出问题了。 --------------------编程问答--------------------
引用 1 楼 BlueSky_Yu84 的回复:
把你的Servlet源程序贴出来,话说,你是尚学堂哪个班的,还是只是下了源码自己调试的?


这你都看出来啦 呵呵  我下的尚学堂视频看的 
源代码是:
package com.bjsxt.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bjsxt.model.User;

public class LoginServlet extends HttpServlet {


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
       String uname=request.getParameter("uname").trim();
       String pwd=request.getParameter("pwd").trim();

       if("xiaoqiang".equals(uname)&&"123".equals(pwd)){
        User user=new User(uname,pwd);
        request.getSession().setAttribute("user",user);
        request.getRequestDispatcher("loginOk").forward(request, response);
        return; 
       }else{
        request.getSession().setAttribute("loginError","用户名或密码错误");
        request.getRequestDispatcher("loginOk").forward(request, response);
       }
       

}

}
--------------------编程问答--------------------
引用 2 楼 jswatcher 的回复:
引用 楼主 ittia123321 的回复:
最近学习httpservlet,在用jsp和servlet实现一个简单的登陆页面,填写完登陆信息提交时,抛出如下错误:java.lang.NullPointerException
at com.bjsxt.servlet.LoginServlet.doPost(LoginServlet.java:15)
at javax.servlet.http……


是不是servlet.api包没有导入 但我已经导入了啊  --------------------编程问答--------------------
引用 3 楼 Inflexible_lin 的回复:
空指针异常,这种错误应该是比较容易发现的具体是什么原因的


恩 我是初学者 没写过多少代码 --------------------编程问答-------------------- 15行是哪一行?

request.getParameter("uname") = null ?
不要trim() --------------------编程问答--------------------
引用 4 楼 tianma630 的回复:
空指针异常  应该是获取页面参数没获取到


可能是的 ,但不知道为什么没获取到  --------------------编程问答--------------------
引用 5 楼 radui 的回复:
NullPointException一般来说是程序不严谨造成的后果,认真检查哪个变量出问题了。


看了好几遍 还是没发现问题啊 呵呵 我觉得应该是配置方面没弄好 --------------------编程问答--------------------
引用 9 楼 flagiris 的回复:
15行是哪一行?

request.getParameter("uname") = null ?
不要trim()


15行就是request.getParameter("uname")那一行,去掉trim()好像也不行 ,是不是getParameter方法不能用,但已导入servlet.api包了 --------------------编程问答--------------------
引用 12 楼 ittia123321 的回复:
引用 9 楼 flagiris 的回复:15行是哪一行?

request.getParameter("uname") = null ?
不要trim()

15行就是request.getParameter("uname")那一行,去掉trim()好像也不行 ,是不是getParameter方法不能用,但已导入servlet.api包了


那不应该,没导包应该编译期就报错了。

doPost里只有下面两句话会报错么。。。


String uname=request.getParameter("uname");
String pwd=request.getParameter("pwd");
--------------------编程问答--------------------
引用 11 楼 ittia123321 的回复:
引用 5 楼 radui 的回复:NullPointException一般来说是程序不严谨造成的后果,认真检查哪个变量出问题了。

看了好几遍 还是没发现问题啊 呵呵 我觉得应该是配置方面没弄好


jsp页面标签里有家name='uname'吗 --------------------编程问答--------------------
引用 13 楼 flagiris 的回复:
引用 12 楼 ittia123321 的回复:
引用 9 楼 flagiris 的回复:15行是哪一行?

request.getParameter("uname") = null ?
不要trim()

15行就是request.getParameter("uname")那一行,去掉trim()好像也不行 ,是不是getParameter方法不能用,但已导入servlet.api包……


恩 对哈 调试的时候报下面的错误 信息: Deploying web application directory test
2013-4-1 15:45:45 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:\TDDOWNLOAD\apache-tomcat-6.0.36\webapps\test\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
2013-4-1 15:45:46 org.apache.coyote.http11.Http11AprProtocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2013-4-1 15:45:46 org.apache.coyote.ajp.AjpAprProtocol start
信息: Starting Coyote AJP/1.3 on ajp-8009
2013-4-1 15:45:46 org.apache.catalina.startup.Catalina start
信息: Server startup in 1613 ms
2013-4-1 15:45:53 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet LoginServlet threw exception
java.lang.NullPointerException
at com.bjsxt.servlet.LoginServlet.doPost(LoginServlet.java:15)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703)
at java.lang.Thread.run(Thread.java:619)

点开at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)这一行的错误就到错误页面
The source attachment does not contains the source for the file httpservlet.class ,you can change the source attachment by clicking change the source attachment below  --------------------编程问答--------------------
引用 14 楼 tianma630 的回复:
引用 11 楼 ittia123321 的回复:
引用 5 楼 radui 的回复:NullPointException一般来说是程序不严谨造成的后果,认真检查哪个变量出问题了。

看了好几遍 还是没发现问题啊 呵呵 我觉得应该是配置方面没弄好

jsp页面标签里有家name='uname'吗


加了的 login页面的代码是:
<%@ page contentType="text/html" import="java.util.*" pageEncoding="GBK"%>
<html>
   <head>
   </head>
   <body>
     <form name=regform action="login" method=post>
                            用户名<input type="text" name=uname/><br/>
                            密码     <input type="password" name=pwd/><br/>
            <input type="submit"  value="登陆"/>     
     </form>   

   </body>
</html> --------------------编程问答-------------------- <input type="text" name="uname"/>
<input type="password" name="pwd"/>
加上引号严谨一些

话说还真没看出问题
--------------------编程问答--------------------
引用 15 楼 ittia123321 的回复:
引用 13 楼 flagiris 的回复:引用 12 楼 ittia123321 的回复:
引用 9 楼 flagiris 的回复:15行是哪一行?

request.getParameter("uname") = null ?
不要trim()

15行就是request.getParameter("uname")那一行,去掉trim()好像也不行 ,是不是……


好像还真和servlet-api.jar包有关系,你确定把jar包放到classpath下了,
不会是版本的问题吧。。。 --------------------编程问答--------------------
引用 18 楼 flagiris 的回复:
引用 15 楼 ittia123321 的回复:
引用 13 楼 flagiris 的回复:引用 12 楼 ittia123321 的回复:
引用 9 楼 flagiris 的回复:15行是哪一行?

request.getParameter("uname") = null ?
不要trim()

15行就是request.getParameter("uname")那一行,去掉tri……


应该是放了,我在D:\Programfiles\Java\jdk1.7.0_17放了一个,在D:\workplace1\test\WebRoot\WEB-INF\lib\servlet-api.jar也有 ,还是不行,jdk也配置了 --------------------编程问答--------------------
引用 17 楼 she383 的回复:
<input type="text" name="uname"/>
<input type="password" name="pwd"/>
加上引号严谨一些

话说还真没看出问题


恩 可能配置造成的 win7系统有很多问题 --------------------编程问答-------------------- String uname=request.getParameter("uname").trim();
这是第15行吧?
报的空指针异常,所以request.getParameter("uname")这个东西是null,然后你调用null的trim()方法,所以才抛出空指针。
很可能是你页面没有把参数传递过来。 --------------------编程问答--------------------
引用 20 楼 ittia123321 的回复:
引用 17 楼 she383 的回复:<input type="text" name="uname"/>
<input type="password" name="pwd"/>
加上引号严谨一些

话说还真没看出问题

恩 可能配置造成的 win7系统有很多问题


跟WIN7系统无关,本人就是WIN7正版家庭版,开发完全没有任何问题
除了装一些小插件出过一些问题(初学者暂时还用不到) --------------------编程问答--------------------
引用 15 楼 ittia123321 的回复:
……
信息: validateJarFile(D:\TDDOWNLOAD\apache-tomcat-6.0.36\webapps\test\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
……


你在 D:\TDDOWNLOAD\apache-tomcat-6.0.36\webapps\test\WEB-INF\lib\
的 servlet-api.jar 应是多余的。把它去掉。避免引起冲突。
在 D:\TDDOWNLOAD\apache-tomcat-6.0.36\common\lib
下 应该已经有了。
--------------------编程问答-------------------- getParameter 是有可能 null 的,这样改一下试试看吧:

public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    
    String uname=request.getParameter("uname");
    if ( uname != null ) {
        uname = uname.trim();
    }
    
    String pwd=request.getParameter("pwd")
    if ( pwd != null ) {
        pwd = pwd.trim();
    }

    if("xiaoqiang".equals(uname)&&"123".equals(pwd)){
        User user=new User(uname,pwd);
        request.getSession().setAttribute("user",user);
        request.getRequestDispatcher("loginOk").forward(request, response);
     return; 
    }else{
     request.getSession().setAttribute("loginError","用户名或密码错误");
        request.getRequestDispatcher("loginOk").forward(request, response);
    }
}
--------------------编程问答-------------------- 把页面上的所有属性后面的值加上双引号 --------------------编程问答--------------------
引用 24 楼 jswatcher 的回复:
getParameter 是有可能 null 的,这样改一下试试看吧:


Java code
?



123456789101112131415161718192021222324

public void doPost(HttpServletRequest request, HttpServletResponse response)     throws ServletE……


唉 还是不可以 可能配置配置路径上有些问题还没搞清楚 先放放吧  --------------------编程问答-------------------- 新手求指教.........
补充:Java ,  Eclipse
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,