SpringMVC学习笔记

概念

SpringMVC是Spring框架的一个模块,是一个基于MVC的web框架。

原理

1.用户发起请求到前端控制器(DispatcherServlet)

2.前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)查找处理器(Handler),可以根据xml配置或者注解方式进行查找

3.处理器映射器(HandlerMapping)向前端控制器(DispatcherServlet)返回一个封装Handler的执行链,执行链中还包含一个或者多个拦截器(HandlerInterceptor)

4.前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行Handler

5.处理器适配器(HandlerAdapter)执行Handler

6.Handler执行完成向处理器适配器(HandlerAdapter)返回一个ModelAndView

7.处理器适配器(HandlerAdapter)向前端控制器(DispatcherServlet)返回该ModelAndView

8.前端控制器(DispatcherServlet)请求视图解析器(ViewResolver)进行视图解析,视图解析器(ViewResolver)根据逻辑视图名解析成真正的视图(jsp)

9.视图解析器(ViewResolver)向前端控制器(DispatcherServlet)返回View

10.前端控制器(DispatcherServlet)进行视图渲染,将视图渲染模型数据(在ModelAndView对象中)填充到request域

11.前端控制器(DispatcherServlet)向用户响应结果

相关组件

1.前端控制器(DispatcherServlet)

作用:用于接收用户请求,响应结果,相当于转发器,有了DispatcherServlet减少其他组件之前的耦合度

2.处理器映射器(HandlerMapping)

作用:根据请求的url查找Handler

3.处理器(Handler)

4.处理器适配器(HandlerAdapter)

作用:按照特定规则(HandlerAdapter要求的规则)执行Handler,Handler需按照HandlerAdapter的要求编写,HandlerAdapter才能正确执行

5.视图解析器(ViewResolver)

作用:进行视图解析,根据逻辑视图名解析成真正的视图(View)

6.视图(View)

View是一个接口,它的实现类支持不同的View类型(jsp、freemarker、pdf...)

入门程序(非注解方式)

先上项目结构图


1.配置前端控制器(在web.xml中)

<?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_2_5.xsd"
         version="2.5">

    <!--               SpringMVC的前端控制器配置           -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--contextConfigLocation配置springmvc加载的配置文件(配置文件中配置映射器适配器等)-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:Config/springmvc.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--url-pattern的两种配置, 一、*.action,以.action结尾都由DispatchaerServlet进行解析
            二、 /,所有访问地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析,此种方法可以实现restful的url-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
2.在springmvc.xml中配置处理器映射器、处理器适配器和视图解析器

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--配置处理器映射器  将Bean的name作为url进行查找,需要在配置Handler时指定Benaname(就是url)-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--配置Handler-->
    <bean name="/lala" class="Controller.HelloController"/>

    <!--配置处理器适配器  适配器要求所执行的Handler实现Controller接口-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

</beans>

3.编写Controller

package Controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","Hello SpringMVC!!!!!!!!");
        modelAndView.setViewName("WEB-INF/page/lala.jsp");    /*这里写加载的Jsp文件路径*/
        return modelAndView;
    }
}               /*编写好的Handler需要在Spring容器中通过Bean进行加载*/

4.编写jsp页面

<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  $END$
  ${message}
  </body>
</html>

5.访问  localhost:8080/lala


以上为非注解方式实现入门程序,下面再介绍几个非注解的适配器和映射器配置

1.简单的处理器映射器配置

<!--简单的处理器映射器配置-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/lulu">controller1</prop>            <!--key为url地址,内容写Controller的Bean id-->
        </props>
    </property>
</bean>

<!--配置Handler-->
<bean id="controller1" name="/lala" class="Controller.HelloController"/>

2.另外一种处理器适配器配置

<!--另外一种处理器适配器,要求Handler实现HttpRequestHandler接口-->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

该适配器要求Handler实现HttpRequestHandler接口

package Controller;

import org.springframework.web.HttpRequestHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Controller1 implements HttpRequestHandler {
    @Override
    public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        httpServletRequest.setAttribute("message","lalalalalaal");
        httpServletRequest.getRequestDispatcher("WEB-INF/page/lala.jsp").forward(httpServletRequest,httpServletResponse);
    }
}


注解方式配置

1.在web.xml文件中配置前端控制器DispatcherServlet

2.在SpringMVC.xml配置文件中配置注解处理器适配器和处理器映射器

<!--需要在Spring容器中加载Handller,这里采用扫描包的方式进行-->
<context:component-scan base-package="Controller"/>

<!--注解的处理器适配器配置-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

<!--注解的处理器映射器配置-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

<!--配置MVC的注解驱动,代替上面两个配置
    该注解驱动还默认加载了很多参数绑定的方法,比如json转换解析器就默认加载了,实际开发中使用-->
<mvc:annotation-driven/>

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--通过Property标签,可以设置前缀和后缀省略-->
    <property name="prefix" value="WEB-INF/page/"/>
    <property name="suffix" value=".jsp"/>
</bean>

2.编写Handler

package Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller    /*这里的Controller表示用注解方式声明这是一个Controller*/
public class Controller2 {
    @RequestMapping("/Controller2")       /*这个注解可以用来设置Url*/
    public ModelAndView lala()throws Exception{
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","这是注解开发的Handller");
        modelAndView.setViewName("lala");
        return modelAndView;
    }
}


3.在Spring容器中加载Handller,用扫描包的方式

<!--需要在Spring容器中加载Handller,这里采用扫描包的方式进行-->
<context:component-scan base-package="Controller"/>

4.运行

完结。

# 高校智慧校园解决方案摘要 智慧校园解决方案是针对高校信息化建设的核心工程,旨在通过物联网技术实现数字化校园的智能化升级。该方案通过融合计算机技术、网络通信技术、数据库技术和IC卡识别技术,初步实现了校园一卡通系统,进而通过人脸识别技术实现了更精准的校园安全管理、生活管理、教务管理和资源管理。 方案包括多个管理系统:智慧校园管理平台、一卡通卡务管理系统、一卡通人脸库管理平台、智能人脸识别消费管理系统、疫情防控管理系统、人脸识别无感识别管理系统、会议签到管理系统、人脸识别通道管理系统和图书馆对接管理系统。这些系统共同构成了智慧校园的信息化基础,通过统一数据库和操作平台,实现了数据共享和信息一致性。 智能人脸识别消费管理系统通过人脸识别终端,在无需接触的情况下快速完成消费支付过程,提升了校园服务效率。疫情防控管理系统利用热成像测温技术、视频智能分析等手段,实现了对校园人员体温监测和疫情信息实时上报,提高了校园公共卫生事件的预防和控制能力。 会议签到管理系统和人脸识别通道管理系统均基于人脸识别技术,实现了会议的快速签到和图书馆等场所的高效通行管理。与图书馆对接管理系统实现了一卡通系统与图书馆管理系统的无缝集成,提升了图书借阅的便捷性。 总体而言,该智慧校园解决方案通过集成的信息化管理系统,提升了校园管理的智能化水平,优化了校园生活体验,增强了校园安全,并提高了教学和科研的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值