OGNL学习:
JSP跟servlet的区别,JSP是不是客户端?
浏览器能看到的只有HTML。
拦截器的执行顺序为 :
在Action的控制方法执行之前,位于拦截器链前面的拦截器将先起作用
,在action的控制方法执行之后,位于拦截器链前面的拦截器将后起作用。自定义拦截器的实现,应该实现com.opensymphony.xwork2.interceptor.Interceptor接口,该接口有三个方法
1.void destory();//销毁该拦截器之前的回调方法
2.void init(); //初始化该拦截器的回调方法
3.String intercept(ActionInvocation invocation);//拦截器实现拦截的逻辑方法,如果该方法直接返回一个字符串,系统将会跳转到该逻辑视图对应的实际视图资源,不会调用被拦截的action。
以下是源代码演示:
1.index:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="<%=path%>/js/My97DatePicker/skin/WdatePicker.css">
<script language="javascript" type="text/javascript" src="<%=path%>/js/My97DatePicker/WdatePicker.js"></script>
</head>
<body>
<s:form action="myAction!init">
<table><caption>OGNL练习</caption>
<s:textfield name="age" label="年龄"></s:textfield>
<s:fielderror fieldName="age"></s:fielderror>
<s:textfield name="birthday" label="生日"
onfocus="WdatePicker({isShowClear:false,readOnly:true,doubleCalendar:false,dateFmt:'yyyy-MM-dd HH:mm:ss'})" class="Wdate">
</s:textfield>
<s:fielderror fieldName="birthday"></s:fielderror>
<s:textfield name="point" label="坐标"></s:textfield>
<s:fielderror fieldName="point"></s:fielderror>
<s:submit value=" 提 交 "></s:submit>
</table>
</s:form>
</body>
</html>
2.struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="testPage" extends="struts-default">
<!-- 配置拦截器 -->
<interceptors>
<interceptor name="myInterceptor" class="com.zuxia.yc42.myinterceptor.MyInterceptor"></interceptor> <!-- 自定义拦截器 -->
<interceptor-stack name="myStack">
<!-- 把struts默认的拦截器组加上 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 加上我们自定义的拦截器 -->
<interceptor-ref name="myInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--设置我们自己组装成的myStack拦截器组为默认拦截器 -->
<!--<default-action-ref name="myStack"></default-action-ref>-->
<action name="testAction1" class="com.zuxia.yc42.action.TestAction1">
<result name="success">/jsp/success.jsp</result>
<!-- 调用我们自己组装成的myStack拦截器组 -->
<interceptor-ref name="myStack"></interceptor-ref>
</action>
<action name="testAction2" class="com.zuxia.yc42.action.MyTestaAction1">
<result name="success">/jsp/success.jsp</result>
<result name="input">/jsp/point.jsp</result>
</action>
</package>
</struts>
3.xwork-conversion.properties:
com.zuxia.yc42.util.PointConverter=com.zuxia.yc42.util.DateConverter
4.com.zuxia.yc42.util.DateConverter extends StrutsTypeConverter :
package com.zuxia.yc42.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class DateConverter extends StrutsTypeConverter
{
private SimpleDateFormat[] sm = {new SimpleDateFormat("yyyy年MM月dd日"),
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyy.MM.dd"),
new SimpleDateFormat("yyyy/MM/dd"),
new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),
new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"),
new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"),
};
@Override
public Object convertFromString(Map context, String[] values, Class toType) {
String time = values[0];
Date date = null;
for(SimpleDateFormat simple:sm)
{
try {
date = simple.parse(time);
} catch (ParseException e) {
continue;
}
}
return date;
}
@Override
public String convertToString(Map context, Object obj) {
SimpleDateFormat simple = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
return simple.format((Date)obj);
}
}
5.com.zuxia.yc42.util.PointConverter extends StrutsTypeConverter:
package com.zuxia.yc42.util;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.zuxia.yc42.po.Point;
/**
* 自定义类型转换类
* @author wang_hao
*
*/
public class PointConverter extends StrutsTypeConverter {
/**
* 将客户端数据转换成服务器端数据类型
*/
@Override
public Object convertFromString(Map context, String[] values, Class toType) {
String value = values[0];
String[] vals = value.split(",");
Integer x = Integer.parseInt(vals[0]);
Integer y = Integer.parseInt(vals[1]);
Point point = new Point();
point.setX(x);
point.setY(y);
return point;
}
/**
* 将服务器端数据类型转换为String类型
*/
@Override
public String convertToString(Map context, Object obj)
{
return obj.toString();
}
}
6.com.zuxia.yc42.action.MyTestAction extends ActionSupport:
package com.zuxia.yc42.action.MyTestAction extends ActionSupport;
import java.util.Date;
import com.opensymphony.xwork2.ActionSupport;
import com.zuxia.yc42.po.Point;
public class MyTestAction extends ActionSupport
{
private Integer age;
private Date birthday;
private Point point;
public String init()
{
Object o = new Object();
System.out.println(age.toString()+"\t"+birthday+"\t"+point);
return SUCCESS;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
}