1.springmvc的整体结构以及流程

①.前端控制器:只需要在web.xml文件中配置即可

作用:接受请求,处理响应结果,转发器,中央处理器

②.处理器映射器:根据请求的url找到相应的Handler

③.处理器适配器:调用处理器Handler/controller的方法

④.处理器Handler(Controller)后端控制器,接受用户请求的数据,调用业务方法处理请求

⑤.视图解析器ViewResolver:视图解析,把逻辑视图转换为真正的物理视图

⑥.视图View:把数据展现给用户

 2.默认的注解

在不进行配置的的时候有默认配置的在此文件中,默认进行配置。

# 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
在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。
 
在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。
 
在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。
 
在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

 3.<mvc:annotation-driven>

默认是:基于注解映射器和基于注解的适配器

支持类型转换ConversionService

@NumberFormat,DateTimeFormate

@Validdate,JSR303校验

@RequestBody,@ResponseBody

 4.@RequestMapping

用来处理请求地址(URL)映射的注解,可以在类或者方法上面

如果在类上就代表所有的请求方法URL都必须有类上的URL地址作为父路径

属性:

①.value和path一样,指定请求的URL

method:指定请求的不同方式:GET,POST,PUT,DELETE....

②.指定请求和响应的MedlaType

  consumes:指定请求内容格式:Content-Type=application/json

  produces:指定响应内容格式:application/json;charset=UTF-8

③.

  params:指定request中必须包含某些参数值,包含方法处理

  handlers:指定request中必须包含指定的header,包含才能处理

同时还可以窄化请求映射:即把其写在类上面

@RequestMapping("/user")
public class user{
@RequestMapping("/login")
public String login(){
...
}
}

5.前端控制器url-pattern

前端控制器的配置:

①. * .扩展名,比如*.action,不会导致静态的资源文件被拦截的问题。但是不支持RESTFULL风格的编码

②. /  支持RESTFull风格,但是会导致静态的资源文件被拦截

③./* ,错误的方式,可以请求到Controller方法,但是跳转到JSP时会被拦截,JSP不能正常显示
②. /  支持RESTFull风格,但是会导致静态的资源文件被拦截
因为在tomcat文件中处理静态文件资源的servlet叫default,二default的映射路径就是    /.
 
启动项目的时候:
    1.启动Tomcat加载web.xml文件     /
    2.启动i项目时候 加载web.xml文件   /
 
项目中的web.xml文件覆盖了 Tomcat中的web.xml配置文件映射规则

解决方法:

1.在项目总的web.xml文件

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern> *.jsp</url-pattern>
<servlet-mapping> ...
jsp
png

2.使用mvc中的标签

在springmvc.xml文件中

<!--处理默认的静态资源的文件请求 -->
<mvc:default-servlet-handler/>
将mvc上下文中定义一个DefaultServletHttpRequestHandler,对所有的前端控制器的请求组筛选和盘查,
如果发现没有经过映射请求,就交给Tomcat的默认servlet来处理

3.资源映射

<!--资源映射 -->
<mvc:resources location="" mapping=“” />
自己来处理静态的资源,而且还多了很多的功能
方法2.是交给Servlet来处理

6.请求和响应

1.响应处理:

①.返回为void

     @RequestMapping("/test1")
public void test1(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{ //请求转发
req.getRequestDispatcher("").forward(req, resp); //请求的重定向
resp.sendRedirect(""); //设置共享数据
req.setAttribute("", ""); //输出json
resp.setContentType("text/json;charset=utf-8");
resp.getWriter().append("");
}
//返回为void文件下载
@RequestMapping("/test2")
public void test2(OutputStream out) throws IOException{
Files.copy(Paths.get("D:/Photo/bg.jpg"), out);
}

②.返回ModelAndView

 @RequestMapping("/test3")
public ModelAndView test3(){
ModelAndView mv = new ModelAndView();
mv.setViewName("/WEB-INF/views/test.jsp"); //设置共享的数据的key和value
mv.addObject("msg", "test3....");
//设置共享数据的value,此时会把value类型的首字母小写作为key key=string
mv.addObject("只有值的共享数据");
return mv; }
③.返回String
    //返回String
//需要结合Model进行结合使用
@RequestMapping("/test4")
public String test4(Model model){ model.addAttribute("msg", "return string"); return "test";
}

2.请求跳转

①.请求转发

原理:req.getRequestDispatcher("").forward(req, resp);
     //请求转发
//浏览器的地址不变还可以共享数据
@RequestMapping("/test5")
public String test5(Model model){ model.addAttribute("msg", "请求转发"); return "forward:/index.jsp";
}

②.URL重定向

地址栏改变,数据不能共享

//重定向
@RequestMapping("/test6")
public String test6(Model model){ model.addAttribute("msg", "请求重定向"); return "redirect:/index.jsp";
}
请求转发和重定向:
区别:
转发:地址栏不变,可共享数据
重定向:地址 改变,不能共享数据
访问资源的时候前面带上   /   表示绝对路径  从根路径去寻找资源
访问资源的时候不带    /    表示相对路径, 从上一级上下文进行寻找资源 
 
③.传统开发中,重定向的时候,进行两次的不同请求,所以不能进行数据的共享
假设要求重定向还要共享数据

note: Flash属性,只能使用从contrlooer 重定向到controller,不能到jsp

3.请求参数处理

①.数组

     //数组的形式
//接受一个参数有多个值得情况
@RequestMapping("/test4")
public void test4(Long [] ids){
System.out.println(Arrays.asList(ids));
}

②.pojo

     @RequestMapping("/test4")
public void test4(User user){
System.out.println(Arrays.asList(user));
}

springmvc小结(上)的更多相关文章

  1. SpringMVC文件上传实现

    SpringMVC(注解)上传文件需要注意的几个地方:1.form的enctype="multipart/form-data",这个是上传文件必须的2.applicationCon ...

  2. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  3. 【SpringMVC】使用SpringMVC进行上传文件!

    写在前面: 之前在上传文件的时候,使用的是commons-file-upload这个插件,非常方便,能控制每个文件的大小,总共大小,缓存,以及支持多个文件的同时上传,但是写一次上传文件的后台代码量太大 ...

  4. springmvc图片上传(兼容ie8以上,实时预览)

    html代码: <form id="uploadform" method="post" enctype="multipart/form-data ...

  5. springmvc文件上传下载简单实现案例(ssm框架使用)

    springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...

  6. 利用springMVC包装类上传多个文件

    前端JSP页面代码片段: <!-- springMVC包装类上传文件 --><form name="uploadFiles" id="uploadFil ...

  7. springMVC文件上传大小超过限制的问题

    [转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...

  8. 解决springMVC文件上传报错: The current request is not a multipart request

    转自:https://blog.csdn.net/HaHa_Sir/article/details/79131607 解决springMVC文件上传报错: The current request is ...

  9. 基于SpringMVC的上传文件实现

    基于SpringMVC的上传文件实现 1.项目源码 源码地址:upload 2.关键代码 @RequestMapping("/upload2") public void datal ...

  10. SpringMVC 之 上传文件

    一.需求: 利用SpringMVC实现上传文件的功能 二.思路: 1.我们可以在SpringMVC中,通过配置一个MultipartResolver来上传文件. 2.通过MultipartFile f ...

随机推荐

  1. 面向对象 OOP中的抽象类,接口以及多态

    [抽象类与抽象方法] 1.什么是抽象方法? 没有方法体{}的方法,必须使用abstract关键字修饰,这样的方法,我们称之为抽象方法. abstract function say() 2.什么是抽象类 ...

  2. redis(2)数据类型

    一.数据类型 redis的数据结构是key-value的键值对的形式,但是它和传统String-String的键值对形式不一样,它的value不仅仅是string类型,而是有着丰富的数据类型,如: 1 ...

  3. go install runtime/cgo: open /usr/local/go/pkg/darwin_amd64/runtime/cgo.a: permission denied

    在做更新时,收到下面提示: go get  github.com/astaxie/beego go install runtime/cgo: open /usr/local/go/pkg/darwin ...

  4. 如何去除vue项目中的 # — vue路由的History模式

    前言 在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash 模式,该模式下会将路径格式化为 #! 开头. 添加 mode: 'history' 之后将使用 HTML5 his ...

  5. K2P断流问题

    本帖最后由 yufei8051 于 2019-3-15 15:29 编辑 感谢 “zhc887”的指点,把这3个文件删除后(后面大神说不是删除是清除,我直接删掉貌似也正常,建议听大神的)从这两天的使用 ...

  6. SQL COUNT DISTINCT

    Create table trade ( sell_id int,  --卖家 buy_id int, -- 卖家 time date --交易时间 ) sell_id, buy_id, time s ...

  7. Luogu4234:最小差值生成树

    题面 luogu Sol 好久没写\(LCT\) 然而写跪了\(TAT\) 把边从小到大加入森林 如果形成环,就替换最小的边 如果已经是树,更新答案 \(LCT\)维护 # include <b ...

  8. 准备Activiti开发环境

    1.添加jar包 在activiti-5.13 -> wars 目录下 解压 activiti-rest.war ,导入WEB-INF\lib下所有包添加到classpath中. 由于使用的是O ...

  9. Python语言下图像的操作方法总结

    本章主要讲解 图像的读取方式.灰度化操作.图像转化为矩阵的方法 假设 strImgPath是图像的路径, img对象将图片读入到内存中 读取图像的第一种方式:skImage from skimage ...

  10. JsonCpp操作数组对象

    JsonCpp操作数组对象 概述 ​ Json格式数据中,除了简单的String类型和一些非String类型,也有像各种高级语言中的数组类型一般的数组对象,且Json数组在实际开发中使用频率也比较高, ...