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

关于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...

    企业进销存管理系统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等大数据框架...

    web开发JSTL包.zip

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

    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是...

    SSH开发房屋出租管理系统

    SSH开发房屋出租管理系统是一种基于Java技术的Web应用项目,它利用Spring、Struts2和Hibernate这三个框架(简称SSH)来构建高效、灵活且易于维护的系统。SSH是Java开发领域中广泛采用的MVC(Model-View-Controller)...

    新闻管理系统

    通过ORM(Object-Relational Mapping),Hibernate将Java对象映射到数据库表,使得开发者可以使用对象操作代替SQL语句,提高了开发效率。在这个新闻管理系统中,Hibernate可能是用于处理新闻数据的存储和查询,如...

    系统开发流程

    本系统采用的是基于 Struts2 和 Spring 框架的开发模式,这是一种广泛认可且高效的 Java Web 开发技术栈。以下是详细的开发流程及注意事项: 1. **系统架构设计**: - **Struts2 + Spring 框架**:本系统选择 ...

    JSP新手入门

    2. **JSTL**:Java Standard Tag Library,标准标签库,用于简化输出和控制逻辑,提供了一组预定义的标签来代替Java脚本。 3. **EL**:Expression Language,表达式语言,通常与JSTL一起使用,方便在JSP页面中输出...

    jstl-1.1.2-all-bin.zip

    - **可读性**:通过使用标签代替Java脚本,使得JSP页面更加整洁,易于理解和维护。 - **分离关注点**:JSTL有助于实现表现层与业务逻辑的分离,使得开发者能够专注于页面展示,而不是底层的Java代码。 - **可扩展性*...

    jsp教程(不错哦)

    在现代Web开发中,为了提高代码质量和可维护性,通常推荐使用模板引擎(如FreeMarker或Thymeleaf)代替JSP,同时结合MVC框架进行开发。 总结,JSP是一种强大的Web开发工具,能够轻松地将Java代码融入HTML中,为Web...

    单态登录——只能在一个机器上登录(完整实例)

    9. **Spring Security**:在Java Web开发中,Spring Security是一个强大的安全框架,提供了单态登录的实现。通过配置它可以轻松地实现SSO功能,包括基于JWT(JSON Web Tokens)的身份验证和授权。 10. **Cookie与...

    jstl-1.0和standard1.0版本

    JSTL,全称为JavaServer Pages Standard Tag Library,是JavaWeb开发中的一个标准标签库,它提供了一系列预定义的标签,用于简化JSP页面的编写,减少在页面中使用Java脚本的量,使得代码更加清晰、易读且易于维护。...

Global site tag (gtag.js) - Google Analytics