- 授权协议: GPL
- 开发语言: Java
- 操作系统: 跨平台
- 软件首页: http://git.oschina.net/xmtom/share/tree/master/netty_springmvc
- 软件文档: http://bbs.ranko.cn/forum-5.htm
软件介绍
Netty 整合 SpringFramework 代码示例。
启动类代码:
package cn.ranko.api;
import cn.ranko.framework.core.RankoServer;
/**
* Created by zhujun on 2016/8/11.
*
* 测试地址:http://localhost:8200/api-demo/test.action
* 内容返回:{"demoId":1,"demoStr":"test1"}
*
*/
public class ApiServer {
private static RankoServer server;
public static void main(String[] args) throws Exception {
int serverPort = Integer.parseInt(args.length > 0 && args[0] != null ? args[0] : "8200");
server = new RankoServer(serverPort);
server.start();
}
}整合代码:
package cn.ranko.framework.core;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpRequestDecoder;
import io.netty.handler.codec.http.HttpResponseEncoder;
import io.netty.handler.stream.ChunkedWriteHandler;
import org.apache.log4j.Logger;
import org.springframework.mock.web.MockServletContext;
import javax.servlet.ServletException;
/**
* Created by zhujun on 2016/6/20.
*/
public class RankoServer {
private Logger logger = Logger.getLogger(getClass().getName());
private int serverPort;
private ServerBootstrap bootstrap;
public RankoServer(int serverPort) {
this.serverPort = serverPort;
}
public void start() throws InterruptedException, ServletException {
if (this.bootstrap != null) {
throw new IllegalStateException("Server is started, please do not repeat");
}
bootstrap = new ServerBootstrap();
ApplicationContextHolder.init();
bootstrap.group(new NioEventLoopGroup(), new NioEventLoopGroup()).channel(
NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpObjectAggregator(65536)); // 上传限制3M
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());
pipeline.addLast("handler",new DispatcherServletHandler(ApplicationContextHolder.getDispatcherServlet()));
}
});
ChannelFuture f = bootstrap.bind(this.serverPort).sync();// 配置完成,开始绑定server,通过调用sync同步方法阻塞直到绑定成功
f.channel().closeFuture().sync();// 应用程序会一直等待,直到channel关闭
logger.info("server listens to port " + this.serverPort);
}
}
JSP 应用开发详解(第二版)
飞思科技产品研发中心 / 电子工业出版社 / 2004-1-1 / 55.00
本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了JSP 开发中的种种问题。以精简的内容介绍了JSP的语法、Servlet技术、JDBC技术、标签库技术、表达式语言、Struts、JavaServer Face等技术;对于JSP开发中常遇到的典型的难点,专门设置了专题进行集中讨论。本书的最后一篇围绕一个电子商务......一起来看看 《JSP 应用开发详解(第二版)》 这本书的介绍吧!
