从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);