`
san_yun
  • 浏览: 2663047 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

一个基于servlet极简的web框架实现

    博客分类:
  • web
 
阅读更多

一个基于servlet极简的web框架实现,通过web.xml来做servlet mapping是痛苦的。简单写了一个web框架。

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	 <servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>com.taobao.proxy.web.ProxyDispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	
</web-app>

 

package com.taobao.tlog.proxy.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 此Servlet是web.xml的入口,提供了简单实用的servlet mapping,避免写大量的xml
 * @author yunpeng
 *
 */
public class ProxyDispatcherServlet extends HttpServlet {

	public static final Logger logger = LoggerFactory.getLogger(ProxyDispatcherServlet.class);

	private static final long serialVersionUID = -156295649559639694L;

	protected void mapper() throws InstantiationException, IllegalAccessException {
		UrlMapping.mapping("^/jobadd$", JobAddServlet.class);
		UrlMapping.mapping("^/jobinfo$", JobInfoServlet.class);
		UrlMapping.mapping("^/jobstatus$", JobStatusServlet.class);
		UrlMapping.mapping("^/$", ProxyServlet.class);
	}

	public void init() throws ServletException {
		logger.info("tlog-proxy starting...");
		try {
			mapper();
		} catch (Exception e) {
			throw new ServletException(e);
		}
	}

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String path = request.getRequestURI();
		ProxyBaseServlet serviet = UrlMapping.find(path);
		if (serviet == null) {
			response.sendError(404);
			return;
		} else {
			serviet.doGet(request, response);
		}
	}
}

 

package com.taobao.tlog.proxy.web;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * 一个极简的urlMapping
 * @author yunpeng
 *
 */
public class UrlMapping {

	private static Map<Pattern, ProxyBaseServlet> urlPatterns = new HashMap<Pattern, ProxyBaseServlet>();

	public static void mapping(String pattern, Class<? extends ProxyBaseServlet> servlet)
			throws InstantiationException,
			IllegalAccessException {
		Pattern ptn = Pattern.compile(pattern);
		urlPatterns.put(ptn, servlet.newInstance());
	}

	public static ProxyBaseServlet find(String path) {
		for (Entry<Pattern, ProxyBaseServlet> entry : urlPatterns.entrySet()) {
			Matcher mc = entry.getKey().matcher(path);
			if (mc.find()) {
				return entry.getValue();
			}
		}
		return null;
	}
}

 

 

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.taobao.hsf.tlog.proxy.web.core.ProxyBaseServlet;

public class ProxyServlet extends ProxyBaseServlet {

	private static final long serialVersionUID = -2124094625600853748L;

	public static final Logger logger = LoggerFactory.getLogger(ProxyServlet.class);

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		jsonMsg(false, "this is tlog poxy ", response);

	}
}

 

/**
 * 此Servlet是所有业务Servlet的基类,提供一些通用的方法
 * @author yunpeng
 *
 */
public abstract class ProxyBaseServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7353341318065451370L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

	protected void jsonMsg(boolean success, Object data, HttpServletResponse response) throws IOException {
		response.setContentType("text/html");
		response.setStatus(HttpServletResponse.SC_OK);
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("success", success);
		map.put("data", data);
		String result = new Gson().toJson(map);
		response.getWriter().write(result);
	}
}

 

分享到:
评论

相关推荐

    java web项目源码基于servlet+c3p0+dbutils+jsp网上商城+mysql数据库文件.zip

    原创制作,无框架,功能界面美观大气,这个Java Web项目是一个基于servlet、c3p0和dbutils的网上商城系统,使用MySQL数据库作为后端存储。它采用了极简风格的设计,没有使用任何框架,所有代码都是手写的。 该项目...

    简易在线web聊天室

    【简易在线Web聊天室】是一个个人开发的项目,它展示了如何构建一个基本的实时通信平台。这个聊天室在Apache Tomcat服务器上运行良好,利用了AJAX(Asynchronous JavaScript and XML)技术来实现页面的异步刷新,为...

    走进JavaWeb技术世界(JavaWeb的由来和基础知识+极简配置的SpringBoot+Tomcat5总体架构剖析等)

    Tomcat是一个流行的开源Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,是部署JavaWeb应用的常见选择。Tomcat的架构设计使得它轻量级且高效,适合小型到中型的应用部署。 综上所述,JavaWeb技术...

    spring boot集成beetl极简入门实例.zip

    4、易于整合:Beetl 能很容易的与各种 web 框架整合,如 Spring MVC,JFinal,Struts,Nutz,Jodd,Servlet 等。 5、支持模板单独开发和测试,即在 MVC 架构中,即使没有 M 和 C 部分,也能开发和测试模板。 6、扩展...

    glorylion-JFinalOA

    JFinal是一个基于Java的轻量级Web开发框架,它强调的是开发效率和可维护性。 首先,我们要了解什么是OA系统。OA(Office Automation)系统是企业信息化建设中的重要组成部分,主要用于提升办公效率,实现无纸化办公...

    scalatra-spring_2.10-2.4.0.M1.zip

    1. **Scalatra**:Scalatra是一个基于Servlet API的微型Web框架,灵感来自于Sinatra(一个Ruby的轻量级Web框架)。它提供了极简的路由语法和强大的中间件支持,使得在Scala中构建RESTful服务变得简单。 2. **Spring...

    极简风 Java工程师简历模板

    本简历模板展示了一个 Java 工程师的职业经历和技能,涵盖了 Java 语言、面向对象技术、J2EE 相关技术、数据库设计和开发等方面的知识点。 Java 语言 * Java 基础知识:Java 语言的基本语法、数据类型、变量、...

    JFinal

    JFinal 是一个基于 Java 语言的轻量级 Web 开发框架,它以极简为目标,致力于打造“Java Web 开发最快最简单的框架”。JFinal 的设计理念是小巧、快速、易用,旨在简化开发流程,提高开发效率。在实际应用中,JFinal...

    jfianl1.3

    标题 "jfianl1.3" 指的是 JFinal 的一个特定版本,JFinal 是一个基于 Java 的轻量级 Web 开发框架。这个描述可能是表明这是一个关于 JFinal v1.3 的示例项目或者教程资源。标签同样为 "jfianl1.3",进一步确认了主题...

    Java Json解析,Java Web Json解析,Java Web服务端获取Json数据,客户端通过HTTP获取Json数据

    而Fastjson是阿里巴巴的一个高性能的JSON库,它提供了极简的API,使得JSON和Java对象之间的转换更加便捷。 对于Java Web服务端获取JSON数据,通常涉及到Servlet、JSP或Spring MVC等框架。当客户端通过HTTP请求发送...

    JFinal-lib-1.5.zip

    JFinal是一个基于Java语言的轻量级Web开发框架,其核心设计理念是简洁、高效。JFinal-lib-1.5.zip是JFinal框架1.5版本的库文件,它包含了该版本的所有组件和依赖,便于开发者快速集成和使用。下面将对JFinal的主要...

    fastjson + gson + jsonlib + jacksonjar包

    它基于JavaScript的一个子集,设计简单且易于人阅读和编写,同时也易于机器解析和生成。以下是对四个主要的Java JSON库——Fastjson、Gson、Json-lib和Jackson的详细解释: 1. Fastjson: Fastjson是阿里巴巴开发...

    ScheduleGuru-Scalatra

    【标题】ScheduleGuru-Scalatra 是一个基于 Scalatra 框架构建的应用程序,旨在提供时间管理和调度功能。Scalatra 是一个轻量级、快速的 Scala Web 框架,它受到 Ruby on Rails 和 Sinatra 的启发,使得开发 RESTful...

    todomvc-scalatra:使用Scalatra实现的简单TodoMVC应用程序

    2. **Scalatra**: Scalatra是一个轻量级、基于Servlet的Scala Web框架,灵感来源于Sinatra(Ruby的微框架)。它允许开发者使用极简的路由定义来处理HTTP请求,如`get("/") { "Hello, World!" }`,并提供了丰富的...

    轻松搞定Extjs

    ### 轻松搞定Extjs ...本书通过对Extjs框架各个方面的详细介绍,不仅为读者提供了一个全面的学习指南,也为实际开发工作打下了坚实的基础。无论是初学者还是有一定经验的开发者,都能从中获益良多。

    阿里fastjson和谷歌net.sf.json(三种)

    - **兼容性**:net.sf.json支持与JSP、Servlet、Struts等Web框架的集成。 - **API丰富**:提供了如`JSONArray`, `JSONObject`, `JSONFunction`等多种类来处理不同类型的JSON数据。 - **XML与JSON互转**:除了JSON...

    电子信息工程的职位要求

    1. **JAVA软件工程师**:这个职位需要深厚的JAVA开发经验,熟悉J2EE架构、Struts框架和JavaScript。此外,还需要掌握SQLSERVER、Oracle等数据库,以及B/S或C/S开发模式。精通JSP、EJB、JDBC等JAVA技术,以及JBOSS、...

Global site tag (gtag.js) - Google Analytics