Spring MVC体系结构:请求处理流程

Spring MVC最核心的类:

  • SpringMvc  MVC设计模式包括  Controller(控制层) Model(数据) View(视图)

图片中的英文分别表示为:

1. DispatcherServlet(前端控制器)

2.HandlerMapping(处理器映射器)

3.ModelAndView(数据和视图)

4.HandlerAdapter(适配器)

5.HttpMessageConverter(消息转换器)

6.ViewResolver(视图解析器)

7.Handler(处理器)


基于注解的控制器:1.Controller和View之间的映射

                               2.入参处理

                               3.出参处理

Controller和View之间的映射:

 1.@Controller                                 

 2.@RequestMapping(@GetMapping、@PostMapping、@DeleteMapping)                                 3.  <mvc : annotation-driver/>   

入参处理:  1.Servlet API入参

                  2.@RequestParam(name,value  required,defaultValue)   

                   3.@ModelAttribute   

出参处理:ModelAndView    Model  Map                          


 

一、搭建springMVC的环境的步骤:

1.首先导入springMvc的jar

<!--spring的依赖,springmvc-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-tx</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${spring.version}</version>
</dependency>

2.然后配置web.xml

<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>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

3.创建控制器(controller)

 【1】创建一个普通类,在这个类上加上@controller.

    【2】在类中创建方法,使用@RequestMapping("url")我们需要这个方法和URL形成映射。

    【3】方法的返回值:对应一个ModelAndView(数据和逻辑视图名)。

 4.一般视图解析器

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/jsp/"></property><!--prefix前缀-->

<property name="suffix" value=""></property><!--suffix后缀-->

</bean>

 
5.//上传
@RequestMapping("/uploadPage")
public  String uploadPage(){
    return "upload.jsp";
}

    @RequestMapping("/upload")
    @ResponseBody
public  String upload(String username, MultipartFile photo,HttpServletRequest request){

      String fileType=photo.getOriginalFilename();
      int index=fileType.lastIndexOf(".");//最后一个点的下标
      fileType=fileType.substring(index);
      String path=request.getSession().getServletContext().getRealPath("static"+File.separator+"uploadfiles");
      long filename=System.currentTimeMillis();//时间戳
        System.out.println(path);
      System.out.println(fileType);
      System.out.println(path+"\\"+filename+fileType);
     File file=new File(path+"\\"+filename+fileType);
    try {
        photo.transferTo(file);
    }catch (IOException e){
        e.printStackTrace();
    }
    return "上传成功";
}

二、1.解决视图到控制层的date类型的转换问题

@DateTimeFormat(pattern="yyyy-MM-dd")

2.解决Ajax请求的返回值问题  可以用@ResponseBody将数据写到响应体中

3.解决视图层到控制层的中文乱码问题,可以用以下代码来解决:

<!--页面中输入的中文,调到后端,出现乱码的解决方式-->
<filter>
  <filter-name>encodingFilter</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>

  <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
  </init-param>

</filter>

<filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

4.解决Ajax请求返回值的乱码和日期转换问题,控制层到视图层

注意:不要重复复制多个标签,如果重复,它只会执行最后一个标签 

5.拦截器

 

 

<!--拦截-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/hello/**"/><!--拦截hello底下所有的-->
            <mvc:exclude-mapping path="/hello/hello04"/> //排除,除了hello04都能进到主面
            <bean class="com.interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

注意:http://localhost:8080/xinxi2/hello/hello01分别代表的是 

//http协议

//localhost ip或者域名 应用服务器的(tomcat)

//8080 服务器的端口,tomcat 默认值是80

//xinxi2 应用服务下某个app的上下文

//hello/hello01 app中某个资源的路径

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值