一、一些概念:
?
1)jsp脚本:有的地方也叫java脚本,指用<%%>括起来的jsp页面中的java脚本。所有能在java程序中执行的代码,都可以通过jsp脚本执行。
(2)jsp声明:用<%!声明部分%>形式声明的变量和方法。可以直接用在jsp脚本中。
(3)jsp输出表达式:用<%=表达式%>输出表达式的值,效果与jsp脚本中的out.println相同。表达式后面不能有分号。
(4)javascript:页面中<script></script>之间的代码,简称js。js插入的位置不同,执行效果也不同。放在<head>中的js调用时才执行,而放在<body>部分的在网页读到这部分时就会执行。也可以像添加外部CSS一样添加外部javaScript脚本文件,其后缀通常为.js。例如:
<head>
???????? <script src="example.js"></script>
</head>
?
二、jsp脚本、jsp声明、jsp输出表达式之间
?
jsp声明中声明的变量和方法对应于Servlet中的成员变量和方法(可以从tomcat的work\Catalina\localhost目录下找到转换成的类)。可以在jsp脚本和jsp输出表达式中直接使用。
jsp脚本中定义的变量也可以在jsp输出表达式中使用。例如:
<!-- 下面是JSP声明部分 -->
<%!
public int count;
public String info()
{?return "hello";}
%>
<%
Integer i=10;
out.println(count++);
%>
<%
out.println(info());
%>
<%=count++%>
<%=info()%>
<%=i%>
<%=request.getAttribute("attrName") %> 也可以用 ${param.attrName}
<%=session.getAttribute("attrName") %> 也可以用 ${attrName}
?
?
?
三、jsp脚本同struts2 action之间
?
jsp脚本要访问struts2 action传过来的变量,要用到ValueStack。例如:
?<%
? ??ValueStack vs = (ValueStack) request.getAttribute("struts.valueStack");
????User user=(User)vs.findValue("user");??
??? String name=vs.findValue("name");??
?%>
其中,user和name是action中定义的成员变量,并有对应的getter和setter方法。
(貌似也可以直接用request访问action中定义的成员变量,如:<% String name=request.getAttribute("name")%>)
?
?
四、?jsp标签、struts2标签获取struts2 action的值
?
struts2 action要访问jsp标签、struts2标签的值,需要有和标签同名的变量,并有对应的getter和setter方法,这是struts2的传值机制。当然,struts2 action传值给result中转向的jsp页面中的jsp标签、struts2标签时,也使用同名机制。注意,值的传递是单次的,也就是说,如果jsp1->action1->jsp2,jsp1只能传值给action1。
?jsp标签、struts2标签通过页面中的form或s:form将值传递给action,action通过setter方法或直接给与标签同名的action成员变量赋值的方法将值传递给jsp页面。
1)对jsp标签来讲,需要使用<s:property>访问action传来的值。例如:
<input name="name" type="text" class="form_field_default" size="50" id="name" value="<s:property value="user.name"/>" >
也可以这样:
<input name="name" type="text" class="form_field_default" size="50" id="name" value="${name} "/>" >
前者传过来的user是对象,有name属性;后者传过来的name是简单类型数据,如string。
2)对struts2标签来讲,需要%{变量}的方式访问传来的值。例如:
<s:textfield name="name" id="name"? size="40"??value="%{user.name}">?</s:textfield>??
<s:textfield name="name" id="name" size="40"??value="%{name}">?</s:textfield>??
?6. jsp输出表达式、struts2 action之间
jsp输出表达式也可以直接输出struts2 action传来的值。例如:
<%=pageNum * pageSize%>
其中,pageNum和pageSize是struts2 action传来的值。
?
五 request、response 、session的一些常用方法
request:? 9、使用者主机IP:<%=request.getRemoteAddr()%> response: 2、response响应生成图片 ?? 通过getCookies()方法来访问Cookie session:
1、请求的服务器:<%=request.getServerName()%>
2、请求协议:??? <%=request.getProtocol()%>
3、请求方法:??? <%=request.getMethod()%>
4、请求端口号: <%=request.getServerPort()%>
5、Context路径: <%=request.getContextPath()%>
6、Servlet路径: <%=request.getServletPath()%>
7、URI路径:???? <%=request.getRequestURI()%>
8、查询字串:??? <%=request.getQueryString()%>
10、使用者使用端口号:<%=request.getRemotePort()%>
1、刷新,进入页面: response.setHeader("Refresh","3;"+member)
3、重定向
重定向是response的另一个用处,与forward不同的是,重定向会丢失所有的请求参数及请求属性。
response.sendRedirect("")
4、增加Cookie
Cookie通常用于网站记录客户的某些信息,比如客户的用户以及客户的喜好等。一旦用户下次登陆,网站可以获取到客户的相关信息,根据这些客户信息,网 站可以对客户提供更友好的服务。Cookie与session的不同之处在于:session关闭浏览器后就失效,但Cookie会一直存放在客户端机器 上,除非超出Cookie的生命期限。
增加Cookie也是使用response内置对象完成的,response对象提供了一个方法。
void addCookie(Cookie cookie):增加Cookie.
创建Cookie:(1)创建Cookie实例;
(2)设置Cookie的生命期限;
(3)向客户端写Cookie
//获取请求参数?
String name = request.getParameter("name");
//以获取到的请求参数为值,创建一个Cookie对象
Cookie c = new Cookie("username",name);
//设置Cookie对象的生命周期24小时
c.setMaxAge(24*3600);
response.addCookie(c);
//获取本站在客户端上保留的所有Cookie
Cookie[] cookies = request.getCookies();
//遍历客户端上的每个Cookie
for(Cookie c:cookies){
//如果Cookie的名为username,表明该Cookie是我们需要访问的Cookie
if(c.getName().equals("username"))
System.out.println(c.getValue());
}
1、session.invalidate(): 可以让session事务失效
2、session.getId():获取session id
3、如果Cookie功能关闭,则session id无法存储,也就无法在下一次请求时一并送至伺服器,为了让进程追踪得以进行,您必须使用 rewriting来传送session id,使用response的encode()可以自动将session id编进中。
4、session.getMaxInactiveInterval():取得session的等待期限,取得的值以秒为单位
5、session.setMaxInactiveInterval():设定等待期限,设定的值也是以秒为单位
6、session的等待期限也可以在web.xml中设定
?
参考:http://blog.csdn.net/moonsheep_liu/article/details/6768699