jetty 手动 加载spring mvc demo

搞了一个周末,终于把spring mvc的一个demo用jetty手动跑起来啦。中间还是碰到了一些问题,所以在这里把代码贴出来,给刚接触jetty的同学一个参考。

 

import java.util.HashMap;
import java.util.Map;

import org.apache.jasper.servlet.JspServlet;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.bio.SocketConnector;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.DefaultServlet;
import org.mortbay.jetty.servlet.FilterHolder;
import org.mortbay.jetty.servlet.ServletHolder;
import org.springframework.js.resource.ResourceServlet;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.filter.DelegatingFilterProxy;
import org.springframework.web.servlet.DispatcherServlet;

/**
 * 在eclipse中启动
 * @author ertuo
 */

public class JettyWebStarter {


 /**
  * 服务器启动。
  */
 public void start() {
  Server server = new Server();
  Connector connector = new SocketConnector();
  connector.setPort(8080);
  server.addConnector(connector);

        Context root = new Context(server, "/booking-mvc", Context.SESSIONS);
       
        /**启动的时候就会加载这个listener 这里开始建立spring的application content*/
        ContextLoaderListener listener = new ContextLoaderListener();
       
        /**设置spring配置文件位置*/
        Map<String, String> initParams = new HashMap<String, String>();
        initParams.put("contextConfigLocation", "/WEB-INF/config/web-application-config.xml");
        root.setInitParams(initParams);
        /**servlet context*/
        root.setResourceBase("E:/sources/spring/spring-webflow-2.0.5.RELEASE/projects/spring-webflow-samples/booking-mvc/src/main/webapp");
        root.addEventListener(listener);
       
        /**资源文件解析*/
        ServletHolder holder=new ServletHolder(new ResourceServlet());
        root.addServlet(holder, "/resources/*");
       
        /**spring control*/
        holder = new ServletHolder(new DispatcherServlet());
        holder.setInitParameter("contextConfigLocation", "/WEB-INF/config/web-application-config.xml");
        root.addServlet(holder, "/spring/*");
       
       
        /**jsp 解析servlet*/
        holder=new ServletHolder(new JspServlet());
        root.addServlet(holder, "*.jsp");
       
       
        /**html*/
        holder=new ServletHolder(new DefaultServlet());
        root.addServlet(holder, "*.html");
       
       
        /**welcome file 这里没有生效 不知道为什么*/
        root.setWelcomeFiles(new String[]{"index.html"});
       
        postStart(root);
        try {
         
            server.start();
            server.join();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
 }
 
 private void postStart(Context root){
  /**spring内部过滤器代理 里面包含了默认的11个过滤器 这里的初始化参数可以直接些spring的bean名称*/
  FilterHolder filterHolder=new FilterHolder(DelegatingFilterProxy.class);
  filterHolder.setName("springSecurityFilterChain");
  root.addFilter(filterHolder, "/*", org.mortbay.jetty.Handler.DEFAULT);
  
 }
}
源代码在附件中,跑demo需要maven支持。

你可能感兴趣的:(spring,maven,mvc,Web,servlet)