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,输出都相同:
com.struts1.action.IndexAction@3c35fd
com.struts1.action.IndexAction@3c35fd
com.struts1.action.IndexAction@3c35fd
com.struts1.action.IndexAction@3c35fd
com.struts1.action.IndexAction@3c35fd
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,输出都不同:
com.struts2.action.IndexAction@1f327e
com.struts2.action.IndexAction@4e50ee
com.struts2.action.IndexAction@5f33b8
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);
}
}
输出都相同:
com.servlet.IndexServlet@4eb585
com.servlet.IndexServlet@4eb585
com.servlet.IndexServlet@4eb585
com.servlet.IndexServlet@4eb585
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);
}
}
输出相同:
com.spring.action.IndexAction@125b750
com.spring.action.IndexAction@125b750
com.spring.action.IndexAction@125b750
com.spring.action.IndexAction@125b750
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 {
}
}
输出相同:
com.filter.HelloFilter@10ac2a3
com.filter.HelloFilter@10ac2a3
com.filter.HelloFilter@10ac2a3
总结
struts1、struts2、spring mvc、HttpServlet、filter中只有struts2的action每次都不同,其他都相同,也就是说,其他都是单例的。
单例:struts1、spring mvc、HttpServlet、filter
非单例:struts2