老师,我的session第一次传递正确,第二次返回时输出为null?怎么解决?代码如下

老师,我的session第一次传递正确,第二次返回时输出为null?怎么解决?代码如下

还是这个错误,但是我的思路时用session存储值,然后返回上一个页面:

org.apache.jasper.JasperException: An exception occurred processing [show_main.jsp] at line [22]

19: String pwd = (String)session.getAttribute("password");
20: System.out.println("pwd "+pwd);
21: Emp emp = new Emp(name,pwd);
22: boolean flag = DBUtil.selectEmpByAccountAndPassword(emp);
23: Map<String,ShowMessage> map1 = DBUtil.map1;
24:
25: if (flag == true) {


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:593)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:482)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause

java.lang.NullPointerException
com.imooc.db.DBUtil.selectEmpByAccountAndPassword(DBUtil.java:38)
org.apache.jsp.show_005fmain_jsp._jspService(show_005fmain_jsp.java:136)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Note The full stack trace of the root cause is available in the server logs.

(1)这是公告信息主页面的代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="com.imooc.db.*, com.imooc.bean.*, java.util.*"%>
<title>公告列表</title>
</head>
<body>

	<%
		String nickname = request.getParameter("nickname");
		System.out.println("nickname "+nickname);
		String password = request.getParameter("password");
		System.out.println("password "+password);
		session.setAttribute("nickname", nickname);
		session.setAttribute("password", password);
		String name = (String)session.getAttribute("nickname");
		System.out.println("name "+name);
		String pwd = (String)session.getAttribute("password");
		System.out.println("pwd "+pwd);
		Emp emp = new Emp(name,pwd);
		boolean flag = DBUtil.selectEmpByAccountAndPassword(emp);
		Map<String,ShowMessage> map1 = DBUtil.map1;
		
		if (flag == true) {
			
			
	%>
	<h3>公告列表为: </h3>
	<hr>
	<form action="select.jsp">
		<table align="center" border="1" width="500px">
			<tr>
				<td>
					公告编号:
				</td>
				<td>
					<input type="text" name="num" value="" placeholder="请输入编号"/>
				</td>
				<td>
					<input type="submit" value="select"/>
				</td>
			</tr>
		</table>
	</form>
	<div height="50px"></div>
	<form action="">
		<table align="center" border="1" width="500px">
			<tr>
				<td>
					编号
				</td>
				<td>
					名称
				</td>
				<td>
					内容
				</td>
				<td>
					删除
				</td>
				<td>
					修改
				</td>
			</tr>
			<%
				for (String key : map1.keySet()) {
					ShowMessage e = map1.get(key);
			%>
			<tr>
				<td>
					<%= e.getNum() %>
				</td>
				<td>
					<%= e.getName() %>
				</td>
				<td>
					<%= e.getContent() %>
				</td>
				<td>
					<a href="delete.jsp?num=<%= e.getNum() %>
							&name=<%= e.getName() %>&content=<%= e.getContent() %>">删除</a>
				</td>
				<td>
					<a href="update.jsp?num=<%= e.getNum() %>
							&name=<%= e.getName() %>&content=<%= e.getContent() %>">修改</a>
				</td>
			</tr>
			<%
				}
			%>
		</table>
	</form>
	<%
		} else {
			
		}
		
	%>
</body>
</html>

(2)这是点击select后的界面代码(有back按钮的界面)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="com.imooc.db.*, com.imooc.bean.*, java.util.*"%>

<title>公告列表</title>
</head>
<body>
	<h3>公告列表为: </h3>
	<p>用户名:<%=request.getSession().getAttribute("nickname") %>, 密码:<%=request.getSession().getAttribute("password") %></p>
	<%
		request.setAttribute("nickname", session.getAttribute("nickname"));
		request.setAttribute("password", session.getAttribute("password"));
		out.println(session.getId());
	%>
	<hr>
	<form action="show_main.jsp">
		<table align="center" border="1" width="500px">
			<tr>
				<td>
					公告编号:
				</td>
				<td>
					<input type="text" name="num" value="<%= request.getParameter("num") %>"/>
				</td>
				<td>
					<a href="show_main.jsp">back</a>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ">Back</a>
				</td>
			</tr>
		</table>
	</form>
	<form action="">
		<table align="center" border="1" width="500px">
			<tr>
				<td>
					编号
				</td>
				<td>
					名称
				</td>
				<td>
					内容
				</td>
				<td>
					删除
				</td>
				<td>
					修改
				</td>
			</tr>
			<%
				Map<String,ShowMessage> map1 = DBUtil.map1;
				ShowMessage e1 = map1.get(request.getParameter("num"));
				for (String key : map1.keySet()) {
					ShowMessage e2 = map1.get(key);
						if (e1.getNum().equals(e2.getNum()))
						{
			%>
			<tr>
				<td>
					<%= e1.getNum() %>
				</td>
				<td>
					<%= e1.getName() %>
				</td>
				<td>
					<%= e1.getContent() %>
				</td>
				<td>
					<a href="delete.jsp?num=<%= e1.getNum() %>
							&name=<%= e1.getName() %>&content=<%= e1.getContent() %>">Delete</a>
				</td>
				<td>
					<a href="">Update</a>
				</td>
			</tr>
			<%
						}
					}
			%>
		</table>
	</form>
</body>
</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕珊 2018-03-15 09:31:48

出错原因是因为空指针异常,这个和是否安全是没有关系的。可以再看一下下面的错误提示,DBUtil.java的38行出现错误。可以看看第38行到底是什么内容,然后分析一下出错的原因。

空指针的原因,一般就是用一个为null的对象去调用方法了。

同学也可以把所有的代码都贴全,我们运行一下,定位一下问题的位置。

祝学习愉快!

http://img1.sycdn.imooc.com//climg/5aa9cc6c0001935007200231.jpg

一叶知秋519 2018-03-14 10:17:09

你的错误日志显示:

http://img1.sycdn.imooc.com//climg/5aa8843f000186ab06830184.jpg

DBUtil类的38行发生的空指针异常;

建议同学在show_main.jsp中,传递emp参数时,先判断是否为空,如果不为空再执行这段代码 boolean flag = DBUtil.selectEmpByAccountAndPassword(emp);

祝学习愉快!


  • 提问者 心纯净 #1
    老师,您好,我是想问为什么session会出现null的情况,不是可以在这些网页中有效吗?我在之前就用session.setAttribute过了。
    2018-03-14 16:40:14
  • 一叶知秋519 回复 提问者 心纯净 #2
    嗯,,1、你的jsp页面中有没有用到frameset框架,frameset会造成Session的丢失;2、你用的哪个浏览器呢? 建议同学将session.setAttribute相关代码贴一下,我们运行看一下,方便帮助你解答。祝学习愉快!
    2018-03-14 17:40:19
  • 提问者 心纯净 回复 一叶知秋519 #3
    老师,您好,我的问题是这样的, 1、按照视频中的做法,是这样的<a href="show_main.jsp ?nickname=<%= request.getSession().getAttribute("nickname") %> &password=<%= request.getSession().getAttribute("password") %>">back</a> 2、但是,这样做不安全,于是我将?后面的内容放在session中,于是就出错了,但是上面的代码运行正确可是不安全,为什么出于安全考虑的做法会报错?
    2018-03-14 20:03:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师