三大最佳web开发语言的较量2——框架

最后总结一下三家的MVC开发框架,以php的thinkphp框架,javaee的struts框架,asp.net的asp.net MVC为例:

thinkphp,国产,但是个人非常喜欢,轻快,简单上手,开发过程中,只需要导入thinkphp包,然后建立一个index.php的配置文件,利用php文件系统功能自动生成目录和必要文件,自带一个config.php,可以直接配置数据库连接以及其他框架功能,也可以include其他配置文件,分块配置,使用起来没有xml那样的繁琐,使得整个网站的后端语言文件更加统一规范化,而且只需要熟练掌握php即可,配置完成后保存即可生效。

thinkphp对应各个目录,这些都是index.php配置完成后,在浏览器中访问,通过index.php下的配置,将会自动生成webapp,并建立好MVC目录以及文件,而且这些文件之间都是被thinkphp框架关联的,比如在Lib/Action中创建一个IndexAction.class.php(命名必须按照thinkphp规范),Tpl下的Index/目录会被自动关联,必须由开发者建立,否则php报错,然后Action下的php文件作为controller最后通过display("index.html")方法返回Tpl/Index/下的index.html页面给http发送到客户端,而这一切都是通过thinkphp实现的,完全做到了MVC业务的前后端分离,而且不需要在配置XML文件,这样的开发个人觉得是相当高效的!我也是比较喜欢和习惯的。

asp.net MVC,为了公司项目才学的,主要是研究MVC3登场的razer,不如对thinkphp那么的了解,但是总体建站还是摸得着思路了,整个网站的配置通过一个根目录下的“Global.asax”的文件进行配置,与xml文本的语法基本相同,这也为我开发javaee struts2奠定了基础,但是和struts.xml还是有区别的,具体就在于文件的路由,在asax中配置的路由只是提供一个访问规范,但是不精确到每一个方法和返回文件(下面会讲struts2.xml配置文件的不同),相当于只是对访问的url的方法以及url里传递post,get变量,对应到的后端C#类和方法进行了指路,使得用户端的url更加具有亲和力。

比如“http://www.520sunjob.com/SunJob/JobList”

访问了Sunjob/SunJobController.cs下的 public ActionResult JobList这个方法,最后这个方法用“return View(jobListPage)"返回了一个前端/Views/SunJob/JobList.cshtml,做到了MVC前后端分离,controller控制着数据和view,和thinkphp有着异曲同工之妙啊!

另外在asp.net MVC以及java web中Model文件充当着极其重要的业务模型和数据模型角色,尤其是在数据库访问时候,微软有一项新技术,叫做代码先行,利用Model可以自动生成对应的数据结构对象,再没有数据库的情况下由对象生成数据!这就是所谓的数据模型,一切皆是对象的思想(数据库也对象化)!

 

javaee struts

配置最为麻烦,可以看以下这段struts.xml的代码,这是一个Bookmark的crud小应用的一部分:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
        <constant name="struts.configuration.xml.reload" value="true"/> 
        <constant name="struts.i18n.encoding" value="UTF-8"/>
    <!--配置Convention 插件自动重加载映射 -->
    <constant name="struts.convention.classes.reload" value="true"/>
        

    <!--admin操作-->
    <package name="BookmarkAdmin" namespace="/admin" extends="struts-default">
        <!--登录操作-->
        <action name="login" class="cslg.cn.controller.UserAction" method="login">
                <!--登录成功:重置到list页面-->
                <result name="success" type="redirect">/admin/list.action</result>
                <!--登录错误:首页(非重置)-->
                <result name="error" type="">/index.jsp</result>
        </action>
        
        <!--列出user-->
        <action name="list" class="cslg.cn.controller.UserAction" method="list">
                <result name="list">/WEB-INF/view/admin/list.jsp</result>
                 <result name="error" type="redirect">/index.jsp</result>
        </action>

         <!--注销操作-->
         <action name="logout" class="cslg.cn.controller.UserAction" method="logout">
                 <result name="logout" type="">/index.jsp</result>
        </action>
     </package>
</struts>

也许没有学过struts2的乍一看有点摸不着头脑,但是里面配置的是访问controller路由的view,可以看到,package是一个命名空间,然后下面的action对应了controller下的类,例如这一部分配置:

  <action name="logout" class="cslg.cn.controller.UserAction" method="logout">
                 <result name="logout" type="">/index.jsp</result>
        </action>

访问的类在src下的cslg.cn.controller.UserAction.java,方法是logout,最终 logout不是返回一个前端页面,是返回一个对应的字符串,这里返回的是”logout“这个字符串,然后struts根据xml下的配置,找到标签下的index.jsp(是一个具体物理地址),直接就向客户端发送经过处理的jsp生成的html。

 

最终访问路径是:×××/admin/logout.action

注意”.action“是struts默认的后缀,可以通过xml改写

 

所以,如果使用了javaee下的struts框架其实开发相对另外两个框架较慢的原因也就显而易见了,在配置文件,java类文件,前端jsp中不断切换,加上庞大的IDE和编译过程,java本身又是强类型语言,需要判断和转化,另外如果xml配置文件错了,访问就会出错,这样就多了一个出错的理由,对初学者开发进度也是会有不小的影响的吧!

posted @ 2017-01-21 12:41  devilyouwei  阅读(205)  评论(0编辑  收藏  举报