您的位置:首页 > 移动开发

springmvc学习笔记1_DispatcherServlet_HandlerMapping_HandlerAdapter_ViewResolver

2015-06-23 22:25 330 查看
参考源:

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>


记录学习的脚步


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: