• 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>
  • 相关阅读:
    window.open的火狐、谷歌兼容写法
    一个分数怎样约分?想知道的速度了。。。
    这是第二道题内容要求写一个银行的ATM系统 这个浪费了好长时间 ,遇到了许多问题,不过都解决了,上程序
    两个有理数相加(要求输入时以分数形式,输出时也以分数形式)
    linux centos 7.5下 源码编译安装 lua环境
    SecureCRT 6.7 vim高亮
    C#第一章笔记
    HTML5考试错题
    第九章博客
    第八章博客
  • 原文地址:https://www.cnblogs.com/sitian2050/p/11450515.html
Copyright © 2020-2023  润新知