从Servlet到jsp的传值问题

来源:互联网 发布:python自然语言处理包 编辑:程序博客网 时间:2024/06/03 23:41

从Servlet到jsp的传值问题

在项目维护中,经常出现各种参数在传递的时候丢失的现象。有个多莫名其妙的版本问题,因此需要用多种方式传递参数。

1. 通过域对象传值,通过EL表达式,ognl表达式等方式拿到

不管是struts还是springMVC还是原生的Servlet都能拿到四大域对象。通常的使用方式是在java代码中放置,再在jsp中拿到。

//用request域来测试private String username = User.getUsername();request.setAttribute("username",username);
//在jsp中就能通过EL表达式拿到<input type="hidden" value="${requestScope.username}"/>

但是在很多维护性的项目中由于版本过低不能使用EL表达式,这时候就需要看项目中所用的框架了。如果是webwork,struts等有框架自带的方式,就通过框架自带的方式传递。

经验告诉我既然是提出来的bug,所以项目本身用的传值方式大多数是行不通。这时候可以用脚本传递值。

2. 通过域对象传值,jsp脚本拿到

//用request域来测试private String username = User.getUsername();request.setAttribute("username",username);
<%    String username = request.getAttribute("username");%>
<script type="text/javascript">     var username = "<%=username %>";</script >

3.通过访问路径在后面拼接传值

//在java代码中通过重定向。重定向的好处是可以清除request域对象中的值。url = "http://" + (request).getServerName() + ":"        + (request).getServerPort()        + (request).getContextPath()        + "/pages/plantform/plantform.jsp?"+username;response.sendRedirect(url);
<script type="text/javascript"> $(function(){if(username == ""){   var url_username = window.location.href.split("?");    if(url_username[0].lastIndexOf(".jsp")){        username = url_username[1];    }}});</script >

通过json对象或者json字符串传值

通过json传值在SpringMVC和struts2中有封装。配置好就能随心所欲的传值,但是在维护中如果不能传值,就用原始的方法。

String resultData = DemoServiceImpl.findResultData();//在Servlet中PrintWriter printWriter = getResponse().getWriter();printWriter.write(resultData);