`
longyw
  • 浏览: 5720 次
文章分类
社区版块
存档分类
最新评论

关于web开发的思考-java脚本代替spring

阅读更多
    从web后端编程的发展来看经历了几个阶段:
1 CGI编程
2 由于编写CGI不方便,所以形成了很多脚本的开发,例如asp/jsp/php
3 功能强化,形成asp+COM,jsp+bean
4 进一步升级采用框架,后台代码形成bean+配置(spring的核心)

    本人觉得更高级的阶段应该是抛弃spring,返朴归真,后台代码bean+java脚本。
spring的核心思想是在xml中配置url到bean的映射,再根据xml的配置生成java bean并调用。好处是实现所谓的控制反转(也叫依赖注入),配置编程。由此带来的问题是配置很随意,逻辑不好理解,生生把整体后端处理流程割成了小块,并隐藏了小块间的联系,对新人来说难以理解,对高手来说太零碎。特别是3.0之后的注释代替配置,虽然减少了xml的量,但对于读代码的人来说简直是灾难,简简单单的url映射,要翻遍所有的bean代码才知道在哪里映射!

    既然spring的核心就是通过反射从xml配置生成java类,达到配置灵活的特点,但配置文件中体现不出程序运行流程,java本身就是动态语言,为什么不直接使用java脚本来实现呢?
用java代码代替框架+xml,用java代码的解释执行代替spring这种过度设计的垃圾框架。而且可以将java代码类编译成class载入serverlet直接运行,速度更快。

    本人已经用这种方法实现了简单的web项目,深深感觉到spring这方面的愚蠢,是该抛弃的时候了!

if (url_key == "A_B")
{
    // 处理前
    Request request = new Request_A_B();   // Request是接口,Request_A_B是子类,类似Structs的Action
    request.process(url, pos);           // 通过反射对字段赋值

    // 处理中
    Handle handle = new Handle_A_B();      // Handle是接口,HandleAB是子类
    String s = handle.process(request);  // 输出后续的jsp文件名

    // 处理后
    Response response = new Response();   // 非特例
    response.process(s + ".jsp", handle); // 模板替换
    return response.ToHtml();
}
进一步
if (url_key.at(0) = 'A')
{
    // 处理前
    Request request = (Request)Class.forName("Request_" + url_key).newInstance();   // Request是接口,RequestAB是子类,类似Structs的Action
    request.process(url, pos);           // 通过反射对字段赋值

    // 处理中
    Handle handle = (Handle)Class.forName("Handle_" + url_key).newInstance();      // Handle是接口,HandleAB是子类
    String s = handle.process(request);  // 输出后续的jsp文件名

    // 处理后
    Response response = new Response();   // 非特例
    response.process(s + ".jsp", handle); // 模板替换
    return response.ToHtml();
}

下面是serverlet中调用脚本的代码,使用BeanShell(参考http://jiasudu.iteye.com/blog/105761)作为java脚本引擎。示例代码等本人有空会整理奉上。

import bsh.Interpreter;

    bsh.Interpreter i = new bsh.Interpreter();
    try
    {
        i.set("this", this.getServletContext());
        i.set("request", request);
        i.set("response", response);
        i.source("C:\\a.txt");
    }
    catch (EvalError e)
    {
        e.printStackTrace();
    }
分享到:
评论

相关推荐

    web-stub:基于Spring Boot的简单Web存根

    这段描述表明“web-stub”是一个专注于网络服务的存根应用,它基于Spring Boot这一流行的Java Web开发框架。Spring Boot以其便捷的启动方式、自动配置和丰富的生态系统而受到广泛欢迎,它简化了创建独立的、生产级别...

    java web 标签大全

    在本篇文章中,我们将深入探讨一些核心的Java Web标签,以及它们在实际开发中的应用。 1. JSP标准标签库(JSTL) JSTL(JavaServer Pages Standard Tag Library)是Sun Microsystems公司推出的一套用于JSP页面的...

    spring-boot-test示例程序

    在IT行业中,Spring Boot是一个非常流行的Java框架,用于简化微服务和Web应用的开发。它提供了许多开箱即用的功能,使得开发者可以快速构建可运行的应用。本示例程序是关于"Spring Boot Test"的实践,它展示了如何...

    spring-security cookie认证

    在这个“spring-security cookie认证”主题中,我们将深入探讨如何利用Spring Security来处理基于Cookie的身份验证。 Cookie是Web应用中常用的客户端存储机制,用于在用户与服务器之间传递信息,例如用户会话ID。...

    JAVA操作linux服务器,本文用于启动shell脚本并返回数据,简单易懂,可随时修改

    在这个场景中,标签"SSM"可能代表Spring、Struts和MyBatis这三大Java Web开发框架,但这里更直接关联的是SSH(Secure Socket Shell)协议,而非Spring Security或Structs SSH框架。 1. **连接服务器**: 使用Java...

    Spring 4.0 官方参考手册

    ### Spring 4.0 官方参考手册知识点总结 ...这些特性不仅覆盖了核心容器、Web 层、消息传递等多个方面,还加强了对最新 Java 标准的支持,确保了 Spring 框架能够在不断变化的技术环境中保持竞争力。

    企业进销存管理系统java web 完整项目 包含源码数据库

    3. **JSTL**:JSTL提供了一系列标签库,使得开发者能在JSP页面中使用更简洁的标签语法代替Java脚本,降低代码复杂度。例如,可以用`<c:forEach>`遍历列表,`<fmt:formatDate>`格式化日期,提升页面的可读性。 4. **...

    Java SE (jdk1.8下载 64位).rar

    - **Web应用**:与Servlet、JSP、Spring框架等结合,开发企业级Web应用。 - **分布式应用**:例如使用RMI(远程方法调用)或EJB(企业级JavaBean)实现分布式服务。 - **大数据处理**:Hadoop、Spark等大数据框架...

    Thymeleaf+Spring官网教程

    通过学习本教程,开发者能够有效地将Thymeleaf集成到现有的Spring项目中,利用其强大的功能来简化Web应用的开发过程。无论是对于Spring 3.x还是4.x版本的应用程序,都能够通过简单的配置调整轻松地集成Thymeleaf,...

    基于java的-129-jspm影院管理系统--LW-源码.zip

    《基于Java的影院管理系统——LW源码解析》 在当今信息化社会,各种管理系统已经渗透到各行各业,其中,影院管理...通过对源码的深入学习,我们可以理解其背后的开发思路和技术选型,对提升Java Web开发技能大有裨益。

    web开发JSTL包.zip

    它提供了一系列预定义的标签,使得开发者可以避免在JSP页面中编写过多的Java脚本,从而将业务逻辑和展示逻辑分离。 **JSTL的组成部分:** 1. **Core标签库(c:tags)**:这是JSTL的核心库,包含处理条件语句、迭代...

    spring boot指导手册

    系统要求部分讨论了Servlet容器的配置,而安装指南则涵盖了为Java开发者准备的安装选项,如使用Maven、Gradle、Spring Boot CLI以及操作系统的专用安装方法。此外,还包括了如何从早期版本迁移到最新版本的指导。 ...

    jsp源码内容管理系统(hibernate3+struts2+spring2)130224

    - **使用JSTL标签库**:代替传统脚本元素如`<% %>`、`<%= %>`等,减少页面中的Java代码量,使JSP更加专注于表现层逻辑。 - **EL表达式**:代替传统字符串拼接方法,在JSP中直接获取对象属性值,简化编码工作量。 ##...

    java标签库

    - 提高代码可读性:通过标签代替Java脚本,使得JSP页面更易于理解。 - 提升性能:JSTL标签通常比Java脚本运行得更快,因为它们在服务器端被编译成Java代码。 - 代码分离:JSTL有助于实现表现层和逻辑层的分离,...

    JavaJSP文档

    - 如Spring MVC、JSF等现代框架提供了更好的分层架构,鼓励使用单独的视图技术(如Thymeleaf、Freemarker)代替JSP。 学习“JavaJsp文档”中的内容,你可以深入了解JSP的工作原理,掌握如何在实际项目中运用JSP来...

    spring-boot-repo-stub

    标题“spring-boot-repo-stub”表明我们正在讨论一个与Spring Boot相关的项目,它专注于创建数据库的存根数据。存根数据通常用于测试目的,帮助开发者在没有真实数据库环境的情况下进行开发和测试。Spring Boot是...

    JavaWEB技术文档课件.zip

    6. **MVC框架**:Spring MVC和Struts是两个常见的Java Web MVC框架。它们提供了完整的解决方案,包括依赖注入、事务管理、安全控制等,极大地提高了开发效率。 7. **Java EE组件**:如EJB(Enterprise JavaBeans)...

    spring-hibernate-gradle-multi-module:使用 Gradle 多模块的带有 Hibernate 的 Spring MVC(JavaConfig 和 XML Config)项目

    5. **JavaConfig**:Spring框架提供了使用Java类进行配置的选项,代替传统的XML配置文件。这种方式使得配置更加直观和易于维护,可以利用Java的全部能力,如注解、类型安全等。 6. **XML Config**:虽然JavaConfig...

Global site tag (gtag.js) - Google Analytics