struts2前台与后台参数的交互,jsp到java,java到jsp,java到javascript

29 篇文章 0 订阅
25 篇文章 0 订阅

+2016-05-13+

从request中取值和从session中取值的方式是不同的,这一点非常重要,当session不失效

(当浏览器没有关闭,这个页面连续在结果服务器之间跳转并不会造成session的id的变化,

ActionContext ctx = ActionContext.getContext();       
   HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
   HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
   System.out.println(request.getSession().getId());

),

但是,如果值是存在session中,但是从request中取是不能成功的

总结来说,在放参数的时候,request.setAttribute("code", "456");是request级别的,ctx.getSession().put("code", "789");是session级别的,


在取参数的时候,几个页面跳转过后,request.getAttribute("code");的值会失效,request.getParameter("forever");也会失效,但是ctx.getSession().get("code");不会失效

但是系统会先从request(page)中取值,然后是session中取值,取值方式一定要正确。


request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。
一般是string型用request.getParameter
对象的引用用request.getAttribute
当然啦,String也是对象。


+2016-05-13+


1、jsp页面数据提交给后台,后台获取并打印

前台,可以使用form表单提交,为了便于说明问题,以get方式提交数据。

 比如访问的路径为:http://127.0.0.1:8080/test/test/test.do?forever=1


后台获取的方式可以分为两类,这里举例的变量为forever

(1)后台提供全局变量申明:String forever;并且提供该变量的getter和setter方法

 

String forever;

public String getForever() {
return forever;
}


public void setForever(String forever) {
this.forever = forever;
}


这种情况下,可以直接获取参数forever并且在后面的控制台打印。

比如上面的链接访问的链接会访问下面的方法,那么这个forever参数是可以直接获取的

public String test1(){

 System.out.println("获取到这个参数了="+forever);

}

而且,实验证明使用下面的语句也可以获取到forever的值

ActionContext ctx = ActionContext.getContext();       
HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);       
HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);     //这一句是多余的,在需要response的时候才是有必要的

request.getParameter("forever");
request.getAttribute("forever");

这样,在存在getter和setter方法的情况下,可以使用三种方式获取前台传递给后天的参数的值,(!!需要注意的是,前台提交的参数参数名字的大小写必须和后台的是一直的)

public String test1(){

ActionContext ctx = ActionContext.getContext();       
HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);       
  HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);     
System.out.println(forever);
System.out.println(request.getParameter("forever"));
System.out.println(request.getAttribute("forever"));

}

(2)后台声明变量forever或者不声明,在声明这个变量之后不提供setter和getter方法

在访问路径依旧为http://127.0.0.1:8080/test/test/test.do?forever=1的情况下,只有下面的语句获取参数值成功

public String test1(){

ActionContext ctx = ActionContext.getContext();       
HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);       
    HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);     


System.out.println(request.getParameter("forever"));

}


2、前台传递参数给JSP页面

(1)存在getter和setter方法

比如java中,

String code;

public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}

然后还是那个地址,但是这个地址现在不是获取参数,而是赋值给code

public String test1(){
code="123";
return "tologinform";
}

跳转到前台的jsp页面

在<body>这个标签内部直接

${code}


实验证明,使用下面的方式也可以达到赋值的作用,前台也是可以获取参数的

request.setAttribute("code", "456");

ctx.getSession().put("code", "789");


总结来说,setter方法、request.setAttribute("code", "456");是request级别的,ctx.getSession().put("code", "789");是session级别的,前者会被优先选择

(2)不存在getter和setter方法

request.setAttribute("code", "456");

ctx.getSession().put("code", "789");

总结来说,request.setAttribute("code", "456");是request级别的,ctx.getSession().put("code", "789");是session级别的,前者会被优先选择


而且,如果要用一个对象表示ctx.getSession(),应该如下

ActionContext context=ActionContext.getContext();  
        Map<String, Object> session=context.getSession();  
        session.put("username", "Liming");


3、后台到js

放置参数的方式和上面列举的方法是一致的-双引号或单引号

<script type="text/javascript">
alert("${code}");
</script>


<script>
if("${code}"!=""){
alert("${code}");
}
</script>


+2016年04月26日+

//js可以直接识别字符串中的${代码},而且可以是一个长串的识别

   $("#orderform"+index).attr("action","orderGoToPay.do?sumPrmiums="+$("#sumPrmium2").val()+"&orderNo="+$("#orderNo2").val());
   $("#orderform"+index).attr("action","orderGoToPay.do?sumPrmiums=${dateMap.sumpremium}&orderNo=${dateMap.orderno}");

+2016年05月25日+

js中获取json格式的串,需要使用单引号<script>'${name}'</script>

html页面隐藏域获取json格式的字符串,需要使用单引号 <input type="hidden" id="name1" value='${name1}'/>

从后台向前台传递参数,具有set和get方法,连续跳转多个本服务器的chain再到某个页面,那个页面依旧可以获取这个参数值${name1}



+2016年06月01日 儿童节快乐+

后台USER 具有username

把USER实体类对象放置到session中

前提是username具备getter和setter方法

ActionContext ctx=ActionContext.getContext();  
		HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);

		HttpSession session = request.getSession();
		System.out.println(session.getId());
		User u=new User();
		u.setUsername("李明");
		session.setAttribute("u", u);

下面再jsp页面

<%@ taglib uri="/struts-tags" prefix="s" %>

session.u.username:${session.u.username} 
  <br>
  u.username:${u.username} 
  <br>
  username:${username}


当USER也有getter和setter方法,则三个都可以直接获取到username

当USER没有getter和setter方法,则${u.username} 可以获取值,${session.u.username} 首次没有值,刷新页面则开始有值,${username}永远没有值



+2016年06月01日+

对于没有getter和setter的一般字符串防止到session中也体现这个规律

session.setAttribute("a", "小红");


jsp页面

session.a:${session.a} 
  <br>
  a:${a} 

${a} 永远有值,但是${session.a} 首次无值,只有刷新页面才有值


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值