struts1、struts2、spring mvc的action和HttpServlet、filter是否單例
阿新 • • 發佈:2019-01-08
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