我遇到的一些问题(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