+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页面
在
这个标签内部直接${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 session=context.getSession();
session.put("username", "Liming");
3、后台到js
放置参数的方式和上面列举的方法是一致的-双引号或单引号
alert("${code}");
if("${code}"!=""){
alert("${code}");
}
+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格式的串,需要使用单引号
html页面隐藏域获取json格式的字符串,需要使用单引号
从后台向前台传递参数,具有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页面
session.u.username:${session.u.username}
u.username:${u.username}
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}
a:${a}
${a} 永远有值,但是${session.a} 首次无值,只有刷新页面才有值