SpringMVC基本介绍及用法

什么是SpringMVC

首先来说说什么是MVC,web项目执行的流程是用户发送一个请求,如何解析用户的输入,执行相关的逻辑,跳转页面,这就需要控制层Controller来完成,在请求的过程中,数据被封装在domain对象中,这个对象就是数据模型层Model,在请求返回页面这个即使视图层View
SpringMVC就是一个连接用户视图,控制器,数据模型层的一个轻量级web框架,其目的是将web的开发模块化

SpringMVC的请求流程

1.用户发起一个request请求,此请求会被前端控制器处理(DispatcherServlet)
2.前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)去查找Handler,可以一句注解或xml的配置去查找
3.处理器映射器(HandlerMapping)根据配置找到相应的Handler,返回给前端控制器(DispatcherServlet)
4.前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter)去执行相应的Handler(Controller)
5.处理器适配器(HandlerAdapter)执行Handler
6.Handler执行完毕返回给处理器适配器(HandlerAdapter)一个ModelAndView
7.处理器适配器(HandlerAdapter)接受到Handler返回的ModelAndView后,将其返回给前端控制器(DispatcherServlet)
8.前端控制器(DispatcherServlet)接受到ModelAndView后,会请求视图解析器(View Resolver)对视图进行解析
9.视图解析器(View Resolver)根据View信息匹配到相应的视图结果,反馈给前端控制器前端控制器(DispatcherServlet)
10.前端控制器(DispatcherServlet)接受到View具体视图后,进行视图渲染,将Model中的模型数据填充到View视图中的request域,生成最终的视图(View)
11.前端控制器(DispatcherServlet)向用户返回请求结果

怎么使用

1.在web.xml中配置DisapatcherServlet

 <!-- 配置dispatherservlet -->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

在web.xml中配置了DispatcherServlet,web启动就会找xxx-servlet.xml文件,没有配置这个文件会报错
可以在web.xml自定义xxx-servlet.xml的文件名,文件位置

<init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
</init-param>

2.接下来就是编写核心配置文件xxx-servlet.xml
这个核心置文件就是配置前面流程中的各个组件

<?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:tx="http://www.springframework.org/schema/tx" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.crc.." />
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <!-- 配置handlermapping -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    <!-- 配置handleradapertor -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
    <!-- 配置ModelAndView -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsps/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

这里context:component-scan base-package=”com.crc..” 和org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping/org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter是用注解的配置,在service代码中可以加上@Controller代表这个类是控制器,不然需要做以下的配置

<!-- 配置controller  -->
    <bean name="/hello.do" class="com.crc.controller.LoginController">
    </bean>

3.我们可以用注解的方式了解以下简单的登陆操作
登陆的jsp

<body class="body">
  <div class="context" >
      <div class="form">
      <h1>用户登陆</h1>
      <form action="login.do" method="post" id="loginform" onsubmit="return validate()">
      <table>
      <tr><td>用户名:</td><td><input type="text" id="name" name="name" fs="请输入用户名"></td></tr>
      <tr><td>密码:</td><td><input type="password" id="password" name="password" fs="请输入密码"></td></tr>
      </table>
      <input class="login-button" type="submit" value="登录">
      <a href="toregister.do"><input type="button" class="login-button" value="注册"></a>
      </form>
      </div>
  </div>
 </body>

Controller

@Controller
public class LoginController{
    @Autowired
    private UsersService usersService;
    @RequestMapping("/login.do")
    public String Login(Users users,Model model,HttpServletRequest request){
        Users u=usersService.get(users.getName());
        System.out.println("1===="+u);
        if (u==null) {
            model.addAttribute("errorMsg", "用户名错误");
            return "login";
        }else if(u.getPassword().equals(users.getPassword())){
            request.getSession().setAttribute("user", u);
            return "main";          
        }else
            model.addAttribute("errorMsg", "密码错误");
            return "login";
        }
}

因为上面配置了自动扫描,当DispatcherServlet
接受到request请求login.do,就会请求HandlerAdapter找到@Controller里面的@RequestMapping(“/login.do”)的方法,
完成逻辑处理再返回信息给DispatcherServlet,返回的是main,则通过这段代码

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsps/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

拼接成/WEB-INF/jsps/main.jsp,再这个路径下找到jsp界面,返回给用户
4.页面乱码问题
我们可以再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>

猜你喜欢

转载自blog.csdn.net/qq_29485643/article/details/81605511