springmvc学习笔记1_DispatcherServlet_HandlerMapping_HandlerAdapter_ViewResolver

22 篇文章 0 订阅
12 篇文章 0 订阅


参考源:

http://java.itcast.cn/news/20150512/13543033211.shtml 这是传智播客的燕青老师讲的 讲的很好 强烈推荐


springmvc 的 DispatcherServlet.properties配置文件 默认的处理器、适配器、视图解析器等

# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
	org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
	org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
	org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

相关的类图  用pd画了下  方便理解





SpringMvc流程  
 * 1、前端控制器--DispatcherServlet的doDispatch方法
 * 2、获取处理器映射器--mappedHandler = getHandler(processedRequest, false);
 * 3、获取处理器适配器--HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
 * 4、处理器处理 返回ModelAndView mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
 * 5、使用视图解析器进行渲染 processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
 * 					render(mv, request, response);
 * 					  view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);
 * 						view.render(mv.getModelInternal(), request, response);
 * 							renderMergedOutputModel(mergedModel, request, response);
 * 								exposeModelAsRequestAttributes(model, requestToExpose);


本文使用两种xml方式配置处理器映射器和处理器适配器 一种注解方式配置处理器映射器和处理器适配器


1、web.xml中配置springmvc的前端控制器

<!-- springmvc的前端控制器 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
	<servlet-name>springmvc</servlet-name>
	<url-pattern>*.action</url-pattern>
	</servlet-mapping>


2、springmvc.xml 配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

	<!-- 配置处理器适配器 SimpleControllerHandlerAdapter-处理器需要实现Controller接口 -->
	<bean
		class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
	<!-- HttpRequestHandlerAdapter-处理器需要实现HttpRequestHandler接口 -->
	<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
	<!-- 配置处理器映射器 BeanNameUrlHandlerMapping-使用bean的名字进行映射 -->
	<bean
		class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
	<!-- SimpleUrlHandlerMapping-使用bean的id和路径进行映射 -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/test1.action">testController1</prop>
			</props>
		</property>
	</bean>
	<!-- 视图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
		<!-- 配置视图解析器的前后缀 -->
		<!-- <property name="prefix" value="/WEB-INF/"></property>
		<property name="suffix" value=".jsp"></property> -->
		</bean>
	<!-- 配置处理器 -->
	<bean name="/test.action" class="com.undergrowth.controller.TestController1"></bean>
	<bean id="testController1" class="com.undergrowth.controller.TestHttpRequestController"></bean>

	<!-- 使用注解方式映射和适配处理器 -->
	<mvc:annotation-driven></mvc:annotation-driven>
	<context:component-scan base-package="com.undergrowth.controller"></context:component-scan>
</beans>


3、三种处理器实现

TestController1--针对BeanNameUrlHandlerMapping 和 SimpleControllerHandlerAdapter

TestHttpRequestController--针对SimpleUrlHandlerMapping 和 HttpRequestHandlerAdapter

TestAnnotationController--针对@Controller 和 @RequestMapping 注解 和注解解析器  <mvc:annotation-driven>

代码分别如下

package com.undergrowth.controller;

import java.util.ArrayList;
import java.util.List;

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

import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.view.InternalResourceView;

/**
 * 自定义处理器
 * 实现Controller接口
 * @author u1
 * 
 * SpringMvc流程  
 * 1、前端控制器--DispatcherServlet的doDispatch方法
 * 2、获取处理器映射器--mappedHandler = getHandler(processedRequest, false);
 * 3、获取处理器适配器--HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
 * 4、处理器处理 返回ModelAndView mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
 * 5、使用视图解析器进行渲染 processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
 * 					render(mv, request, response);
 * 					  view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);
 * 						view.render(mv.getModelInternal(), request, response);
 * 							renderMergedOutputModel(mergedModel, request, response);
 * 								exposeModelAsRequestAttributes(model, requestToExpose);
 */
public class TestController1 implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		//创建数据
		List<String> list=new ArrayList<>();
		list.add("qq");
		list.add("ww");
		ModelAndView modelAndView=new ModelAndView();
		modelAndView.addObject("list", list);
		modelAndView.setViewName("/WEB-INF/test/test.jsp");
		
		
		return modelAndView;
	}

}



package com.undergrowth.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

import org.springframework.web.HttpRequestHandler;

/**
 * 实现HttpRequestHandler接口
 * @author u1
 *
 */
public class TestHttpRequestController implements HttpRequestHandler {

	@Override
	public void handleRequest(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		// 创建数据
		List<String> list = new ArrayList<>();
		list.add("qq");
		list.add("ww");
		list.add("ee");
		request.setAttribute("list", list);
		request.getRequestDispatcher("/WEB-INF/test/test.jsp").forward(request, response);
	}

}


package com.undergrowth.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * 测试注解处理器映射器与处理器适配器
 * @author u1
 *
 */
@Controller
public class TestAnnotationController {

	@RequestMapping("/test3.action")
	public ModelAndView test(){
		List<String> list=new ArrayList<>();
		list.add("qq");
		list.add("ww");
		list.add("ee");
		list.add("rr");
		ModelAndView modelAndView=new ModelAndView();
		modelAndView.addObject("list", list);
		modelAndView.setViewName("/WEB-INF/test/test.jsp");
		return modelAndView;
	}
	
}



测试jsp  使用jstl

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${list }
</body>
</html>


还有一些EL表达式的整理




<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	${list }
	</br>
	<h1>EL11个隐含对象</h1>
	<ul>
		<li>${pageContext}</li>
		<li>${initParam.list}</li>
		<li>${param.list}</li>
		<li>${paramValues.list}</li>
		<li>${header }</li>
		<li>${headerValues }</li>
		<li>${cookie }</li>
		<li>${pageScope.list }</li>
		<li>${requestScope.list }</li>
		<li>${sessionScope }</li>
		<li>${applicationScope.list }</li>
	</ul>
	<h1>EL运算符</h1>
	<ul>
		<li>${5+5 }${4-5 }</li>
		<li>${5*5 }${0/5 }</li>
		<li>${5%5 }</li>
		<li>${5==5 }</li>
		<li>${5<=5 }</li>
		<li>${5!=5 }</li>
		<li>${5>=5 }</li>
		<li>${5<5 }</li>
		<li>${(5>5) and (5<=5) }</li>
		<li>${(5>5) or (5<=5) }</li>
		<li>${not (5<=5) }</li>
		<li>${empty (5<=5) }</li>
		<li>${empty null }</li>
		<li>${ 4>5?true:false}</li>
	</ul>
	<h1>.(点运算符用于访问对象的特性,当访问对象时,属性需要getter)和[]运算符(用于检索数组和集合的元素)</h1>
	<ul>
		<li>${requestScope.list }</li>
		<li>${requestScope["list"] }</li>
	</ul>
	<h1>查看pageContext的隐含对象</h1>
	<ul>
		<li>${pageContext.out }</li>
		<li>${pageContext.request }</li>
		<li>${pageContext.response }</li>
		<li>${pageContext.exception }</li>
		<li>${pageContext.page }</li>
		<li>${pageContext.session }</li>
		<li>${pageContext.servletContext }</li>
		<li>${pageContext.servletConfig }</li>
	</ul>
</body>
</html>


记录学习的脚步




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC 的 XML 配置主要包括: 1. DispatcherServlet 配置:配置 DispatcherServlet 的初始化参数、映射 URL 等。 2. ViewResolver 配置:配置视图解析器,用于将逻辑视图名解析为具体的视图。 3. HandlerMapping 配置:配置处理器映射器,用于将请求映射为具体的处理器。 4. Controller 配置:配置控制器,即具体的请求处理器。 5. Interceptor 配置:配置拦截器,可以在请求处理之前或之后进行一些特定的操作。 以下是一个简单的 Spring MVC 的 XML 配置示例: ```xml <!-- 配置 DispatcherServlet --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置初始化参数 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 配置 DispatcherServlet 映射 URL --> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 配置视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置处理器映射器 --> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!-- 配置控制器 --> <bean name="/hello" class="com.example.HelloController" /> <!-- 配置拦截器 --> <mvc:interceptors> <bean class="com.example.LogInterceptor" /> </mvc:interceptors> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值