浏览 1842 次
锁定老帖子 主题:jdk6的httpserver小试
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-28
网上一堆例子,个人做一个,有下载,可以用模板的小例子。(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) try { template.merge(ctx, writer) } catch (ex) { ex.printStackTrace() } finally { writer.flush() writer.close() } } void handle(HttpExchange he) { // 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\"") he.sendResponseHeaders(200, 0) 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 } } he.responseHeaders.set("Content-Type", "html/plain;charset=" + encoding) he.sendResponseHeaders(200, 0) def os = he.responseBody try { if(tpl ==~ /.*(\.js|\.css)$/){ def writer = new PrintWriter(new OutputStreamWriter(os, encoding)) def file = new File(new File(contextDir), tpl) if(!file.exists()) writer.println 'File not exists : ' + tpl else 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{ Map params = [:] def writer = new PrintWriter(new OutputStreamWriter(os, encoding)) out(params, tpl, writer) } } catch (ex) { 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()) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |