一、springMVC流程图省略

二、写一个简单的springmvc的demo来说明

2.1引入springMVC相关的jar包

2.2配置DispatcherServlet 在web.xml

<servlet>
<!-- springmvc的配置文件必须在【servlet-name】-servlet.xml -->
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- DispatcherServlet加载指定的springmvc的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC-annotation.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

2.3配置springmvc的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置一个handlerMapping 如果自己不配置handlerMapping 会默认有一个handlerMapping
bean:表示对于什么什么的一个类
ctrl+shift+t:查找某个类的源码及路径
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <!-- 注册自己的controller类 -->
<bean name="/my.do" class="com.zhiyou100.xz.controller.MyController1"></bean> <!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

2.4创建Controller类

public class MyController1 extends AbstractController{

    @Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
ModelAndView mv=new ModelAndView();
mv.setViewName("login");// /WEB-INF/view/login.jsp
mv.addObject("username", "Hello World!");//功能类似于setAttribute 在request中
System.out.println("====mycontroller1====");
return mv;
} }

三、springmvc的流程

  1. 客户发出请求。http://localhost:8080/springmvc-01/my.do
  2. 到达web.xml文件中 DispatcherServlet.查看是否符合url的要求
  3. DispatcherServlet就会查询springmvc的配置文件。找HandlerMapping.  根据bean的名称查找相对应的controller
  4. 找到我的MyController类。执行该类中的handleRequestInternal方法
  5. 根据返回的modelAndView在找springmvc配置文件中视图解析器
  6. 把viewName和prefix以及suffix做了一个拼接。把拼接的页面展示给客户

四、常见的HandlerMapping

4.1 BeanNameUrlHandlerMapping 根据bean标签的名称找到对应的Controller类

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置一个handlerMapping 如果自己不配置handlerMapping 会默认有一个handlerMapping
bean:表示对于什么什么的一个类
ctrl+shift+t:查找某个类的源码及路径
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <!-- 注册自己的controller类 -->
<bean name="/my.do" class="com.zhiyou100.xz.controller.MyController1"></bean> <!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

4.2 ControllerClassNameHandlerMapping 根据controller类的名字找到对应的Controller。

<!-- 根据controller类的名字查找对应的Controller类
浏览器的URL中:类中除了Controller首字母大写外,其他都小写,例如myController/mycontroller1
--> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean> <!-- 注册自己的controller类 -->
<bean class="com.zhiyou100.xz.controller.MyController1"> </bean>  

4.3 SimpleUrlHandlerMapping 根据bean的id查找对应的Controller类。

 <!-- 根据id查询相应的controller类
这里包含了id与url地址的映射关系
--> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping ">
<property name="mappings">
<props>
<prop key="/a.do">my1</prop>
<prop key="/b.do">my2</prop>
</props>
</property>
</bean> <!-- 注册自己的controller类 -->
<bean id="my1" class="com.zhiyou100.xz.controller.MyController1"></bean>
<bean id="my2" class="com.zhiyou100.xz.controller.MyController2"></bean>

五、使用注解来替代配置信息

5.1 添加aop的jar包

5.2 创建Controller类

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller //等价于<bean class="com.zhiyou100.xz.controller.annotation.MyController1">
public class MyController1 {
@RequestMapping("/list.do") //RequestMapping:表示的就是你的访问地址
public String list() {
System.out.println("查询所有");
return "login";
} }

5.3 在springmvc的配置文件中配置注解(包扫描和开启注解驱动)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
<!-- 添加注解配置时要先添加以下四个链接 -->
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!-- 1. 包扫描:扫描注解所在的包 component-scan:部件扫描-->
<context:component-scan base-package="com.zhiyou100.xz.controller.annotation"/>
<!-- 2.开启注解驱动AnnotationHandlerMapping -->
<mvc:annotation-driven/> <!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

六、通过springmvc来完成接受的参数

import com.zhiyou100.xz.controller.bean.User;

@Controller
@RequestMapping("/user")
public class MyController1 {
@RequestMapping("/list.do") //RequestMapping:表示的就是你的访问地址
public String list(String name,int age) { //参数一定要和请求的参数名相同
System.out.println("name:"+name+";age:"+age);
return "login";
}
@RequestMapping("/list2.do") //RequestMapping:表示的就是你的访问地址
public String list(User user) { //参数一定要和请求的参数名相同
System.out.println(user); //请求的参数名要和实体类中的属性名相同
return "login";
}
}

注意:

接受参数时出现乱码。使用过滤器。(自定义的过滤器 也可以使用springmvc提供的过滤器)

1.使用springmvc提供的过滤器,在spring-web-4.2.2.RELEASE.jar下的org.springframework.web.filter.CharacterEncodingFilter.class中

在web.xml中配置过滤器

<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2.自定义的过滤器

先创建一个EncodingFilter.java

public class EncodingFilter implements Filter{

    @Override
public void destroy() {//过滤销毁时调用 } @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {//过滤功能
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
} @Override
public void init(FilterConfig arg0) throws ServletException {//过滤初始化时调用
System.out.println("过滤初始化时调用");
} }

在web.xml中配置过滤器

<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.zhiyou100.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

springMVC学习日志一的更多相关文章

  1. springmvc学习日志四

    一.回顾 1.文件上传 1.1引入fileupload的jar包 1.2在springmvc的配置文件中引入CommonsMutilpartResolver文件上传解析器 1.3在控制层在写入代码 2 ...

  2. springmvc学习日志三

    一.文件的上传 1.首先在lib中添加相应的jar包 2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名 <body> & ...

  3. springmvc学习日志二

    一.当接受的参数为日期类型时 1.建立jsp页面,向Controller类传入参数 1.1当传入的参数为单个时 <body> <form action="user/toDa ...

  4. springmvc学习笔记--REST API的异常处理

    前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...

  5. springmvc学习笔记(简介及使用)

    springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...

  6. SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...

  7. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  8. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  9. SpringMVC学习系列-后记 解决GET请求时中文乱码的问题

    SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...

随机推荐

  1. vs2013:asp.net网站发布

    1."生成"菜单"生成网站" 2."发布网站" 3.配置文件--自定义,名称 4.发布方法:文件系统,确定目标位置(另外的) 5.配置选择r ...

  2. 团队开发day02

    进行android的UI界面设计,设计圆角输入框和圆形按钮, 以及点击的水滴效果 遇到问题,新建的drawable布局没有达到预期的效果,圆形按钮的 背景想设置为图片,但是发现会遮盖住水滴效果,改用新 ...

  3. Spark编程基础_RDD编程

    RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.RDD具有数据流模型的特 ...

  4. final修饰符(4)-"宏替换"

    对于一个final变量来说,不管它时类变量,实例变量还是局部变量,只要满足三个条件,这个final变量就不再是一个变量,而是一个直接量.final变量的一个重要用途,就是定义"宏变量&quo ...

  5. 如何使用Scala的ClassTag

    Scala官方文档中对于ClassTag的定义如下: ClassTag[T]保存着在运行时被JVM擦除的类型T的信息.当我们在运行时想获得被实例化的Array的类型信息的时候,这个特性会比较有用. 下 ...

  6. 每天五分钟Go - 变量

    变量的声明 1.使用关键词 var 定义,声明后若不赋值,则使用默认值 var 变量名 [变量类型] [=初始值] var a,b,c string var e,f int = 0,1 声明时,如果省 ...

  7. 流暢的python---函數闭包

    一.函数的定义及其应用所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤1.定义函数–封装独立的功能2.调用函数–享受封装的成果函数的作用:在开发时,使用函 ...

  8. C++第四十三篇 -- VS2017创建控制台程序勾选MFC类库

    用VS2017创建EXE带MFC类库方法 1. File --> New --> Project 2. Windows桌面向导 3. 勾选MFC类库 4. 创建成功 如果项目编译出错 1. ...

  9. document.all("div).style.display = "none"与 等于""的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Java互联网架构师系统进阶课程学习 (4)【享学】

    Java互联网架构师系统进阶课程学习 (4)[享学] 4.显式锁和AQS   显式锁 Lock接口和核心方法 Lock接口和synchronized的比较 synchronized 代码简洁,Lock ...