页面或者视图是我们进入一个程序第一眼所看到的的,按道理来说,我们看到的应该是视图,视图是一个虚拟的玩意儿,在这个视图上面,承载了我们的数据,响应我们的一些操作。

数据应该说在一个程序中起到了很重要的作用,看得见的数据,看不见的数据,看的见得数据就是页面上直接进入眼帘的,比如说datagrid中的数据,Table中的数据,还有一些其他形式的数据,其实chart也算,只不过是将数据用不同的形式展现出来而已,视图上除了控件,图片什么的,剩余的可以都说是数据,这是看得见的,但是看不见的数据也有举足轻重的作用,比如JSON,XML等,这些是用来和服务器通讯的,我们在前面的操作往往就是构造请求的数据结构,传入JSON或者XML等的数据对象。

逻辑的处理往往是在服务器端完成,而在服务端的数据,往往是在数据库中,或者一些专有的文件中,因为服务器可以读取这些数据,并且可以随心所欲的去读取,但是我们清楚的知道,这个在服务器端的数据是要被客户端识别到然后在视图上进行显示,也就是我们上面提到的JSON或者XML,这种似乎是约定俗成的一个数据协议,所以不得不将数据在服务器端进行重构,当然重构的标准就是生成JSON或者XML,所以我们往往会用一个类来构造JSON或者XML的对象,用另外的类将数据的结构进行封装,这个类不为别的,简单来说,就是一个只有属性字段的类,这些字段对应了数据库中的字段,或者JSON中的Key,说了这么多,还是看代码比较直接,这也许是CODER的作风,不喜欢唠唠叨叨,萝莉啰嗦,不如代码来的直接,还能直扑主题。

namespace SQLServerService
{
    public class MyPoint
    {
       public double x;
       public double y;
       public  MySpatialRef spatialReference;
    }
}



  public class JsonHelper
    {
        public string ScriptSerialize<T>(T t)
        {

            JavaScriptSerializer js = new JavaScriptSerializer();

            return js.Serialize(t);

        }



        public T ScriptDeserialize<T>(string strJson)
        {

            JavaScriptSerializer js = new JavaScriptSerializer();

            return js.Deserialize<T>(strJson);

        }
    }

 上面的代码是我在Web Service方式下的,很容易的,,而且在前面也已经说了作用,当然这也是我自己这么弄,别人的我还不清楚。 数据的协议有了,那么数据是如何传输的的呢?

数据通过网络,要在网络上传输也有自己的协议更深层的细节我不清楚,但是上次和同学讨论,讨论的结果就是根据流去解析,因为有协议,解析也是肯定合乎常理的,要不然乱套了,传输过去的对方没法识别,好像写信一样,对方说的是英文,而自己用的是汉语,这肯定不行。数据在传输的过程应该是添加一些标志,到了对方的机器上又去掉这些标志进行解析,要不然我传的是JSON,你给我解析为XML,这也说不过去,对于这样的协议Web Service是SOAP,但是常用的还有HTTP的。

    整个流程大体如此,在《乱想》的那篇博文中提到了一些东西,但是没说如何使用JSP或者Servlet的方式,以为在前后台交互的时候这两个也是很多的,我本人在上学的时候学过JSP,也曾经用过,还做了一个访问数据库的小玩意,当然很多代码都是从书上或者网络上找的,但是因为一些原因,以开发效率慢,渐渐的放弃了JSP,进入了C#阵营,C#就成了我用的最多的语言了,也是自己写代码用的最多的,对于其他语言,我能做的就是经这些语言能正确拼写,比如Java,哈哈。

关于JSP和Servlet的区别,我不想谈的过多,但是只要知道这一点就行,JSP最终也是被翻译成Servlet的,而这两者都是和Java息息相关的,因为最后都被编译为Java的Class文件。

JSP一般充当了视图的角色,类似aspx页面,里面可以有一些标记什么的,而Servlet充当了逻辑控制器的角色,在数据往往被放在一个称之为Bean的家伙中。当然这是我的片面只语,只因为用的不多,所以不敢妄自评论,免得疑惑大家,贻笑大方,但是根据我的猜测,我的猜测而已。

其实,万事万物都是有联系的,解决一个问题的方法很多,异曲同工,正因为如此,世界不再孤单,反而美妙起来,及比如前后台通讯,因为WebService是标准,所以C#和Java都支持,而jsp,Servlet是跟Java相关的,aspx却是和C#一脉相承,axpx中可以调用CS文件,而jsp可以调用java文件,里面都有Response,Request,Session等,看来举一反三很重要,不要在几个类似的东西上面花费太多的时间,学会类比,学会联想。

在aspx相关的后台CS文件中,我们总是在Page_Load事件下面处理请求,而JSP是按顺序去执行的,这里的不同,是因为前面可以有一个服务器的页面,因而有了自己特有的生命周期,而JSP没有这样的概念,因为JSP是被翻译为Servlet来执行的,有一个问题出来了,还记得上一篇,默认构造函数的问题,既然是类,那么类要被实例化才可以使用里面的方法的,而Servlet说白了也是一个类,类名是我们写好,最后配置的配置文件中的,但是JSP被翻译后的类名是什么?不知道大家有没有考虑过。
看来有必要看web资源的运行原理(针对的JSP):

     html: 静态web资源,DefaultServlet读取html文件,通过response输出给IE浏览器

    Servlet: 动态web资源,web容器(Servlet引擎)解析web.xml文件,找到url对应的java类

              通过反射创建Servlet对象,调用service方法

              Class.forName(“cn.itcast.servlet.Servlet1”).newInstance();

    jsp: 动态web资源

    jsp页面在第一次被访问的时候,web容器(jsp引擎)会将jsp翻译成一个Servlet,然后调用servlet的 service方法

    jsp 翻译后的Servlet会被放到%tomcat安装目录%\work\Catalina\localhost\webcontext

比如:

   <%=new Date() %>

   会被放到 out.print() 里面。

    第二次访问jsp的时候 如果jsp没有任何的改动,

     web容器就不会翻译了 而是找刚才的Servlet为用户服务

人都说处处留心皆学问,当时我怎么就不明白呢?不知道现在醒悟,还算不算迟,如果当初我去Tomcat的目录下都翻下,也许就知道这个被翻译的servlet的名称了,现在条件不允许,那么就以后看吧,记住这个目录地址:%\work\Catalina\localhost\webcontext。

 

看来JSP也有自己的生命周期,当翻译为Serlvet之后,这个生命周期就是Servlet的,说是说,实现起来并不是这么简单,以我的愚资,也只能到这里。

一切似乎都在遵循前面那篇博文的规律,总结真是一件美妙的事情,在总结的过程中可以挖掘很多很多曾经想过的事情。

下面是我找到的一个小例子

<form name="form1" method="post" action="2.jsp"> 请输入用户姓名:<input type="text" name="username"> <input type="submit" name="Submit" value="提交"> form> 

 2.jsp

<%  String username=request.getParameter("username");  request.setAttribute("username",username);  %> 

 

我本人喜欢使用XMLHttpRequest,因为这样我觉得容易获取数据,而JSP获取数据没操作过,不妄下结论,关于XMLHttpRequest用法可以参照前面的!附上一个链接,里面有:http://blog.csdn.net/tomison/article/details/1490430

 

 

posted on 2013-04-12 10:27  醉意人间  阅读(238)  评论(0编辑  收藏  举报