`

jdk6的httpserver小试

阅读更多

网上一堆例子,个人做一个,有下载,可以用模板的小例子。(Groovy)

 

尤其是在团队做demo时候使用,实时更新最先代码。

 

代码如下:

 

import com.sun.net.httpserver.*
import org.apache.commons.io.IOUtils
import org.lilystudio.smarty4j.*

class TplHandler implements HttpHandler {
    def engine = new Engine()
    final String contextDir = "../"
    final String encoding = "GBK"
    
    public TplHandler(){
        engine.setTemplatePath(contextDir)
        engine.setEncoding(encoding)
		engine.setDebug(true)
    }

    def out(Map map, String tpl, Writer writer) {
        def template = engine.getTemplate(tpl)
        def ctx = new Context()
        ctx.putAll(map)
		template.merge(ctx, writer)
    }   


    void handle(HttpExchange he) {
		he.sendResponseHeaders(200, 0)

    //  def is = he.requestBody
    //  def reader = new BufferedReader(new InputStreamReader(is))
    //  List lines = reader.readLines() 

    //  String path = he.httpContext.path
        def uri = he.getRequestURI() 
        String tpl = uri.path

		// 如果是下载
		if(tpl.endsWith('download')){
			try {
				def ant = new AntBuilder()
				String zipFile = contextDir + '../demo.zip'
				ant.zip destfile : zipFile, basedir : contextDir

				he.responseHeaders.set("Content-Type", "application/zip")
				he.responseHeaders.set("Content-Disposition", "attachment;" + "filename=\"demo.zip\"")

				def os = he.responseBody
				def downFile = new File(zipFile)
				os.write(IOUtils.toByteArray(new FileInputStream(downFile)))
				os.flush()
				os.close()
				return
			} catch (ex) {
				println ex.message
			}
		}

        try {
			def os = he.responseBody
            if(tpl ==~ /.*\.(js|css)$/){
                def writer = new PrintWriter(new OutputStreamWriter(os, encoding))
                def file = new File(new File(contextDir), tpl)
                if(!file.exists()){
					he.responseHeaders.set("Content-Type", 'text/plain')
                    writer.println 'File not exists : ' + tpl
                }else {
					def mat = tpl =~ /.*\.(js|css)$/
					String mime = mat[0][1]
					he.responseHeaders.set("Content-Type", 
						'js' == mime ? 'application/x-javascript' : 'text/css')
                    writer.println file.text
				}

                writer.flush()
                writer.close()
            }else if(tpl ==~ /.*(?i)(\.gif|\.jpg|\.png)$/){
                def mat = tpl =~ /.*(?i)\.(gif|jpg|png)$/
                he.responseHeaders.set("Content-Type", "image/" + mat[0][1])

                def file = new File(new File(contextDir), tpl)
                def defaultFile = new File(new File(contextDir), 'images/calen_pic.gif')

                if(!file.exists())
                    os.write(IOUtils.toByteArray(new FileInputStream(defaultFile)))
                else
                    os.write(IOUtils.toByteArray(new FileInputStream(file)))

				os.flush()
				os.close()
            }else{
				he.responseHeaders.set("Content-Type", "text/html;charset=" + encoding)

                Map params = [:]
                def writer = new PrintWriter(new OutputStreamWriter(os, encoding))

				try {
					out(params, tpl, writer)
				} catch (ex) {
					writer.println ex.message
				} finally {
					writer.flush()
					writer.close()				    
				}
            }
        } catch (ex) {
			he.responseHeaders.set("Content-Type", "text/plain;charset=" + encoding)

            def writer = new PrintWriter(new OutputStreamWriter(os, encoding))
            writer.println ex.message
			writer.flush()
			writer.close()
        } 
    }
}


HttpServer hs = HttpServer.create(new InetSocketAddress(8888), 0)
hs.createContext("/", new TplHandler())
hs.start()
println(" ---Start--- ")
println(hs.getAddress().getHostName())
println(hs.getAddress().getPort())
println(hs.getAddress().getAddress())
分享到:
评论

相关推荐

    jdk6免安装下载 免费下载

    JDK6,也称为JDK 1.6,是Oracle公司发布的一个重要版本,它在2006年推出,提供了许多新特性并改进了旧的功能。在本文中,我们将深入探讨JDK6的主要特点和包含的文件内容。 首先,JDK6引入了许多关键的新特性,以...

    windows64位jdk6、jdk7、jdk8安装包

    在本主题中,我们重点关注的是Windows 64位系统下的JDK6、JDK7和JDK8的安装包。这三个版本的JDK在Java的发展历程中都占有重要的地位,它们为开发者提供了编写、编译、调试和运行Java应用程序所需的所有工具。 首先...

    苹果电脑安装jdk1.6 mac for jdk1.6 jdk6 安装版

    mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...

    jdk6,jdk7,jdk8,jdk9,jdk10 windox、linux版本 百度云

    官网 jdk6,jdk7,jdk8,jdk9,jdk10 windox 32位、64位、linux 32位、64位 百度云。

    jdk6-linux

    【标题】"jdk6-linux"指的是Java Development Kit (JDK) 的6版,专为Linux操作系统设计。在软件开发领域,JDK是用于编写、测试和运行Java应用程序的关键工具集。这个版本是针对Linux环境的,它包含了编译器、调试器...

    java jdk1.8 连接sqlserver数据库使用的扩展jar包-sqljdbc42

    Java JDK 1.8 连接SQL Server数据库时,需要用到特定的驱动程序,这个驱动程序通常以JAR包的形式提供。在本例中,我们关注的JAR包是`sqljdbc42.jar`,它是微软官方提供的SQL Server JDBC驱动的一个版本,特别针对JDK...

    linux版jdk6

    linux版jdk6linux版jdk6linux版jdk6linux版jdk6linux版jdk6linux版jdk6linux版jdk6

    JDK6 帮助文档 JDK6 帮助文档

    JDK6 帮助文档 JDK6 帮助文档JDK6 帮助文档 JDK6 帮助文档

    jdk6 源码 SRC

    jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码jdk6 源码

    jdk-6u21-windows-x64

    jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-...

    Windows server 2019安装JDK.docx

    Windows Server 2019 安装 JDK 详细指南 Windows Server 2019 是一款功能强大且稳定的操作系统,对于企业级应用和开发环境非常友好。然而,在安装 JDK 时,可能会遇到进度条卡住的问题,无法继续安装。本文将详细...

    mac jdk6 java6支持最新macOs10.13.4版本及以下

    mac jdk6 java6支持最新macOs10.13.4版本及以下,亲测有效

    JDK6 帮助文档 JDK6 帮助文档2

    JDK6 帮助文档 JDK6 帮助文档JDK6 帮助文档 JDK6 帮助文档

    JDK6 API中文参考手册[沈东良制](最经典的JDK6API)

    最经典的中文JDK6 API,适用于JDK6、JDK7、JDK8,Java程序员开发必备参考文档

    JDK6 免安装版

    本压缩包提供的是JDK6的免安装版,这意味着用户无需经过传统的安装过程,只需解压缩并配置好环境变量,就可以在系统中使用JDK6。 首先,让我们了解一下JDK6中的主要特性: 1. **泛型增强**:JDK6对泛型的支持更加...

    jdk6 windox版、linux版 百度云

    jdk-6u10-windows-x64 jdk-6u25-windows-i586 jdk-6u45-linux-x64.bin 等等

    jdk6绿色免安装版

    1. **设置JAVA_HOME**:将JDK6的解压路径设置为JAVA_HOME环境变量,例如:`C:\Program Files\Java\jdk1.6.0_45`。 2. **添加PATH**:将%JAVA_HOME%\bin添加到系统的PATH环境变量中,这样命令行就可以直接调用Java...

    jdk 6u5 for windows

    **Java Development Kit (JDK) 6 Update 5 for Windows** Java Development Kit (JDK) 是Oracle公司提供的用于开发和运行Java应用程序的核心工具集。JDK 6 Update 5 版本是针对Windows操作系统的特定版本,它包含了...

    jdk-6u39-windows-i586

    jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows...

Global site tag (gtag.js) - Google Analytics