Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16493727
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:37:01

下载本文示例代码
天极IT资讯短信服务 电脑小技巧 function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } 资费:包月5元手机: 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。   WebForm是事件驱动的,控件状态可以在http请求之间自动保持,并且使用后置代码很好地实现了页面外观与页面逻辑控制的分离,一改以往html,服务器段代码、javaScript混杂在一起的web开发方式。stucts提供了大量的定制标签,由tag、form、bean、action及配置文件构建了一个优秀的MVC模式的web开发方式。但相比较其WebForm来,窃以为stucts更为复杂,需要协同工作的元素较多,解决问题的效果不如WebForm显著(仅是个人看法)。  在现实开发中,常常需要在某个页面中处理很多Form控件,且要处理这个页面可能引发的多个事件,在事件触发后,又请求同一个页面,又需要在请求之间保持状态,在页面中处理所有这些,真实不胜其烦。受到WebForm启发,我在用JSP进行开发时,借鉴了了其一些思想。本质上我们就是想让页面显示代码与页面控制代码分离,要作到这一点并不困难,有很多办法。  可以为页面定义一个“页面处理器(PageHandler)”,它类似WebForm的后置代码,它的接口基本是下面这个样子: public class PageHandler{ protected HttpServletRequest request; protected HttpServletResponse response; protected JspWriter out; protected PageContext pageContext; protected HttpSession session = null; protected ServletContext application = null; protected ServletConfig config = null; protected String event_action = null; //页面事件 protected String event_params = null; //页面参数 //取得操作页面的基本组件 public PageHandler(PageContext page) {  this.pageContext = page;  this.request = (HttpServletRequest) pageContext.getRequest();  this.response = (HttpServletResponse) pageContext.getResponse();  this.pageContext = page;  out = pageContext.getOut();  application = pageContext.getServletContext();  config = pageContext.getServletConfig();  session = pageContext.getSession();  try{   request.setCharacterEncoding("gb2312");//设定页面编码  }  catch(Exception e)  {   e.printStackTrace();  } } //初始化页面的参数,具体的页面处理器类可以重写这 //个方法进行页面初始化 protected void onLoad() throws Exception { } //根据页面指定的事件进行处理 private final void eventBind() throws Exception {  //event_action从从页面的名为event_action的hidden字段取得,它意为事件的称,  //当此事件触发时,他会寻找在"页面处理器类中"与event_action同名的方法加  // 以调用。  if (event_action != null && !event_action.equals(Format.Empty))  {   event_params = request.getParameter("parameters"); //事件参数参数,从页面    //的名为parameters的hidden字段取得   if (paramTypes[0] == null)   {    paramTypes[0] = Class.forName("java.lang.String");   }   Object paramValues[] = new Object[1];   paramValues[0] = event_params;   Method method = null;   try   {    method = this.getClass().getDeclaredMethod(event_action, paramTypes);    method.setAccessible(true);   }   catch (Exception e)   {    throw new UserException("系统缺少对您的请求的处理机制: event_action);   }   if (method != null)   {    method.invoke(this, paramValues); //调用web时间   }  } } //处理页面 public void process() throws Exception {  try  {   event_action = request.getParameter("action"); //得页面事件    onLoad();//页面加载时的初始化   eventBind();//处理事件  }  catch (Exception e)  {   e.printStackTrace(); ///////////////   Format.alert(out, "发生了未知错误:" Format.getString(e.getMessage()));  } }}   当然,实用的 PageHandler应提供更为复杂的功能。  具体的页面处理器类从此类继承下来,现在,我们用一个简单的例子说明页面处理器的用法:假设有这样一个页面,有一个文本框要求用户输入一个数字,有两个按钮,点击一个要求计算出用户输入数字的2倍,点击另外一个按钮要求计算出用户输入数字的10倍。再假设此页面的页面处理器类为JspTest. //test.jsp<%@ page contentType="text/html; charset=GB2312" %><%@ page import="youpackage.JspTest" %><% JspTest handler=new JspTest(pageContext); handler.process();//调用页面处理器 String formAction=request.getRequestURI() "?" request.getQueryString();%><html><head><title>测试页面处理器</title> <script language="javascript">  function on_event(action,params)  {   window.form1.action.value=action;   window.form1.parameters.value=params;   window.form1.submit();  } </script></head><body bgcolor="#ffffff"><form name="form1" method="post" action="<%=formAction%>">请输入数字:<input type="text" name="t_value" value="<%=handler.t_value%>"><br><br><font color="red"><%=handler.result%></font><br><br><input type="button" name="b1" value="2倍" onclick="on_event('onTwo','')">   <input type="button" name="b2" value="10倍" onclick="on_event('onTen','')"><input type="hidden" name="action" value=""/><input type="hidden" name="parameters" value=""/></form></body></html>则,我们为以上页面定义其页面处理器:JspTest//JspTest.javapublic class JspTest extends PageHandler{ //定义页面变量 public int t_value;//用户输入的整数 public String result;//存储计算结果  public JspTest(PageContext page) {  super(page); } protected void onLoad() throws Exception {  t_value=0;  result="";  //在实际应用中,这里应作许多的初始化工作(如,得到页面参数) } //双倍 private void onTwo(String str_params) throws Exception {  try  {   t_value=Integer.parseInt(request.getParameter("t_value"));  }  catch(Exception e)  {   out.println("<script language='javaScript'>alert('您输入的不是有效的整数.');</script>");}  int i=2*t_value;  result="计算结果为:" i; } //10倍 private void onTen(String str_params) throws Exception {  try  {   t_value=Integer.parseInt(request.getParameter("t_value"));  }  catch(Exception e)  {   out.println("<script language='javaScript'>alert('您输入的不是有效的整数.');</script>");  } int i=10*t_value; result="计算结果为:" i;}}   WebForm的基本思想也就在于此,当然,WebForm中的服务器端控件的状态可以自动保持(而我们的实现为保持状态还需作一些工作),WebForm的控件属性可以在后置代码中进行操作,服务器端事件可以在后置代码中进行邦定,服务器端控件支持数据邦定等等,我们的实现还无法做到。  如果能在Jsp中定义类似服务器端控件的东东,以上的功能在Jsp中可以得以实现。zmbbs=1;共3页。 1 2 3 : 天极IT资讯短信服务 电脑小技巧 function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } 资费:包月5元手机: 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。   WebForm是事件驱动的,控件状态可以在http请求之间自动保持,并且使用后置代码很好地实现了页面外观与页面逻辑控制的分离,一改以往html,服务器段代码、javaScript混杂在一起的web开发方式。stucts提供了大量的定制标签,由tag、form、bean、action及配置文件构建了一个优秀的MVC模式的web开发方式。但相比较其WebForm来,窃以为stucts更为复杂,需要协同工作的元素较多,解决问题的效果不如WebForm显著(仅是个人看法)。  在现实开发中,常常需要在某个页面中处理很多Form控件,且要处理这个页面可能引发的多个事件,在事件触发后,又请求同一个页面,又需要在请求之间保持状态,在页面中处理所有这些,真实不胜其烦。受到WebForm启发,我在用JSP进行开发时,借鉴了了其一些思想。本质上我们就是想让页面显示代码与页面控制代码分离,要作到这一点并不困难,有很多办法。  可以为页面定义一个“页面处理器(PageHandler)”,它类似WebForm的后置代码,它的接口基本是下面这个样子: public class PageHandler{ protected HttpServletRequest request; protected HttpServletResponse response; protected JspWriter out; protected PageContext pageContext; protected HttpSession session = null; protected ServletContext application = null; protected ServletConfig config = null; protected String event_action = null; //页面事件 protected String event_params = null; //页面参数 //取得操作页面的基本组件 public PageHandler(PageContext page) {  this.pageContext = page;  this.request = (HttpServletRequest) pageContext.getRequest();  this.response = (HttpServletResponse) pageContext.getResponse();  this.pageContext = page;  out = pageContext.getOut();  application = pageContext.getServletContext();  config = pageContext.getServletConfig();  session = pageContext.getSession();  try{   request.setCharacterEncoding("gb2312");//设定页面编码  }  catch(Exception e)  {   e.printStackTrace();  } } //初始化页面的参数,具体的页面处理器类可以重写这 //个方法进行页面初始化 protected void onLoad() throws Exception { } //根据页面指定的事件进行处理 private final void eventBind() throws Exception {  //event_action从从页面的名为event_action的hidden字段取得,它意为事件的称,  //当此事件触发时,他会寻找在"页面处理器类中"与event_action同名的方法加  // 以调用。  if (event_action != null && !event_action.equals(Format.Empty))  {   event_params = request.getParameter("parameters"); //事件参数参数,从页面    //的名为parameters的hidden字段取得   if (paramTypes[0] == null)   {    paramTypes[0] = Class.forName("java.lang.String");   }   Object paramValues[] = new Object[1];   paramValues[0] = event_params;   Method method = null;   try   {    method = this.getClass().getDeclaredMethod(event_action, paramTypes);    method.setAccessible(true);   }   catch (Exception e)   {    throw new UserException("系统缺少对您的请求的处理机制: event_action);   }   if (method != null)   {    method.invoke(this, paramValues); //调用web时间   }  } } //处理页面 public void process() throws Exception {  try  {   event_action = request.getParameter("action"); //得页面事件    onLoad();//页面加载时的初始化   eventBind();//处理事件  }  catch (Exception e)  {   e.printStackTrace(); ///////////////   Format.alert(out, "发生了未知错误:" Format.getString(e.getMessage()));  } }}   当然,实用的 PageHandler应提供更为复杂的功能。  具体的页面处理器类从此类继承下来,现在,我们用一个简单的例子说明页面处理器的用法:假设有这样一个页面,有一个文本框要求用户输入一个数字,有两个按钮,点击一个要求计算出用户输入数字的2倍,点击另外一个按钮要求计算出用户输入数字的10倍。再假设此页面的页面处理器类为JspTest. //test.jsp<%@ page contentType="text/html; charset=GB2312" %><%@ page import="youpackage.JspTest" %><% JspTest handler=new JspTest(pageContext); handler.process();//调用页面处理器 String formAction=request.getRequestURI() "?" request.getQueryString();%><html><head><title>测试页面处理器</title> <script language="javascript">  function on_event(action,params)  {   window.form1.action.value=action;   window.form1.parameters.value=params;   window.form1.submit();  } </script></head><body bgcolor="#ffffff"><form name="form1" method="post" action="<%=formAction%>">请输入数字:<input type="text" name="t_value" value="<%=handler.t_value%>"><br><br><font color="red"><%=handler.result%></font><br><br><input type="button" name="b1" value="2倍" onclick="on_event('onTwo','')">   <input type="button" name="b2" value="10倍" onclick="on_event('onTen','')"><input type="hidden" name="action" value=""/><input type="hidden" name="parameters" value=""/></form></body></html>则,我们为以上页面定义其页面处理器:JspTest//JspTest.javapublic class JspTest extends PageHandler{ //定义页面变量 public int t_value;//用户输入的整数 public String result;//存储计算结果  public JspTest(PageContext page) {  super(page); } protected void onLoad() throws Exception {  t_value=0;  result="";  //在实际应用中,这里应作许多的初始化工作(如,得到页面参数) } //双倍 private void onTwo(String str_params) throws Exception {  try  {   t_value=Integer.parseInt(request.getParameter("t_value"));  }  catch(Exception e)  {   out.println("<script language='javaScript'>alert('您输入的不是有效的整数.');</script>");}  int i=2*t_value;  result="计算结果为:" i; } //10倍 private void onTen(String str_params) throws Exception {  try  {   t_value=Integer.parseInt(request.getParameter("t_value"));  }  catch(Exception e)  {   out.println("<script language='javaScript'>alert('您输入的不是有效的整数.');</script>");  } int i=10*t_value; result="计算结果为:" i;}}   WebForm的基本思想也就在于此,当然,WebForm中的服务器端控件的状态可以自动保持(而我们的实现为保持状态还需作一些工作),WebForm的控件属性可以在后置代码中进行操作,服务器端事件可以在后置代码中进行邦定,服务器端控件支持数据邦定等等,我们的实现还无法做到。  如果能在Jsp中定义类似服务器端控件的东东,以上的功能在Jsp中可以得以实现。zmbbs=1;共3页。 1 2 3 : 下载本文示例代码


在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)在JSP开发中模拟.NET WebForm(一)
阅读(137) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~