spring-mvc整合

spring-mvc执行步骤:
在这里插入图片描述
具体的执行步骤:
1、首先用户发送请求————> 前端控制器,前端控制器根据请求信息(如 URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图中的 1、2 步骤;
2、页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在 Spring Web MVC 中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个 ModelAndView(模型数据和逻辑视图名);图中的 3、4、5 步骤;
3、前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图中的步骤 6、7;
4、前端控制器再次收回控制权,将响应返回给用户,图中的步骤 8;至此整个结束。

spring mvc框架的流程
在这里插入图片描述
具体的流程:
1、首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
2、DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求映射为 HandlerExecutionChain 对象(包含一个 Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、HandlerAdapter——> 处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个 ModelAndView对象(包含模型数据、逻辑视图名);
5、ModelAndView 的逻辑视图名——> ViewResolver, ViewResolver 将把逻辑视图名解析为具体的 View,通过这种策略模式,很容易更换其他视图技术;
6、View——> 渲染,View 会根据传进来的 Model 模型数据进行渲染,此处的 Model实际是一个 Map 数据结构,因此很容易支持其他视图技术;
7、返回控制权给 DispatcherServlet,由 DispatcherServlet 返回响应给用户,到此一个流程结束。

代码的实现以及操作的步骤:
首先在web.xml里面进行servlet的配置;配置springmvc-servlet.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-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
!--不用注解配置-->
	 <!--当请求地址是index.jsp的时候,会先到UserController这个类-->
    <bean name="/index" class="com.offcn.controller.UserController"></bean>
    <!--完成视图的对应-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!--配置后缀-->
        <property name="suffix" value=".jsp"></property>
     </bean>

    <!--注解来配置,扫描controller下面所有的包-->
    <context:component-scan base-package="com.offcn.controller"/>
    <!--开启注解驱动-->
    <mvc:annotation-driven/>
    <!--完成视图的对应-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!--配置后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

把数据传到controller里:
如果不用注解的方式,需要实现Controller这个接口;然后重写方法;
用注解的方式:
首先在类的上面加@Controller注解;然后在方法上面加@RequestMapping(“index”)括号里传的是访问的地址,方法的括号里传的是页面传进来的参数;

eg:
@RequestMapping("index")
public String index(@RequestParam(value = "userName",required = false)String userName){
        return "doIndex";
    }
    value代表网页拼接的键,require是否必须拼接,这里面要多传参数需要用@RequestParam继续写

另一种写法:

 //用注解的另一种写法;报405是因为请求方式和接受方式不统
@RequestMapping(value = "index",params = {"userName","pwd"},method = RequestMethod.GET)
 public String index(String userName,String pwd){
        return "doIndex";
    }

还有一种写法:

@PathVariable这个注解就是匹配uri上的任何参数,注解上的pid和pid一定要相同
   @RequestMapping(value = "index/{pid}")
   public String index(@PathVariable String pid){
       return "doIndex";
   }

把数据传到jsp上面:

	//用map的方式
    @RequestMapping("toDoIndex2")
    public String toDoIndex2(String userName, Map<String,Object> map){
        map.put("userName",userName);
        return "doIndex";
    }

    //常用的是以下两种
    // 返回我们要跳转的地址 view  model ,这个model不用实例化出来,直接传进去就好了
    @RequestMapping("toDoIndex1")
    public String toDoIndex1(String userName,Model model){
        //model里面来添加数据,同样是键值对的形式传递的
        model.addAttribute("userName",userName);
        return "doIndex";
    }

    //最终版链接数据库用
    @RequestMapping("toUpdate")
    public String toUpdate(@RequestParam(value = "userName",required = false)String userName,
                           @RequestParam(value = "userPwd",required = false)String userPwd){

        return "doIndex";
    }
    里面的参数是通过页面传进来的,需要的时候才写,记住参数是由方法参数传进来的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值