极其简单的一个JSP小功能+空指针异常Bug解析(内容更新)

说在前面

由于是从昨晚才开始更新的博客,要到工作室锁门的时间就匆忙上传了,上传完之后发现还有一些没弄完的,本来想今天更新一下内容,在登录的时候脑抽,新注册了一个CSDN用户,结果原来用QQ绑定的用户取消关联了,于是乎只好复制过来重新发表,那么以后我在CSDN上的用户名就是Renexton了,原来的已经没法登陆上去,只能舍弃了(悲伤的表情.jpg)

  • 简介
    本人目前正在念大二,软件专业,目前在校学习Android,JSP,HTML,不过学校教学环境质量很渣,(我说我们这有电脑FPS最高才到12的机房你敢信?)只能靠自己一点一点摸索,遇到问题身边也没什么能得到回馈帮我解决问题的人(包括老师),于是乎基本上都是在各大网站上游荡寻找自己都不知道在找什么的知识点,通常都是在工作室一坐一天,也是迷,好了,说多了都是泪,接下来直接进入正题。

  • 正文
    在我刚接触HTML的时候,我自己尝试着做了一个百度的仿站,加了一些看上去还不错的一些CSS效果,做完之后成就感十足,但是唯一美中不足的就是那个搜索框没法像百度首页那样直接对内容进行搜索,后来在学校正式学习之后,了解了有关WEB的知识,就做出了这个简单的提交搜索内容到百度的小功能

<html>
      <head>
        <title>My JSP 'SearchInput.jsp' starting pagetitle>
            <script type="text/javascript">
            /*此处js脚本的作用是在进入网页时将焦点聚焦在输入框上*/
                 window.onload = function()
                 {
                  document.getElementById("si").focus();
                 }
            script>
      head>
      <body>
        <center>
        <form action="" method="get">
        
            <input name="search" id="si" placeholder="Search" type="text">
            <input name="sub" id="sbtn" value="submit" type="submit">
        form>
        center>
  • JSP部分:
        <%
        String inputText=request.getParameter("search");
            /*request对象获取表单提交的输入框中的数据,放入字符串中*/

            if(inputText!=null){
            /*判断字符串的对象是否为空,不为空再执行*/

那么这里可能会出现一个疑问,为什么要加这个判断?

因为这个小测试项目是写在一个JSP文件中的,页面在一加载的时候request对象就会直接对输入框的内容进行提取,然而此时输入框对象还什么都没有,他是一个为null的空值,然而将一个null的字符串进行相关的方法调用时,必然会出现500空指针错误

所以在此处加一个条件,对字符串对象是否为空来进行判断,只有通过表单的提交之后,接过来的字符串才是长度为0的字符串”“,而不是null。

如果想要添加让内容长度不为0的判断的话也许要尝试这样写:

    if(string!=null && !string.equals("")){
        some codes...;
    }

但是,到了这里又会出现问题,那便是将两个判断的顺序颠倒过来会怎样?

    if(!string.equals("") && string!=null){
        some codes...;
    }

那么这样写的结果便又会出现500空指针异常,很显然,这和上面所说的问题是一样的,在最先判断的equals方法中,我们又将null的字符串对象传递到java方法中去了,用空的字符串对象去进行字符串对比,这显然是不可以的,于是错误便这样产生了。

但是为什么第一种顺序就行了呢?

让我们来做一个简单的测试

极其简单的一个JSP小功能+空指针异常Bug解析(内容更新)_第1张图片

极其简单的一个JSP小功能+空指针异常Bug解析(内容更新)_第2张图片

在经过一个简单的输入测试之后,我们可以发现,第一种的判断顺序是可以输出字符串的,值为null,我们点击提交之后输出的字符串就变成了长度为0的串”“

极其简单的一个JSP小功能+空指针异常Bug解析(内容更新)_第3张图片

那么我们来详细的探讨一下这其中的缘由吧,首先我们先来看这种写法的

if(string!=null && !string.equals(""))

我们可以知道的是,当页面加载时string为null,request对象获取完字符串对象之后,将会进行第一处的判断,string!=null,那么在这里判断的返回值是false

而整个if语句里的条件是用 && (短路与)连接,也就是说要两个条件同时满足才可以返回true,从左到右判断时,当有一个条件的返回值是false,那么后面的条件判断就不会再执行,if语句直接返回false

那么与之相对应的还有一个是 & 符号,这个与符号是会判断所有的条件,所以如果在此处用的是 & 的话还是会对equals方法进行判断,还是会报错的

当我们点击了表单的提交按钮之后,空的输入框的内容将会变成字符串”“被传递过来,而不再是接收到null的对象了,所以再次判断时,第一个非空条件将会变为true,进行下一个equals方法判断

同理的是:

if(string==null || string.equals("")){
    /*一些提示*/
}

先对一些问题的东西进行处理,后面再安心的写功能,||(短路或)与&&(短路与)相同,也是在从左到右某个条件为true时,后面的条件就不会再判断

然而这或许有些麻烦了,所以我们通常可以在jsp里面只是写后台功能,前端的外观表现都交给html文件,这也是我自己琢磨了好久才想通的(苦笑.jpg)

那么接下来就是将我们得到的搜索内容通过response对象进行重定向,把字符串放入百度的搜索内容链接格式中,当然还可以加很多参数,不过那些我还没弄太懂,就不乱写了

response.sendRedirect("http://www.baidu.com/s?wd="+inputText.trim()+"");
            }
         %>
      body>
    html>
  • 结语
    那么就是这样了,这是我的第一篇博客记录,以后也会常来更新整理日常学习的知识点和一些无聊的吐槽与分享,一个爬行中的Coder,欢迎关注~

你可能感兴趣的:(极其简单的一个JSP小功能+空指针异常Bug解析(内容更新))