我遇到的一些问题(空指针异常、jsp页面传值)

我遇到的一些问题(2019.3.10)

声明:本人还是一个大三小白,有错误请谅解。
1.如何避免NullPointerException
空指针异常是导致Java应用程序失败的最常见原因。最近老是跳出NullPointerException,针对性的查阅了相关资料,发现一大部分是自己的习惯问题。

  • 1.字符串与文字的比较

    以前老是把字符串写到括号内,经常出现空指针异常。
    例如,最近在写jsp代码时通过equals()和三目运算符判断男女时:

stat.setString(2,t3.equals("1")?"男":"女");
     / *会抛出异常。* /
}

上面的代码片段会抛出一个NullPointerException。
但是,如果我们从文字中调用方法,那么执行流程通常会继续:

stat.setString(2,"1".equals(t3)?"男":"女");
     / *正确的用例。不会抛出异常。* /
}
  • 2.转换成String字符串的时候使用String.valueOf()不使用toString();

    因为如果参数为空String.valueOf()方法会返回"null"字符串,toString()方法则会抛出空指针异常。

  • 3.检查方法中的参数是否为空

参考:https://blog.csdn.net/kuyuyingzi/article/details/16973429

2.两个jsp页面间如何传值

  • URL传值

1.跳转不显示XXX.jsp?XXX=XXX
login.jsp:

<%
	 pageContext.forward("home.jsp?sno="+t1);
 %>

home.jsp

<% 
	String sno = pageContext.getRequest().getParameter("sno") ;
%>

2.显示XXX.jsp?XXX=XXX
home.jsp:

<%
	<button onclick="location.href='self.jsp?sno=<%=sno%>'" type="button">修改个人信息</button>
%>

self.jsp:

<%
	String sno = pageContext.getRequest().getParameter("sno") 
%>

在这里插入图片描述

优点:
简单性和平台支持的多样性(没有浏览器不支持URL)。
缺点:
1)传输的数据只能是字符串,对数据类型具有一定的限制;
2)传输数据的值会在浏览器地址栏里面被看到,从保密的角度讲,这是不安全的。特别是秘密性要求比较严格的数据,比如说密码。

  • 表单传值

方法一中通过URL传的值会被看到,为了避免这个问题,我们可以使用表单将页面1中的变量传给页面2。
该方法的问题:
1)和URL方法类似,该方法传输的数据,也只能是字符串,对数据类型具有一定的限制;
2)传输数据的值虽然可以保证在浏览器地址栏里不被看到,但是在客户端源代码里面也会被看到,从保密的角度讲,这是不安全的。对于是秘密性要求比较严格的数据,比如说密码来说还是不建议用表单来进行传输

  • Cookie方法
    为了解决以上问题,在页面之间进行数据传递的过程中,Cookie是一种常见的方法。
    Cookie是一个小的文本数据,由服务器端生成,发送给客户端浏览器,客户端浏览器如果设置为启用 cookie,则会将这个小文本数据保存到其目录下的文本文件内。
    客户端下次登录同一网站,浏览器则会自动将 Cookie 读入之后,传给服务器端。服务器端可以对该 Cookie 进行读取并验证(当然也可以不读取)。
    一般情况下,Cookie 中的值是以key-value的形式进行表达的。基于这个原理,上面的例子可以用 Cookie来进行。即:在第一个页面中,将要共享的变量值保存在客户端 Cookie 文件内,在客户端访问第二个页面时,由于浏览器自动将 Cookie读入之后,传给服务器端,因此只需要第二个页面中,由服务器端页面读取这个 Cookie 值即可。
	Cookie xh1=new Cookie("get_xh",xh); 
	xh1.setMaxAge(600);
	response.addCookie(xh1);

另一个界面:

	String t1=null;  
	 Cookie[] cookies=request.getCookies();  
	 for(int i=0;i<cookies.length;i++) {  
	     if(cookies[i].getName().equals("get_t1")) {  
	         t1=cookies[i].getValue();  
	         break;  
	     }

参考:https://blog.csdn.net/mrleeapple/article/details/78552777

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值