java开发框架(4):springmvc

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

SpringMVC框架

部分核心配置 请求大概流程

SpringMVC是新兴的MVC框架 比Struts设计更精密。扩展性更强

基于注解型的

框架可以理解成为项目根目录下的bin中的jar包、归根结底 jar包中的方法成就了这个框架。

框架通常是代码重用,应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。

 

运行流程

  

Tomcat在启动时就加载解析web.xml,找到前端控制器。

用户发送请求开始---

找到前端控制器,并且通过它来加载相关配置文件信息。

 

(不考虑SSH整合,单纯的SpringMVC:

前端控制器拦截请求后 进入核心配置文件:

 

SpringMVC配置文件:扫描controller包,激活注解,配置视图。

这些配置对应的是引用的jar包

<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->

<context:component-scan base-package="com.jk.controller" />

<!-- 开启注解功能 -->

<mvc:annotation-driven/>

 

)

 

加载完相关配置文件,前端控制器,查找相应的handlerMapping,返回一个执行链(貌似是一个拦截器)--然后找到对应的Handeler(即controller类),随即开始执行 映射下的方法。  

(@Controller定义了一个控制器类,在使用了@RequestMapping之后,controller类才真正成为了一个处理器。)

方法执行后 返回 modelandview 对象-数据对象,逻辑视图名或者视图对象。

前端控制器得到ModelAndView对象后要去解析逻辑视图名----逻辑视图名也就是不可以直接返回,需要视图解析器解析成真正的视图(.jsp),是视图对象;

 解析完成后返回给前端控制器。

之后再把model传给View 进行视图渲染- - - -

视图的渲染过程是把model包装成map形式通过request的属性带到服务器端

 

视图解析器的作用:

就是当 DispatcherServlet将ModelAndView传递给视图解析器的时候,将ModelAndView数据填充到相应的视图中,然后返回一个带有数据的视图给DispatcherServlet.

 

可以理解为

-1--modelAndView.addObject("page", page);

modelAndView.setViewName("show");

return modelAndView;

 

-2--request.setAttribute("page", page);

return "show";

 

-3--model.addAttribute("page", page);

 

return "show";

把model模型数据 存放 到request域中,返回给前端控制器。

通过作用域通讯对象。response

这样就可以把model和view返回给用户了。

<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp" />

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

 

ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图

当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。
因此,经常需要在控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法,
让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。
当你只有一个模型属性要返回时,可以在构造器中指定该属性来构造ModelAndView对象.通过ModelAndView构造方法可以指定返回的页面名称,(在配置文件中 配置视图解析器)也可以通过setViewName()方法跳转到指定的页面 ,
使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。
调用addObject()方法将值设置到一个名为ModelMap的类属性,ModelMap是LinkedHashMap的子类,
作者:转角遇到抢劫的_0c47
链接:https://www.jianshu.com/p/2acfc166eb2a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

ModelAndView对象被放置在Request对象中,可以在页面中利用${keyName}直接访问存在model中的对象。

 

Servlet 换成了controller

Servlet是 前台接收请求,用flag判断

Spring直接用分发器 根据注解  自动判断增删改查

Servlet层和controller只用来JSP页面接收请求 选择处理请求,到底是增删改查

Dao层进行连接数据库

 

 

 

 

看到没有JDBC在jar包里

 

 

 

 

SpringMVC分发器

<servlet>

<servlet-name>springMvc(这里只要和下面<servlet-mapping>

里的名字保持一致就行,随笔写什么都可以)</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet(核心控制器/分发器:目的是为了进入后台的某一个servlet(一个程序,用来连接JDBC的,那么...也就是controller了。)。那是怎么找到的?就是根据下面的配置,进入了Spring-mvc.xml   ,这个文件配置了 扫描路径的配置,视图解析器,注解的开启和扫描信息)</servlet-class>

<init-param>初始化参数 即优先加载?  

filter 可以接受一些参数。  init-param 的param-name 就是参数名  param-value就是参数值, 支持多个参数

每一个 filter 都有一个 init 方法 ,可以再这个 方法中通过 getInitParamter("key"); key 就是 param-name的值,来获取对应的参数值

常用的 就是 设置编码过滤器 , 例如 : <init-param><param-name>encoding</param-name><parma-value>UTF-8</param-vaue></init-param>

 

也就是说进入web.xml 先找到核心控制器,然后立刻加载Spring的配置文件 即Spring-mvc.xml

<param-name>contextConfigLocation(键)</param-name>

<param-value>classpath(类路径):spring-mvc.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>设置优先级

</servlet>

 

<servlet-mapping>

<servlet-name>springMvc(映射上面的配置)</servlet-name>

<url-pattern路径映射路径,用来匹配用户发来的请求>*.do</url-pattern>

</servlet-mapping>

(1)完全匹配

<url-pattern>/test/userList.action</url-pattern>

完全匹配就是等值匹配,它是最先被匹配到的客户端请求。

 

(2)路径匹配

<url-pattern>/*</url-pattern> 匹配根路径下的全部请求

路径匹配类似于模糊匹配,对于/list、listInfo.do、checkInfo.action、index.jsp、abc.css、my.js等等url请求,都可以被匹配到。这种匹配的顺序排在完全匹配后面。

(3)扩展名匹配

<url-pattern>*.action</url-pattern>匹配全部action 结尾的请求

<url-pattern>*.css</url-pattern> 匹配全部 css结尾的请求

<url-pattern>*</url-pattern> 不能用 * ,否则报错

说明:这种匹配匹配在开发中用的比较多,但不能使用*代替,否则会报错。

结论:容器会首先查找完全匹配,如果找不到,再查找目录匹配,如果也找不到,就查找扩展名匹配。

 

 

 

<!-- 解决post提交乱码问题 -->

<filter>

<description>字符集过滤器</description>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<description>字符集编码</description>

<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>

  

Spring-mvc.xml

 

<!-- 开启注解功能 -->

<mvc:annotation-driven/>

<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->

web.xml的注解的分发器会根据注解找到增删改查的方法。

<context:component-scan base-package="com.jk.controller" />

<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp" />

 

<!-- 配置根视图 -->

<!-- <mvc:view-controller path="/" view-name="index"/> -->

<!-- 激活基于注解的配置 用来激活那些注解的

@RequestMapping, @ExceptionHandler,数据绑定 ,@NumberFormat , @DateTimeFormat ,@Controller ,@Valid ,@RequestBody ,@ResponseBody等 -->

 <!-- 视图层配置 -->

方法如果没有返回值,默认走的是方法名.jsp..是一个model对象

       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

           <property name="prefix" value="/"/>

           <property name="suffix" value=".jsp"/>

       </bean>

第一步

在springmvc.xml配置文件中配置视图解析器前后缀(我这个路径放在WEB-INF目录下面,配置好了之后返回界面会直接在这个目录的这个文件夹下面查找jsp界面

 

<!--配置视图解析器的路径(前缀和后缀)-->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <!--配置前缀-->

        <property name="prefix" value="/WEB-INF/mypage"/>

        <property name="suffix" value=".jsp"/>

    </bean>

第二步

在控制器类中返回一个界面

 

@Controller

public class Mycontroller {

 

    @RequestMapping("/test1.action")

    public ModelAndView test1() {

        System.out.println("来了");

        ModelAndView modelAndView = new ModelAndView();

        modelAndView.addObject("name","hello");

//这里我返回了一个叫login的界面,没有配置他的jsp后缀名,但是仍然可以通过刚才的配置在对应的目录下面找到相应的界面

        modelAndView.setViewName("/login");

 

        return modelAndView;

    }

}

第三步

运行服务器并点击请求查看结果即可

 

 

 

 

 

 

<%path%>/car/query  car找到类,query找到方法

 

基本流程:

前台请求找到web.xml  到<url-pattern>*.do,通过<servlet-name>映射找到 前端控制器 ,前端控制器 --然后找到Spring-mvc.xml配置文件--然后扫描控制层-就可以根据注解进行增删改查-返回的model经视图解析器 存入view,然后返回给前端控制器一个响应,返回到前台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值