Spring MVC组件配置,以及ModelAndView参数类型,设计实现流程

    技术2022-07-10  102

    总结

    springWebMVC流程

    http请求URL定位一个地址 备注:HttpClient apche请求的安装包 浏览器借助ajax 请求—>DispatcherServlet—>HandlerMapping— —>Controller(返回modelAndView)—>ViewResolver–>视图jsp 模板文件数据填充构成静态文件返回给浏览器, 模板技术 javaWeb模板技术 freeMarker技术,模板引擎,改变数据,形成html输出 没有EL表达式使用独特的FTL 模板文件使用别人的Html 将数据放进数据模型,只认模板表达式, jsp可以用EL jstl ,也可以嵌入java代码 模板技术比较单一,前台页面只要设置模板技术,分工比较明确

    视图有不同表现形式 框架是固定的,按照流程进行访问请求

    1.DispacterServlet主控制器

    主控制器,所有的SpringMVC请求首先进入主控制器 接收所有web请求

    配置servlet,进行初始化,实例化Spring容器对象,然后调用HandlerMapping

    2.HandlerMapping映射处理器

    之前不使用组件扫描使用配置

    <bean id="handlerMapper" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <!--请求为hello.do调用id=helloController--> <prop key="/hello.do">helloController</prop> <prop key="/news.do">newsListController</prop> </props> </property> </bean> <!-- 配置helloController --> <bean id="helloController" class="com.tracy.controller.HelloController"></bean> <!-- 配置newsListController --> <bean id="newsListController" class="com.tracy.controller.NewsListController">

    映射处理器 SimpleUrlhandlerMapping,使用者传递RequestMapping ,.do请求对应Controller

    RequestMappingHandlerMapping @requestMapping("/hello.do") public ModelAndView execute(){

    } 映射处理器,负责维护请求URL和Controller之间的映射关系,可以根据请求找到相对应的Controller处理

    3.XXXXXController 业务控制器

    业务控制器,负责调用模型组件,处理请求。

    4ViewResolver视图解析器

    解析Controller返回的结果,定位视图jsp组件(默认是转发方式),将模型数据传递到视图jsp

    注解配置,不流行Xml配置 #SpringWebMVC注解配置使用 1.RequestMappingHandlerMapping 支持@RequestMapping(“/请求地址”),在Controller方法前定义或类前定义 public calss Controller{ @RequestMapping("/hello.do") public ModelAndView execute(){

    }

    }

    RequestMappingHandlerMapping定义方法 <bean id“” class=“RequestMappingHandlerMapping”> <bean id“” class=“RequestMappingAdapterMapping”> 或 <mvc:annotation-driven /> 自定义标签 封装 上面两个组件 每个标记都需要组件进行解析支撑

    设计实现流程

    hello.do请求—>DispatcherServlet—>HandlerMapping— —>Controller(返回modelAndView)—>ViewResolver–>视图jsp

    搭建开发环境

    1.创建项目 2.引入jar包~ 3.配置spring-mvc.xml 编写确实的组件

    配置流程中的组件

    配置DispatcherServlet组件

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <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:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <!--启动服务器就实例化组件 1为优先级--> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>

    –配置HandlerMapping组件

    <mvc:annotation-driven>

    –配置Controller组件

    <context:component-scan base-package="">

    配置ViewResolver

    <!-- 配置ViewResolver配置spring-mvc.xml通用资源适配解析器前缀 后缀 --> <bean id="ModelAndView" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean>

    不用再实现Controller ModelAndView返回的对象数据,不需要数据跳转String就可以 返回值可以是ModelAndView或String 参数可以是有参或无参

    返回值类型

    参数类型 HttpServletRequest HttpServletResponse HttpServletSession

    返回值是String

    public String execute() { return “”hello";

    }

    返回值是ModelAndView

    public ModelAndView execute1(){ ModelAndView mav=new ModelAndView(); mav.setViewName(); mav.getModel().put(“msg”,“传给页面的值”); return mav; }

    登录功能 显示登录界面 tologin.do请求 ----DispatcherServlet-----HandlerMapping-----Logincontroller----ViewResolver组件----.jsp

    public class LoginController{

    @RequestMapping("./tologin.do"); public String toLogin(){ return "login";

    }

    }

    登录按钮处理 login.do—DispatcherSrevlet-----HandlerMappaing----LoginController—ViewResolver----成功ok.jsp

    @RequestMapping("./login.do")

    传递参数 问题

    第1种参数的获取 HttpServletRequest request

    @RequestMapping("toLogin.do") public ModelAndView execute2(HttpServletRequest request) { ModelAndView mav=new ModelAndView(); String name=request.getParameter("name"); String pwd=request.getParameter("pwd"); if(name.equalsIgnoreCase("root")&&pwd.equals("123456")) { mav.getModel().put("msg","恭喜登录成功"); mav.setViewName("ok"); return mav; }else { mav.getModel().put("msg","登陆失败"); mav.setViewName("login"); return mav; } }

    pubic ModelAndView check( HttpServletRequest request){ //检查用户名 与密码 使用request进行表单数据进行获取 String name=request.getParameter(“name”); String pwd=request.getParameter(“pwd”); if(“scoott”.equalsIgnoreCase(name)&&“123456”.equals(pwd)){ mav.setViewName(“ok”); }else{ mav.setViewName(“login”); } }

    第2种参数的获取 根据form参数对应规则传递

    @RequestMapping("toLogin.do") public ModelAndView execute3(@RequestParam(value="name",required = true,defaultValue = "tom") String username,String pwd) { //使用@RequestParam进行参数设置 require 为true必须有参数传递 defaultValue 默认值当无参数传递,取默认值,有参时为实际值 ModelAndView mav=new ModelAndView(); System.out.print(username+"="+pwd); if(username.equalsIgnoreCase("root")&&pwd.equals("123456")) { mav.getModel().put("msg","恭喜登录成功"); mav.setViewName("ok"); return mav; }else { mav.getModel().put("msg","登陆失败"); mav.setViewName("login"); return mav; } }

    //参数传递,名称对应规则 参数必须与form表单数据相同 require true必须有参数传递 defaultValue 默认显示值 @requestParams(value=“username” require=“”true/false“”,defaultValue=“”tom“”) String name, @RequestMapping("./login.do") pubic ModelAndView check(String name,String pwd){ //检查用户名 与密码 使用request进行表单数据进行获取

    if("scoott".equalsIgnoreCase(name)&&"123456".equals(pwd)){ mav.setViewName("ok"); }else{ mav.setViewName("login"); }

    } 400请求参数有问题 传递参数 问题可以1.使用request获取,2.可以参数接收,3.可以封装接收 封装为实体类

    第3种参数的获取 封装成实体类

    @RequestMapping("toLogin.do") public ModelAndView execute4(User user) { ModelAndView mav=new ModelAndView(); if(user.getName().equalsIgnoreCase("root")&&user.getPwd().equals("123456")) { mav.getModel().put("msg","恭喜登录成功"); mav.setViewName("ok"); return mav; }else { mav.getModel().put("msg","登陆失败"); mav.setViewName("login"); return mav; } }

    @RequestMapping("./login.do") pubic ModelANdView check(User user){ if(“scoott”.equalsIgnoreCase(user.getName)&&“123456”.equals(user.getPwd)){ mav.setViewName(“ok”); }else{ mav.setViewName(“login”); mav.getModel().put(“error”,“输入的信息错误”); } }

    Processed: 0.027, SQL: 9