基于servlet实现一个web框架

               

servlet作为一个web规范,其本身就算做一个web开发框架,但是其web action (响应某个URI的实现)的实现都是基于类的,不是很方便,并且3.0之前的版本还必须通过web.xml配置来增加新的action。servlet中有一个filter的功能,可以配置所有URI的功能都经过filter。我们可以基于filter的功能来实现一个简单的web框架。在这个框架中,主要改进URI action的映射,就像play framework中route的配置:

GET     /hello      com.codemacro.webdemo.test.TestController.helloGET     /route      com.codemacro.webdemo.test.TestController.routePOST    /hello      com.codemacro.webdemo.test.TestController.sayHello

即把某个URI映射到类接口级别。基于servlet实现web框架的好处不仅实现简单,还能运行在所有支持servlet容器规范的web server上,例如Tomcat、Jetty。

本文提到的web framework demo可以从我的github 上取得:servlet-web-framework-demo

功能

这个web framework URI action部分(或者说URI routing)如同前面描述,action的编写如:

public class TestController extends BaseController // 返回字符串  public Result index() {    return ok("hello world");  }  // HTTP 404  public Result code404() {    return status(404, "not found");  }  // 使用JSP模板渲染  public Result template() {    String[] langs = new String[] {
     "c++", "java", "python"};    return ok(jsp("index.jsp")        .put("name", "kevin")        .put("langs",  langs)        );  }}

有了action之后,配置route文件映射URI即可:

GET /index  com.codemacro.webdemo.test.TestController.indexGET /404    com.codemacro.webdemo.test.TestController.code404GET /index.jsp com.codemacro.webdemo.test.TestController.template

然后配置web.xml,增加一个filter:

<filter>  <filter-name>MyWebFilter</filter-name>  <filter-class>com.codemacro.webdemo.MyServletFilter</filter-class></filter><filter-mapping>  <filter-name>MyWebFilter</filter-name>  <url-pattern>/*</url-pattern></filter-mapping>

最后以war的形式部署到Jetty webapps下即可运行。想想下次要再找个什么lightweight Java web framework,直接用这个demo就够了。接下来讲讲一些关键部分的实现。

servlet basic

基于servlet开发的话,引入servlet api是必须的:

<dependency>    <groupId>javax.servlet</groupId>    <artifac
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值