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. https Java SSLException protocol_version的问题解决方法

    我们的业务代码里有需要用爬虫爬取商品的图片地址,然后在转到我们的服务器里的过程,中间当然少不了下载图片的过程,最近目标网站有些改变,就是之前http前缀的图片地址部分改成了https,然后就造成了一个 ...

  2. Nginx通关攻略

    Nginx是什么 没有听过Nginx?不要紧,一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unif ...

  3. ASP.NET MVC4 新手入门教程特别篇之一----Code First Migrations更新数据库结构(数据迁移)修改Entity FrameWork 数据结构(不删除数据)

    背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的 ...

  4. java 并发(五)---AbstractQueuedSynchronizer(4)

    问题 : rwl 的底层实现是什么,应用场景是什么 读写锁 ReentrantReadWriteLock 首先我们来了解一下 ReentrantReadWriteLock 的作用是什么?和 Reent ...

  5. How to limit Dialog's max height?

    1. We can make it to play trick in code. At Dialog's show function, after app has set contentView, w ...

  6. JavaScript里面的居民们3-去除空格和重复

    如代码,分别实现 diyTrim 及 removeRepetition 函数,并跑通代码中的测试用例. <!DOCTYPE html> <html> <head> ...

  7. JVM jmap

    需求:经常会因为OOM而导致系统挂掉,很多服务无法连接,所以准备了解一下. 参考:http://www.open-open.com/lib/view/open1390916852007.html 一. ...

  8. java 反射实现2个int变量值的交换

    import java.io.*;import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; ...

  9. 移动端 line-height 不垂直居中问题

    本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 一般情况下, 我们把 line-height 的值设置为 height 的 ...

  10. parted命令

    fdisk命令是针对MBR分区进行操作,MBR分区因为自身设计原因,不能处理大于2TB的硬盘,并且只能有4个分区. 针对大于2TB的硬盘,需要采用GPT分区,使用parted命令进行操作 parted ...