初识 spring-mvc

spring-mvc 介绍

  • Spring-mvc 属于表现层的框架,他是Spring 框架的一部分,作用就是controller(控制层)
  • spring mvc 的执过程:
    • 客服端发送请求 dispacherServlet
    • 把相应的结果请求给 HandlerMapping (HanlerAdapter 进行处理(处理( 比如到那个界面,数据返回给那个界面,对数据哟啊做哪些处理(modleAndView(里面包括了要处理的数据、视图))
    • 把这个 modleAndView 给你的 dispacherServlet 给你的视图渲染器 --> 最后还会到 dispacherServlet 最后用户才会看到一个好的网页)))
  • 里面有几个核心的对象:
    • 第一个是:dispacherServlet
    • 第二个是:HandlerAadapter
    • 第三个是:你的视图渲染器
      在这里插入图片描述
  • springmvc 的框架的项目
    • 1.导入相关的 jar spring-webmvc-3.2.13.RELEASE.jar
    • 2.核心 xml文件 springmvc.xml 配置,请求的地址
    • 3.配置 它统一的前缀(目录的文件),后缀(.jsp.html)
      • 核心配置文件在那里加载 web.xml (核心配置文件要配置到 web.xml)
      • 在这里面配置 servlet spring-webmvc-3.2.13.RELEASE.jar
开始配置servlet 配置在 web.xml
		<!--开始配置servlet servlet-name 取一个名字-->
         <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>
             <!-- 立刻加载-->
             <load-on-startup>1</load-on-startup>
         </servlet>
         <servlet-mapping>
             <servlet-name>springmvc</servlet-name>
             <url-pattern>/</url-pattern>
         </servlet-mapping>

springmvc-srevlet 非注解 与 注解

		<!--当你的请求地址 是 index.html 的时候 就会到 UserController 类 -->
        <bean name="/index.html" class="com.offcn.controller.UserController"></bean>

        <!-- 扫描 controller 下所有的包-->
        <context:component-scan base-package="com.offcn.controller" />
        <!--开启注解驱动-->
        <mvc:annotation-driven />

        <!-- 完成视图的对应-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--开始配置前缀 prefix 前缀-->
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <!--开始配置后缀 suffix 后缀-->
            <property name="suffix" value=".jsp"></property>
        </bean>
非注解
public class UserController implements Controller{
 /*这个方法,当你的客户端发送请求的 url 地址,跟这个类对应上了就会走这个方法
    * (HandlerMapping)
    * */
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        //就是你要跳转到界面
        return new ModelAndView("doIndex");
    }
}

Contoller层的各种实现方式

@Controller
/*@RequestMapping("/userController")*/
public class UserController {
    //8080/UserController/index
    /*把页面的数据 放到你的Controller*/
    /*如果我现在要传递一个参数  userName=123456*/
    /*@RequestMapping 代表你请求的地址*/
   *@RequestMapping("index")
    //value 代表你网页拼接的键,request 这个代表是否必须拼接这个参数,false代表可以拼接,也可以不拼接
    public String index(@RequestParam(value = "userName",required = false) String userName){
        System.out.println(userName);
        //返回的界面
        return "doIndex";
    }


    /*-------------------------------------------------------------*/
    //必须传参数, method 设置你的请求方式
    //报 405 的错误是因为你的请求方式跟你的接受方式不统一
    /*value = "/index/*.do" 只要你的index 下面的 , 以 .do结尾的都能 匹配到 */
    @RequestMapping(value = "/index/*.do",params = {"userName"},method = RequestMethod.GET)
    /*----------------------------------------------------------------*/
    // PathVariable 这个注解就是匹配你 uri 上的任何参数,注解上的pid 跟你的pid
    @RequestMapping(value = "/index/{pid}/{userName}")
    public String index(@PathVariable String pid,@PathVariable String userName){
        System.out.println(pid+"\t"+userName);
        return "doIndex";
    }

    /*---------------------------------------------------------------*/
    //把 controller 的数据传到 jsp页面中
    @RequestMapping("/toDoIndex")
    public ModelAndView toDoIndex( String userName){
        //获得userName
        //构建 modelAndView 对象
        ModelAndView modelAndView = new ModelAndView();
        //把值方到modelAndView(以键值对的形式来传递的)
        modelAndView.addObject("userName",userName);
        //把你跳转的界面放到 modelAndView 里
        modelAndView.setViewName("doIndex");

        return modelAndView;
    }

    /*------------------------和最终版 一样 常用---------------------------*/
    //返回就是我们要跳转的地址 view  model, 这里的model 不用实例化出来, 直接传进去
    @RequestMapping("/toDoIndex1")
    public String toDoIndex1(String userName, Model model){
        // model 里面来添加数据// 同样也是以键值对来传递参数的
        model.addAttribute("userName",userName);
        return "doIndex";
    }

    /*------------------------------------------------*/
    /*通过 map 把数据传过去*/
    @RequestMapping("/toDoIndex2")
    public String toDoIndex2(String userName, Map<String,Object> map){
        map.put("userName",userName);
        return "doIndex";
    }

    /*---------------------------最终版-----------------------------*/
    @RequestMapping("/toUpdata")
    public String toUpdata(@RequestParam(value = "userName",required = false) String userName,
                           @RequestParam(value = "userPwd",required = true) String userPwd){

        return "doIndex";
    }

    /*---------------------------------------------------------------*/
    //@RequestParam("userName")  这个属于键   userName 属于值
    public String index(@RequestParam("userName") String userName){
        System.out.println(userName);
        //返回的界面
        return "doIndex";
    }
 }

猜你喜欢

转载自blog.csdn.net/weixin_43332168/article/details/83097462