`
nianien
  • 浏览: 17474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

去繁从简,有关免配置Java Web框架的一些设想和实现

阅读更多
框架没有优劣,只有适合不适合.
作为我这样的背景:
1对Servlet规范比较了解
2对于Java语言比较熟悉
3对于标签库可以自定义
4对于JSTL也能熟练应用
5对于请求到POJO对象的自动封装能够代码实现
到底需要什么样的一个框架呢?
我觉得越简单越好,简单到JavaBean+Servlet+Jsp
上述模式的问题在于什么呢?
配置太多,几乎一个逻辑对应一个Servlet
于是可以创建一个DispatcherServlet,
里面可以有多个方法,对于不同的请求URL自动调用不同的方法
类似于Struts的DispatcherAction

但是即使这样,由于不同的逻辑通常是按照业务分组的,这样通常也得一个业务对应一个Servlet
还是配置比较麻烦,于是便要学着Struts,由一个Servlet进行请求分发的统筹管理
这样子呢,咋一看不就演化成了Strtus了么?

其实不然,Struts配置太复杂,一个action里面有多个方法的话,还需要传递一个参数进行区分

我需要的理想的状态是,写好一个类
不需要过多的配置就能直接将请求路径映射到当前类的方法上

例如
public class LoginAction {

public String login(HttpServletRequest request, HttpServletResponse response) {
return "login";
}
         public String logout(HttpServletRequest request, HttpServletResponse response) {
return "welcome";
}

}

当我请求/loginaction/login时,将自动调用LoginAction.login()方法
而请求/loginaction/logout时,自动调用LoginAction.logout()方法
这样完全免配置不好么?

什么,需要指定不同的url路径?不想将方法名暴露给客户?不同的请求URL想调用相同的处理方法?
这样的话,我们可以使用注解进行覆盖默认行为
@RequestURL({"/loginaction","logoutaction"})
public class LoginAction {

         @RequestMethod({"login","ohtersname"})
public String login(HttpServletRequest request, HttpServletResponse response) {
return "login";
}
         @RequestMethod({"logout","ohtersname"})
         public String logout(HttpServletRequest request, HttpServletResponse response) {
return "welcome";
}

}

通过以上方法我们不但可以改变默认的映射,还可以指定多个映射,同时避免了使用
XxxAction.action?method=login之类的参数形式,因为这样,和业务相关的参数就不能包含method字段

这样对于action的配置就无比简单了
<actions>
<action class=""/>
<action class=""/>
</actions>
当前,启动了自动扫描程序,并且指定匹配模式,那么连action都不需要配置了
例如,classPattern="com.nianien.*.*Action";
那么自动获取com.nianein包以及子包下面的所有以Action结尾的类,自动创建映射,这是多么简单啊~

当前,我们还可以同样的方法实现拦截器的免配置,实现返回结果的自动映射.
去繁从简,拒绝冗余的配置,提高开发效率,有没有人有过我类似的想法?
分享到:
评论
13 楼 nianien 2011-03-26  
thzthbthy 写道
我记得之前在公司,都是在方法的前面加上@Action(xxx) 然后程序就会自动找到这个方法了。 好像是按包名来找的,我才刚做这个,不太会。网上搜了下,也没弄明白是怎么弄的,求正解。

简而言之,就是注解+反射~
12 楼 thzthbthy 2011-03-25  
我记得之前在公司,都是在方法的前面加上@Action(xxx) 然后程序就会自动找到这个方法了。 好像是按包名来找的,我才刚做这个,不太会。网上搜了下,也没弄明白是怎么弄的,求正解。
11 楼 nianien 2011-03-25  
luciferdevil 写道
以前写过类似的

当我请求/loginaction/login时,将自动调用LoginAction.login()方法
而请求/loginaction/logout时,自动调用LoginAction.logout()方法


一直不怎么用struts
就凑活这么用的
                String action=request.getParameter("action");
try {
Class c= Class.forName("com.xxxx.web.transmit.GlobalTransmit");
Class[] arg=new Class[]{HttpServletRequest.class,HttpServletResponse.class};
Method method=c.getMethod(action,arg);
method.invoke(c.newInstance(), new Object[]{request,response});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/Control?action=xxxx就会调用GlobalTransmit的xxx方法。。。

道理虽然查不到,但是我觉得还是把调用方法的信息存储到请求路径中而不是请求参数中更好一下,你以为呢?
比较喜欢rest风格/action/method,还有一种风格/action/method:xxx
这样的话,表单提交就可以不必回避一些类似于method或者action的参数了
10 楼 luciferdevil 2011-03-25  
以前写过类似的

当我请求/loginaction/login时,将自动调用LoginAction.login()方法
而请求/loginaction/logout时,自动调用LoginAction.logout()方法


一直不怎么用struts
就凑活这么用的
                String action=request.getParameter("action");
try {
Class c= Class.forName("com.xxxx.web.transmit.GlobalTransmit");
Class[] arg=new Class[]{HttpServletRequest.class,HttpServletResponse.class};
Method method=c.getMethod(action,arg);
method.invoke(c.newInstance(), new Object[]{request,response});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/Control?action=xxxx就会调用GlobalTransmit的xxx方法。。。
9 楼 thzthbthy 2011-03-25  
弱弱的回答一下,struts不是有零配置的功能吗?
8 楼 jnduan 2011-03-25  
请楼主看基于annotation的Spring3 MVC
7 楼 nianien 2011-03-25  
perryzheng 写道
楼主所说 感觉和REST-ful架构差不多的东西,你可以看看jersey的源码,通过在类或方法上加入@Path("/login"),@Path("/logout") 这样的标签,来定位UI上的Request到哪一个类的方法上去

学习过一点Rest的,主要是目前还没有形成绝对主流的Server实现~所以只能想用Servlet实现类rest风格的框架
6 楼 nianien 2011-03-25  
liuyar 写道
我做的给企业应用专用的框架,比你这更简单,配置文件 menu.xml 即是 action 配置,也是左侧菜单树结构。

我的意思是action默认是不需要配置的,除非你有特殊需求~~~
5 楼 perryzheng 2011-03-25  
楼主所说 感觉和REST-ful架构差不多的东西,你可以看看jersey的源码,通过在类或方法上加入@Path("/login"),@Path("/logout") 这样的标签,来定位UI上的Request到哪一个类的方法上去
4 楼 liuyar 2011-03-25  
我做的给企业应用专用的框架,比你这更简单,配置文件 menu.xml 即是 action 配置,也是左侧菜单树结构。
3 楼 key232323 2011-03-24  
看我写的MVC

看我blog里的JStore Desktop后端代码。

简单,其实就是这样设计——可以说在简单性、性能均衡、灵活性、适应场景几方面来说,我写的那个没有几个框架能比它好了
2 楼 nianien 2011-03-24  
licg1234 写道
spring mvc

Spring不需要配置么?Spring的规则更复杂,事无巨细,罗哩罗嗦~~~~
1 楼 licg1234 2011-03-24  
spring mvc

相关推荐

    架构探险-从零开始写Java Web框架-全书源码

    《架构探险-从零开始写Java Web框架》是一本深入探讨Java Web开发的书籍,作者黄勇通过本书向读者展示了如何从零构建一个完整的Web框架。全书源码的提供,使得读者能够更加直观地理解并实践书中的理论知识,这对于...

    《架构探险 从零开始写javaweb框架》 源代码

    然后基于传统 Servlet 框架搭建一款轻量级 Java Web 框架,一切都是从零开始,逐个实现类加载器、Bean 容器、IoC 框架、MVC 框架,所涉及的代码也是整个框架的核心基础。为了使框架具备 AOP 特性,从代理技术讲到 ...

    java web实现的简易bbs论坛

    在Java Web领域,一个简易BBS论坛的实现是学习和实践Web开发技能的重要步骤。这个项目涉及到了多种技术栈和概念,包括Model-View-Controller(MVC)设计模式、数据库交互以及用户认证与授权。下面我们将深入探讨这些...

    SSH 简单的java web 入门

    SSH是Java Web开发中的一个流行框架组合,由Struts2、Hibernate和Spring三个开源框架组成。这个"SSH 简单的java web 入门"压缩包文件为初学者提供了学习这三个框架的基础知识,帮助他们快速掌握Java Web编程。 1. *...

    java+dwr框架实现聊天室

    Java+dwr框架实现聊天室是使用Java语言和dwr框架实现的服务器推技术,实现了实时通信的聊天室功能。下面将详细介绍该技术的实现过程和相关知识点。 一、dwr 框架简介 dwr(Direct Web Remoting)是一种基于Ajax...

    基于Java Web框架的简易用户管理系统.zip

    基于Java Web框架的简易用户管理系统 内容概要 本项目是一个基于Java Web框架开发的简易用户管理系统,主要功能包括用户的增删改查(CRUD)操作。项目使用了Java Servlet作为后端控制器,通过DAO层与数据库进行...

    DWR js框架 javascript框架 web与java交互 Direct Web Remoting Ajax开源框架

    Direct Web Remoting (DWR) 是一个开源的Java库,它允许Web应用程序在客户端的JavaScript和服务器端的Java之间进行直接的、异步的通信,实现了Web应用中的Ajax功能。DWR通过自动化处理JavaScript和Java之间的类型...

    Java Web 案例实践,基于(spring、 spring mvc、 hibernate)框架实现的

    在本Java Web案例实践中,我们将深入探讨如何利用Spring、Spring MVC和Hibernate这三大核心框架来构建高效、可扩展的Web应用程序。Spring作为一个全面的后端开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等...

    初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    初学者在接触Java Web开发时,常常会被各种框架所吸引,然而,资深的开发者建议,初学者应当先远离框架,从基础的Servlet开发开始学习。这样做的目的是为了更好地理解Web开发的基本原理,为后续深入学习和掌握复杂...

    轻量级 Java Web 框架

    轻量级Java Web框架是专为简化Web应用开发而设计的一种高效、低侵入式的工具。这类框架通常比重量级的Java EE应用服务器更轻便,它们不依赖大型容器,而是提供基本的功能来帮助开发者快速构建Web应用。本文将深入...

    5个简单的Java web商城项目,毕业设计

    1. **Java Web技术**:Java Web是指使用Java语言开发的Web应用程序,主要基于Java Servlet、JSP(JavaServer Pages)和JSTL(JavaServer Pages Standard Tag Library)等技术。这些项目可能还涉及到Java的MVC(Model...

    java web接口开发demo

    本示例"java web接口开发demo"可能是提供了一个简单的Java Web接口的实现,帮助开发者理解如何构建和使用这样的接口。 首先,让我们了解一下Servlet,它是Java Web应用的核心组件之一,用于接收HTTP请求并返回响应...

    java-简易web框架EasyJWeb源码.zip.zip

    "java-简易web框架EasyJWeb源码.zip.zip" 是一个压缩包文件,其中包含的主要是Java语言编写的简易Web框架——EasyJWeb的源代码。EasyJWeb是一个轻量级的Java Web开发框架,旨在简化Web应用的开发过程,提高开发效率...

    java SSM框架

    SSM框架是Java Web开发中常用的三大框架集成,包括Spring MVC、Spring和MyBatis。它们各自负责不同的职责,共同构建了一个高效、灵活的后端开发解决方案。 **Spring MVC** 是Spring框架的一部分,主要处理HTTP请求...

    tomcat和java web源码

    Java Web是使用Java语言进行服务器端Web应用开发的一系列技术和框架的总称,包括Servlet、JSP(JavaServer Pages)、JavaBeans等。Tomcat则是一个开源的Java Servlet容器,它是Apache软件基金会的Jakarta项目的一...

    架构探险——从零开始写Java Web框架高清带书签pdf

    然后基于传统 Servlet 框架搭建一款轻量级 Java Web 框架,一切都是从零开始,逐个实现类加载器、Bean 容器、IoC 框架、MVC 框架,所涉及的代码也是整个框架的核心基础。为了使框架具备 AOP 特性,从代理技术讲到 ...

    spring3、struts2、mybatis结合的一个简单web实现

    在Java Web开发中,Spring、Struts2和MyBatis是三个非常重要的开源框架,它们分别负责不同层面的任务。Spring提供了全面的结构化和依赖注入功能,Struts2则是一个强大的MVC(Model-View-Controller)框架,而MyBatis...

    java后台框架集合

    Java后台框架集合是开发高效、稳定且可扩展的后端应用程序的重要工具箱。SpringMVC、Redis和Quartz是其中的三个关键组件,它们分别在不同的层面上为开发者提供了强大的支持。 SpringMVC是Spring框架的一个模块,...

    JFinal框架在Java Web开发中的应用.pdf

    JFinal是一个专门为Java Web开发打造的轻量级MVC框架,具有国产化、开源化的特点,它是由陆文瑞、卢盼娜和王彦婕等人在山西信息产业技术研究院有限公司进行研究和应用的。JFinal的特点在于它的便捷性、高效性和设计...

    基于java web开发的购物商城项目源码

    描述中提到,这个购物商城项目是“适合毕业设计,小型项目参考”,意味着它具有一定的教学价值和实用性,可以作为学习Java Web开发的实战案例,同时也适用于那些需要快速搭建一个简单电商系统的学生或团队。...

Global site tag (gtag.js) - Google Analytics