初步接触springMVC

Posted boxmonster

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初步接触springMVC相关的知识,希望对你有一定的参考价值。

1.mvc的流程
2.springmvc的流程
3.写一个简单的springmvc的demo
4.handlerMapping的种类
5.使用注解替代HandlerMapping的配置信息
6.通过springMVC来接收参数
 
一、mvc模式流程
技术图片
 
 
 
二、springmvc的流程
1.springmvc,mybatis在mvc中起的作用
技术图片

 

 

2.springmvc的流程

技术图片

 

 

三、写一个简单的springMVC的demo

1.引入springMVC相关的jar包
    spring-beans    spring-context    spring-core  
    spring-web    spring-webmvc    spring-expression
    commons-logging
    缺少jar包提示:
    Caused by: java.lang.NoClassDefFoundError:Lorg/apache/logging/Log;    ==>    commons-logging.jar
2.生成web.xml并配置DispatcherServlet
  在没有插件的前提下可以ctrl+shift+t检索获取完整类名
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--
        init-param:手动配置读取的文件,DispatcherServlet(前端控制器)默认读取WEB-INF/servletName-servlet.xml
                   例如上面的servlet对应springMVC配置文件位置和命名必须为WEB-INF/springMVC-servlet.xml
                   没有手动配置,而配置名页不规范会报status500错误
-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springMVC.xml</param-value>
            </init-param>
<!--
        load-on-startup:当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
                        当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载;
                        正数的值越小,启动该servlet的优先级越高;
                        将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序
             advantages:如果初始化过程失败,则容器会提示启动失败,能够提前知道相关错误;
                        将初始化servlet的工作转移到容器启动过程,只要启动成功,就可立即响应web请求
-->
            <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>*.do</url-pattern>    <!--表示处理所有.do后缀的页面请求-->

<!--    拦截所有的请求(要注意防止静态资源的放行,如jpg,css,js,jquery,需要在springMVC配置文件中添加<mvc:default-servlet-handler/>) 
        <url-pattern>/</url-pattern>  
-->  
    </servlet-mapping>

3.springMVC配置文件(WEB-INF文件夹下)
    step1.配置HandlerMapping类(可以不写,已经自动配置)    //将来用AnnotationHandlerMapping注解形式居多
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
        </bean>
    step2.写controller类继承AbstractController并重写方法
        public class FirstController extends AbstractController     //返回类型可以是ModeAndView, String,Java对象(json)
            @Override    //HttpServletRequest,HttpServletResponse如果报错可能没有配置Tomcat==>buildpath...
            protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception 
                ModelAndView mv=new ModelAndView();
                mv.setViewName("login");    //跳转界面 WEB-INF/view/logoin.jsp
                mv.addObject("user","user");    //保存数据
                return mv;
            
        
    step3.springMVC-servlet.xml注册controller类
        <bean id="/my.do" class="com.zhiyou100.yj.controller.FirstController">    <!--处理my.do请求-->
        </bean>
    step4.配置视图解析器
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/view/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>

4.操作过程
    step1.客户发出请求 http://localhost:8080/SpringMVC/my.do
    step2.到达web.xml中DispatcherServlet,查看是否符合拦截url的要求
    step3.DiapatcherServlet查询springMVC的配置文件,找打HandlerMapping
    step4.根据bean的名称查找响应的Controller    //这里使用的是BeanNameUrlHandlerMapping
    step5.进入匹配的Controller类,执行重写的handleRequestInternal方法    //将来会使用注解的形式
    step6.根据返回的modelAndView,使用springMVC配置文件中的视图解析器    //把viewName与prefix及suffix做拼接,呈现给用户拼接后的页面

5.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">

    <bean  class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    </bean>

    <bean id="/my.do"  class="com.zhiyou100.yj.controller.FirstController">
    </bean>

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

</beans>

四、handlerMapping的种类

1.根据根据bean的名称==>BeanNameUrlHandlerMapping(默认)
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    </bean>
    <bean id="/my.do" class="com.zhiyou100.yj.controller.FirstController">
    </bean>

2.根据controller的类查找对应的controller类==>controllerClassNameHandlerMapping
<!--
    地址栏:类名除了Controller其他一律小写.do,如:localhost:8080/SpringMVC/secondController.do
-->
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
    </bean>
    <bean class="com.zhiyou100.yj.controller.SecondController">
    </bean>

3.id查询url地址与id对应的关系==>SimplerUrlHandlerMapping
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/a.do">dowhat</prop>
                <prop key="/b.do">dowhat</prop>
            </props>
        </property>
    </bean>
    <bean id="dowhat1" class="com.zhiyou100.yj.controller.SecondController">
    </bean>
    <bean id="dowhat2" class="com.zhiyou100.yj.controller.SecondController">
    </bean>

五、使用注解替代HandlerMapping的配置信息

1.添加spring-aop的jar包
2.springMVC配置文件
    <!-- 1.包扫描:扫描注解所在的包 -->
    <context:component-scan base-package="com.zhiyou100.yj.controller.annotation"/>
    <!-- 2.开启注解驱动 -->
    <mvc:annotation-driven/>
3.创建Controller类(此时类不再需要继承AbstractController)
    @Controller    //注册Controller类
    @RequestMapping("user")    //为类加注解,访问地址要加类名
    public class UserController 
        @RequestMapping("getInfo.do")    //访问地址
        public String getInfo(User user)     //参数过多,可以封装到实体类,请求参数名一定要和实体类中属性名相同(不匹配项为null)
            System.out.println("获取信息");
            return("login");
        
      
        @RequestMapping("setInfo")
        public ModelAndView setInfo(User user) 
            ModelAndView mv=new ModelAndView();
            mv.setViewName("login");
            mv.addObject("user","user");
            return mv;
        
     

六、通过spring接收提交的参数

1.超链接传参:
    <a href="user/getInfo.do?name=zs"></a>
2.Controller接收参数
    @Controller
    @RequestMapping("user")
    public class UserController 
        @RequestMapping("getInfo.do")
        public String getInfo(String name)     //参数一定要和请求的参数名相同
            System.out.println("name:"+name);
            return("login");
        
3.防止接收的参数乱码
    方法一:手栋设置添加编码过滤器
    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 filterConfig) throws  ServletException 
        
    

    web.xml下配置
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>com.zhiyou100.yj.filter.EncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    方法一:spring封装的过滤器==>spring-web==>org.springframework.web.filter==>CharacterEncodingFilter.class
    配置文件经过编译后依然可以更改,而自己写的类都会变成字节码,用spring框架的内置过滤器可以对编码自由更改
    <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>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

 

 

 


 

 

以上是关于初步接触springMVC的主要内容,如果未能解决你的问题,请参考以下文章

函数初步接触

初步接触LVS

ActiveMQ初步接触-编写Demo

Qt学习笔记1.初步接触

Promise 初步接触

EventBus的初步接触