1. 程式人生 > >struts1、struts2、spring mvc的action和HttpServlet、filter是否單例

struts1、struts2、spring mvc的action和HttpServlet、filter是否單例

struts1

package com.struts1.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class IndexAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		System.out.println(this);
		return mapping.findForward("success");
	}

}

每次執行execute,輸出都相同:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]


struts2

package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class IndexAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	@Override
	public String execute() throws Exception {
		System.out.println(this);
		return SUCCESS;
	}

}


每次執行execute,輸出都不同:

[email protected]
com.struts2.[email protected]
[email protected]


HttpServlet

package com.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class IndexServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println(this);
	}

}

輸出都相同:
[email protected]
[email protected]
[email protected]
[email protected]


spring mvc

package com.spring.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.ModelAndView;

@Controller
public class IndexAction {

	@RequestMapping(value = "index")
	public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
		System.out.println(this);
		ModelMap modelMap = new ModelMap();
		return new ModelAndView("success", modelMap);
	}
}


輸出相同:
[email protected]
[email protected]
[email protected]
[email protected]

filter

package com.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloFilter implements Filter {

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		chain.doFilter(request, response);
		System.out.println(this);
	}

	public void init(FilterConfig fConfig) throws ServletException {
	}

}

輸出相同:
[email protected]
[email protected]
[email protected]


總結

struts1、struts2、spring mvc、HttpServlet、filter中只有struts2的action每次都不同,其他都相同,也就是說,其他都是單例的。

單例:struts1、spring mvc、HttpServlet、filter

非單例:struts2