spring mvc框架结构浅析(一)

1.首先我们从页面开始(这里是jsp页面),简单的请求部分:

transList.jsp:

var store_url = "<%=basePath%>/TransListAction.do?method=view";
			var store = new Ext.data.Store({
		        proxy:new Ext.data.HttpProxy({
		            url:store_url
		        }),
var doFind = function(str){
					store.load({params:{start:0,limit:pageSize}});
				};

 上面代码是做了一个简单的查询,我们只关注web请求地址:

   "<%=basePath%>/TransListAction.do?method=view"

可以看出目标地址是TransListAction处理类,后缀为.do,参数为method=view

2.继续往下看,

TransListAction类:

package com.boc.transList.action;

@Controller
@RequestMapping("/TransListAction.do")
public class TransListAction extends BaseAction {

	private static int PAGESIZE = 20;
	
	@Autowired
	private ITransListService TransListService;		
	@RequestMapping(params = "method=view")
	public String view(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		String findCondition = request.getParameter("jsonData");
		int start = Integer.parseInt(request.getParameter("start"));
	    int limit = Integer.parseInt(request.getParameter("limit"));
	    
	    
	    Pager<TransListVO> pager = TransListService.getTransList(findCondition, start, limit);
		String jsonString = "{'totalCount':"+pager.getTotalRows()+",'root':"+this.listToJsonString(pager.getResultList())+"}";
		try {
			response.setCharacterEncoding("utf-8");
			PrintWriter out = response.getWriter();
			out.print(jsonString);
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
				
		return null;
	}
		 
}


 其实这里的TransListAction类就是一个servlet,大家都知道servlet必须要注册,这样web请求页面才能找到,那spring mvc是怎么做的啦?

3.下面我们来看看配置文件web.xml

扫描二维码关注公众号,回复: 770247 查看本文章

 web.xml

<!-- 配置Spring MVC ,这是SpringMVC的主控程序-->
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>
			org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
<!--配置ApplicationContext配置文件的路径,可以配置多个,用","分割就行,用于后面加载spring 主配置文件-->
<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:applicationContext.xml,classpath*:applicationContext_test.xml</param-value>
	</context-param>

 我们来看看这个配置文件:首先创建了一个名为action的servlet,对应的类为:org.springframework.web.servlet.DispatcherServlet,而不是上面所说的TransListAction类,这里就是spring mvc 的不同之处,*.do这里意思是过滤所有后缀为.do的请求,目的是为了减少配置量和增强扩展性,灵活匹配,处理多组请求等等,我们来简单说说这里,大家都知道web.xml是大多数框架的门户,当web.xml接收到后缀为.do的请求时,请求就会交给org.springframework.web.servlet.DispatcherServlet,该servlet(action)将寻求具体的HandleMapping实例,以获取对应当前请求具体的实现类,即:org.springframework.web.servlet.Controller,这里就是TransListAction类了,org.springframework.web.servlet.HandleMapping是spring mvc专门用来管理web请求与具体Controller实现类之间的映射匹配的(后面再作深入)。这里我就不多说了,大家可以多参考Spring API。

配置文件后面几句是配置spring 的主配置文件applicationContext文件路径,这个文件也是可以配置多个的,方便以后加载。下一章继续...

猜你喜欢

转载自houpengwdf.iteye.com/blog/1226522