一个基于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的网上商城系统,使用MySQL数据库作为后端存储。它采用了极简风格的设计,没有使用任何框架,所有代码都是手写的。 该项目...
【简易在线Web聊天室】是一个个人开发的项目,它展示了如何构建一个基本的实时通信平台。这个聊天室在Apache Tomcat服务器上运行良好,利用了AJAX(Asynchronous JavaScript and XML)技术来实现页面的异步刷新,为...
Tomcat是一个流行的开源Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,是部署JavaWeb应用的常见选择。Tomcat的架构设计使得它轻量级且高效,适合小型到中型的应用部署。 综上所述,JavaWeb技术...
4、易于整合:Beetl 能很容易的与各种 web 框架整合,如 Spring MVC,JFinal,Struts,Nutz,Jodd,Servlet 等。 5、支持模板单独开发和测试,即在 MVC 架构中,即使没有 M 和 C 部分,也能开发和测试模板。 6、扩展...
JFinal是一个基于Java的轻量级Web开发框架,它强调的是开发效率和可维护性。 首先,我们要了解什么是OA系统。OA(Office Automation)系统是企业信息化建设中的重要组成部分,主要用于提升办公效率,实现无纸化办公...
1. **Scalatra**:Scalatra是一个基于Servlet API的微型Web框架,灵感来自于Sinatra(一个Ruby的轻量级Web框架)。它提供了极简的路由语法和强大的中间件支持,使得在Scala中构建RESTful服务变得简单。 2. **Spring...
本简历模板展示了一个 Java 工程师的职业经历和技能,涵盖了 Java 语言、面向对象技术、J2EE 相关技术、数据库设计和开发等方面的知识点。 Java 语言 * Java 基础知识:Java 语言的基本语法、数据类型、变量、...
JFinal 是一个基于 Java 语言的轻量级 Web 开发框架,它以极简为目标,致力于打造“Java Web 开发最快最简单的框架”。JFinal 的设计理念是小巧、快速、易用,旨在简化开发流程,提高开发效率。在实际应用中,JFinal...
标题 "jfianl1.3" 指的是 JFinal 的一个特定版本,JFinal 是一个基于 Java 的轻量级 Web 开发框架。这个描述可能是表明这是一个关于 JFinal v1.3 的示例项目或者教程资源。标签同样为 "jfianl1.3",进一步确认了主题...
而Fastjson是阿里巴巴的一个高性能的JSON库,它提供了极简的API,使得JSON和Java对象之间的转换更加便捷。 对于Java Web服务端获取JSON数据,通常涉及到Servlet、JSP或Spring MVC等框架。当客户端通过HTTP请求发送...
JFinal是一个基于Java语言的轻量级Web开发框架,其核心设计理念是简洁、高效。JFinal-lib-1.5.zip是JFinal框架1.5版本的库文件,它包含了该版本的所有组件和依赖,便于开发者快速集成和使用。下面将对JFinal的主要...
它基于JavaScript的一个子集,设计简单且易于人阅读和编写,同时也易于机器解析和生成。以下是对四个主要的Java JSON库——Fastjson、Gson、Json-lib和Jackson的详细解释: 1. Fastjson: Fastjson是阿里巴巴开发...
【标题】ScheduleGuru-Scalatra 是一个基于 Scalatra 框架构建的应用程序,旨在提供时间管理和调度功能。Scalatra 是一个轻量级、快速的 Scala Web 框架,它受到 Ruby on Rails 和 Sinatra 的启发,使得开发 RESTful...
2. **Scalatra**: Scalatra是一个轻量级、基于Servlet的Scala Web框架,灵感来源于Sinatra(Ruby的微框架)。它允许开发者使用极简的路由定义来处理HTTP请求,如`get("/") { "Hello, World!" }`,并提供了丰富的...
### 轻松搞定Extjs ...本书通过对Extjs框架各个方面的详细介绍,不仅为读者提供了一个全面的学习指南,也为实际开发工作打下了坚实的基础。无论是初学者还是有一定经验的开发者,都能从中获益良多。
- **兼容性**: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、...