springMVC学习日志一

一、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>
原文地址:https://www.cnblogs.com/sitian2050/p/11450515.html