struts2针对几种场景的配置

阅读更多
首先是web.xml的配置

		struts2
		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	
	
	
		struts2
		*.action
	  
		
	  
        CXFServlet  
        org.apache.cxf.transport.servlet.CXFServlet  
        1  
      
  
      
        CXFServlet  
        /webservice/*  
    

我用的struts2的版本是2.3.4.1,所以这里的应该是StrutsPrepareAndExecuteFilter,不再是旧的DispatcherFilter

另外这里的,我配的不是/*,而是*.action,目的是不把特殊路径的请求,交给struts2处理,比如下面的/webservice/*,就不要经过struts2

下面是struts.xml的配置

		
		
			
			
			
			
				
				
			
			
		
		
		
		
		
             ../login.action
        
		
		
			../jsp/bookManage/bookList.jsp
		
		
		
			list.action
		
		
		

		
			
				true
			
		
		
	

以上的配置有简化,分别针对4种不同的场景:

第一种,Action处理后跳转到jsp页面

			../jsp/bookManage/bookList.jsp
		

这里默认的resultType是dispatcher

对应的Action写法
public String list() {
		books = bookService.getAllBooks();
		return SUCCESS;
	}


第二种,Action处理后,流转到另外一个Action,相当于Servlet规范中的redirect

			list.action
		

这里的resultType是redirectAction

对应的Action写法
public String delete() {
		bookService.deleteBookById(id);
		return SUCCESS;
	}


第三种,在Action中直接写响应,不流转


这里就没有元素

对应的Action写法
public void originAjax() throws IOException {
		HttpServletResponse response = ServletActionContext.getResponse();
		PrintWriter writer = response.getWriter();
		writer.print("hello " + ajaxField);
		writer.flush();
		writer.close();
	}


第四种,通过json插件,返回json字符串,不流转

			
				true
			
		

这里的resultType是json,这种方式本质上和第三种一样

对应的Action写法
public String pluginAjax() {
		ajaxField = "hello " + ajaxField;
		return SUCCESS;
	}

另外,这里面配置了拦截器、拦截器栈、全局result,可以把这些东西提取到公共的package里,让其它的业务子package来extends

你可能感兴趣的:(struts2,resultType)