这两天在学习JSP+servlet时遇到这个问题,servlet页面设置的值传到JSP页面为空。
若单独** 运行servlet 页面可以正常显示(应该可以认为 web.xml 数据库 执行类 都没有问题),但运行jsp 页面则无法显示从servlet 传过来的值**。
其中用EL标签什么都显示不出来 ,而用<%  %>来显示 为Null。
servlet 中 设置如下 //page 与 postList 为页面对象 和 文章列表
request.setAttribute("page", page);
request.setAttribute("postList", postList);
//测试用例
String tom="hahahah";
request.setAttribute("yn", tom);
getServletConfig().getServletContext().getRequestDispatcher("/index.jsp").include(request, response);
``````
JSP中这样设置的
                            <p>
                           ${page.getCurrentPage() }
                            ${requestScope.yn }
                            ${yn } 
                            
                             </p>```
 
```在网上寻找问题时,**觉得原因是在加载JSP页面的时候,没有加载servlet类**。因为我没有采用 提交表单 或者 超链接等形式来加载对应的servlet类。我的想法是在加载这个jsp 页面的时候就显示从servlet传来的值。 于是我查找了一下方法,有这么几种 
1、include (排除,include 标签只能包含jsp页面 不能包含servlet页面)
2、采用AJAX 异步,我试了代码如下<script type="text/javascript">    
            function a(){  
                $.ajax({    
                    url:"GetPostServlet",//servlet文件的名称  
                    type:"GET",  
                    success:function(e){  
                        alert("servlet调用成功!");  
                    }  
                });  
                  
            }  
        </script>     
    </head>
    <body onload="a()">

加载JSP页面的时候成功提示“servlet调用成功!” 但页面依然没有数据显示3、直接修改web.xml 把welcome 路径改为 servlet 映射  也没有效果4、采用<%response.sendRedirect("GetPostServlet"); %> 这种方法可行,但是页面的地址会被改变 从index.jsp  变成servlet类的名称
5、目前采用 forward 可以成功。通过if 来判断传值是否为空, 然后 forward 到servlet类。比较好奇为什么之前的 js 代码会没有效果。因为是初学,还不太了解,想请教一下。还有就是还有没有什么别的方法可以在加载JSP时 加载servlet类(一个或者多个)传值到JSP页面。

解决方案 »

  1.   

    没用ajax肯定要先请求servlet,把对象放在request域再转发到jsp,使用ajax可以直接返回json数据,使用js显示在jsp上面
      

  2.   

     是不是说 ajax 的作用 是用来返回 servlet 中设置的数据的   而不能在加载jsp 时加载servlet 然后通过servlet 中的 forward 转发到jsp 页面
      

  3.   

    什么意思啊?描述一点都不清楚。你要实现的功能是什么呢?
    是使用ajax请求servlet中的数据吗?还是在jsp中加载servlet的数据呢?
      

  4.   


    不好意思可能没描述清楚。
    1、实现的功能:加载jsp页面时显示一个列表,列表中的数据已经储存在数据库中。通过DAO 取出数据,用servlet 将数据传给JSP页面
    2、出现问题: 在我加载jsp时页面没有数据显示,但直接加载servlet 则有数据显示。(表明直接加载jsp页面时,对应的servlet没有加载,数据未能传给JSP页面)
    3、尝试解决:用AJAX 异步加载 servlet页面 。
    4、目的:在加载JSP页面的同时,能够加载servlet ,从而把数据传到JSP页面中。
      结果,直接加载JSP页面时,AJAX运行但,servlet 中的数据未能传到JSP
    另外,通过回复我发现我可能理解错了AJAX的用处,AJAX可以请求servlet中的数据,但似乎不能再加载JSP页面时,同时加载servlet,来达到把servlet 中的数据,传到JSP页面中。最后,想请教一下,还有哪些方法可以在加载JSP页面时 同时加载servlet  来达到打开jsp页面就可以看到储存在数据库中的数据的目的。
      

  5.   

    你可以先访问servlet,servlet把数据取出来之后存到request域中,然后再转发到jsp就可以实现了