JSP页面中出现的一个异常:org.apache.jasper.JasperException: java.lang.NullPointerException

先把出现的异常情况贴出来吧:



type Exception report

messagejava.lang.NullPointerException

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: java.lang.NullPointerException
	org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:177)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:91)

root cause

java.lang.NullPointerException
	org.apache.jsp.shiyan4.DataBaseOperation_jsp.<init>(DataBaseOperation_jsp.java:31)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	java.lang.reflect.Constructor.newInstance(Unknown Source)
	java.lang.Class.newInstance(Unknown Source)
	org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:91)

noteThe full stack trace of the root cause is available in the Apache Tomcat/8.0.0-RC1 logs.



 

 

       为什么会出现这种错误呢?一遍又一遍的检查自己的代码,发现需要一个javax.servlet.http.HttpServletRequest request;的声明,request的请求不能获取值。加上之后,得到这上面这样的异常:NullPointerException.

      在几小时的挣扎中,想放弃了。。。但是,发现一个很隐秘的问题,这个潜伏在代码中的隐患,这是不容易查看到的。那就是将request获取值设置成全局变量。先看代码:

<body>
<%!

	String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
	String DBURL = "jdbc:odbc:user" ;
	Connection conn = null ;
	//Statement stmt = null ;
	PreparedStatement stmt;
	String sql = null ;
	//ResultSet rs = null ;
	javax.servlet.http.HttpServletRequest request;
	//request.setCharacterEncoding("gb2312");
    String username=request.getParameter("username");
	//byte b[]=username.getBytes("ISO-8859-1");
	//username=new String(b);
    String password=request.getParameter("password");

	String address=request.getParameter("address");
	String nation=request.getParameter("nation");
	String sex=request.getParameter("sex");
	//byte bb[]=sex.getBytes("ISO-8859-1");
	//sex=new String(bb);
	String photo=request.getParameter("photo");
	String temp=request.getParameter("age");

%>

        随后,修改后尝试,发现问题解决了。

       于是得出结论:在JSP中,获取表单提交的值时,不能将获取语句放在全局变量里面,即不能放在<%!  %>之间。(注意感叹号!),而是放在<%  %>中。

      为了同大家交流,遂贴上所有源码,望各位指点:

        //regedit.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>用户注册</title>
<script language="JavaScript">
    	function change()
		{
			var photo = document.getElementById("photo");
			var photoImg = document.getElementById("photoImg");
			photoImg.src = photo.value;
	    }
</script>
</head>
<link rel="stylesheet" href="style.css" type="text/css" />
<body>
<div class="div1">
     <div class="div2"><h2>输入用户信息</h2></div>
     <form action="DataBaseOperation.jsp" method="post" name="form">
      <table align="center">
           <tr >
           		<td class="div3">用户名</td>
         	  <td><input type="text" name="username" /></td>
           </tr>

           <tr >
           	<td class="div3">密码</td>
            <td><input type="password" name="password" /></td>
           </tr>

           <tr>
           		<td class="div3">年龄</td>
         	  <td><input type="text" name="age" /></td>
           </tr>

           <tr>
           	<td class="div3">出生地</td>
            <td><input type="text" name="address" /></td>
           </tr>
            <tr>
           		<td class="div3">民族</td>
         	  <td><input type="text" name="nation" /></td>
           </tr>

           <tr>
           	<td class="div3">性别</td>
            <td><input  type="radio" name="sex" value="男"  />男
                <input  type="radio" name="sex" value="女"  />女</td>
           </tr>

           <tr>
           	<td class="div3">头像</td>
                <td align="left">
                    <select name="photo" id="photo"  onchange="change();">
		       <option value="images/01.gif" selected="selected">头像一</option>
		       <option value="images/02.gif">头像二</option>
	           </select>
                   <img id="photoImg" src="images/01.gif">
            </td>
           </tr>

           <tr>
                <td></td>
                <td align="left"><input type="submit" name="submit" value="注册" />
                    <input type="reset" name="reset" value="重置" />
                </td>
           </tr>
     </table>
     </form>
</div>
</body>
</html>

      //style.css

@charset "utf-8";
/* CSS Document */

body
{
	border:0px;
	margin-top:0px;
	margin-left:0px;
    background:url(images/bg4.jpg);
}
table
{
	padding-top:5px;
	left:340px;
	padding:20px 0px 3px 20px;
	}
.div1
{
	background:url(images/bg3.jpg);
	width:900px;
    height:760px;
	text-align:center;
	margin-top:0px;
	margin-left:225px;
}
.div2
{
	margin-top:0px;
}
.div1 table tr
{
	/*line-height:30px;*/
	height:30px;}
.div3
{
	text-align:right;
}

 

    //DataBaseOperation.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@page import="java.util.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>注册信息</title>
</head>

<body>
<%!

	String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
	String DBURL = "jdbc:odbc:user1" ;
	Connection conn = null ;
	//Statement stmt = null ;
	PreparedStatement stmt;
	String sql = null ;
	//ResultSet rs = null ;
%>
<%
	//javax.servlet.http.HttpServletRequest request;
	request.setCharacterEncoding("gb2312");
        String username=request.getParameter("username");
	//byte b[]=username.getBytes("ISO-8859-1");
	//username=new String(b);
        String password=request.getParameter("password");

	String address=request.getParameter("address");
	String nation=request.getParameter("nation");
	String sex=request.getParameter("sex");
	//byte bb[]=sex.getBytes("ISO-8859-1");
	//sex=new String(bb);
	//String photo=request.getParameter("photo");
	String temp=request.getParameter("age");
        if(temp==null)
        {
                 temp="";
        }
        Integer age=Integer.parseInt(temp);
	try
	{
		Class.forName(DBDRIVER) ;
	}
	catch(Exception e)
	{
	}

	try
	{
		conn = DriverManager.getConnection(DBURL) ;
	}
	catch(Exception e)
	{
	}
	try
	{
		sql="Insert into user(name,password,age,address,nation,sex) values(?,?,?,?,?,?)";
		stmt=conn.prepareStatement(sql);
		stmt.setString(1,username);
		stmt.setString(2,password);
		stmt.setInt(3,age);
		stmt.setString(4,address);
		stmt.setString(5,nation);
		stmt.setString(6,sex);
		//stmt.setString(7,photo);
		stmt.executeUpdate();
		//stmt = conn.createStatement() ;
	   // sql="Insert into user(name,password,age,address,nation,sex,images) values('"+username+"','"+password+"','"+sex+"')";
		//stmt.executeUpdate(sql);

	}
	catch(Exception e)
	{

	}

	try
	{
		stmt.close() ;
		conn.close() ;
		out.println("注册成功!");
%>
    请记住您的注册信息:<br />
    用户名:<%=username%><br />
    密码:<%=password%>   <br />
<%
	}
	catch(Exception e)
	{
		out.println("数据库关闭失败!!!") ;
	}
%>

</body>
</html>

//数据库

(这个我上传到百度云后,给链接。)

功能不太完善,当时我创建的数据库中头像的类型是文本(Varchar)的,表单获取的头像的值是头像的src,但是不知道为什么,存放不进去。于是,上面SQL语句中没有插入头像。希望大侠指点一下,在mysql数据库中,图像的存放时什么类型,或者怎么处理。

时间: 2024-11-01 01:00:54

JSP页面中出现的一个异常:org.apache.jasper.JasperException: java.lang.NullPointerException的相关文章

如何在一个JSP页面中调用另一个JSP页面中的变量

在jsp学习中,经常需要在一个jsp页面中调用另一个jsp页面中的变量,下面就这几天的学习,总结一下. jsp页面之间的变量调用有多种方法: 1.通过jsp的内置对象-request对象获取参数: (1)通过超链接传参: 例:把a.jsp中i的值传到b.jsp中: 在a.jsp页面中的核心代码为: <a href="b.jsp?i=1">传参</a>     (说明:给i赋值时也可以用jsp表达式,例如i=<%变量名 %>) 在b.jsp页面中的核心

jsp-从数据库中取出数据对应的集合,在JSP页面中遍历出一个表格,数据库中的字段对应的是表格表头名

问题描述 从数据库中取出数据对应的集合,在JSP页面中遍历出一个表格,数据库中的字段对应的是表格表头名 从数据库中取出数据对应的集合,在JSP页面中遍历出一个注册项的列表,每一项都是从数据库中的表中取出的,比如,第一行为用户名,后面是个文本框,第二行是密码,后面还是个文本框,但是有的type是text,有的是password,上传文件对应的是file,如何才能动态解决这个问题,在页面中用foreach,只写一列数据,在页面中得到所有的注册项,这种方法如果不可行,那么请问各位大神,应该如何处理比较

在jsp页面中显示lucene的查询结果,报错:org.apache.jasper.JasperException: Java heap space

问题描述 在jsp页面中显示lucene的查询结果,当返回hits的总数小于100时,可以正常显示,当结果大于100,会报如下错误:(但是在java环境下结果输出是正常的)exceptionorg.apache.jasper.JasperException:Javaheapspaceorg.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:433)org.apache.jasper.

hashmap-Java中遇到的一个异常Exception in thread &amp;amp;quot;main&amp;amp;quot; java.lang.NullPointerException

问题描述 Java中遇到的一个异常Exception in thread "main" java.lang.NullPointerException import java.util.*; public class NewHashTest{ public static void main(String[] args) { HashMap hash = new HashMap(); Emp emp1 = new Emp(""laoda""111&q

在jsp页面中输入一个值,其他的值就出来了怎么做。

问题描述 在jsp页面中输入一个值,其他的值就出来了怎么做. 比如,在页面可以输入身份证号,姓名,住址,出生年月等.只要身份证号, 其他几项都有值,这个怎么实现的. 解决方案 用ajax做.当身份证输入框的焦点移动后执行,通过身份证查询其他信息返回给页面,然后$("name").text(值)添加. 解决方案二: 联动,,一般三级联动比较多,,再多了数据也处理 解决方案三: 在你输入的那个标签加个事件,然后通过js来操作这个标签对象的邻标签,对属性进行操作即可 解决方案四: ajax将

在JSP页面中怎么弹出另外一个JSP页面

问题描述 在JSP页面中怎么弹出另外一个JSP页面:举个例子,一个A页面和一个B页面,现在我就想在查询我们数据库的时候,如果我们的设备有误,就弹出B页面. 解决方案 解决方案二:window.open或者window.showModalDialog解决方案三:response.redirect解决方案四:引用1楼shixitong的回复: window.open或者window.showModalDialog 能具体一点吗?解决方案五:引用2楼yuzhuuse的回复: response.redi

分页-请教一个JSP页面中&amp;amp;lt;script&amp;amp;gt;里嵌套JAVA语句的问题

问题描述 请教一个JSP页面中<script>里嵌套JAVA语句的问题 我想在script里嵌套JAVA语句,接收从另一个页面传来的变量,然后根据他来决定下面的一个span的显示方式 其实就是想通过JS做一个分页的上一页下一页的显示,比如在第一页的时候,上一页的链接隐藏,当只有一页的时候,上一页下一页都隐藏,最后一页的时候下一页隐藏,就是这种效果 大致的代码如下,请问该怎么改怎么,两个从request中取的值都是可以取到的,已经在下面当前页数:X / Y显示了,但是这段代码没有达到预期效果 v

大神帮帮忙-在一个jsp页面中,只要地址栏变化,则在跳转到其他页面之前执行一个js方法

问题描述 在一个jsp页面中,只要地址栏变化,则在跳转到其他页面之前执行一个js方法 在一个jsp页面中,只要地址栏变化,则在跳转到其他页面之前执行一个js方法,有没有什么方法做到的 解决方案 window.onbeforeunload=function(e){ return (e||window.event).returnValue='确认退出系统?!' } window.onunload=function(){ //你的js方法,注意不能有alert这种提示窗口,有些浏览器不支持 } 解决方

servlet怎么重定向到了另一个jsp页面中然后再页面一加载弹一个alert的提示框

问题描述 servlet怎么重定向到了另一个jsp页面中然后再页面一加载弹一个alert的提示框 解决方案 解决方案二:重定向的话用sendRedirect()页面一加载就弹出提示可以在body标签中使用onload.<bodyonload="自定义function">解决方案三:Servlet中用response.sendRedirect("jsp页面").jsp页面的body体重加入onload事件如:<bodyonload="a()