当前位置: 首页 > news >正文

springMVC

1.Spring MVC概述:

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:

处理器映射:选择使用哪个控制器来处理请求 
视图解析器:选择结果应该如何渲染

通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。

2.spring MVC配置及使用

  (1)需要使用的包(spring的lib包下找)

 

  (2)配置:

    在src下: 建立 Spring Bean Configuration File文件(xml文件)名字没有特殊要求

  需要勾选的几个项  beans   context   mvc

<?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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
        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-4.3.xsd">
    
    <!--建立扫描器 -->
    <context:component-scan base-package="com.*" />
    
    <!--开启spring MVC  的注解驱动-->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/page/"></property>        <!--请求的前缀-->
        <property name="suffix" value=".jsp"></property>        <!--请求的后缀-->
    </bean>
</beans>

Spring mvc的配置完成,但是并不能执行,我们还需要在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_3_0.xsd"
    id="WebApp_ID" version="3.0">
    
    <!-- spring提供的中文乱码过滤器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    
    
    <!--加载spring-all.xml 刚才配置的那个文件-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--参数,加载时,需要装载的内容 param-name 中的名字是固定的不能改变-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-all.xml</param-value>
        </init-param>
        <!-- 让其启动时就加载 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
        <!--映射,名字要与上面对应起来   url 中的*.do  表示只过滤这种形式的请求  比如   add.do--->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

</web-app>

以上为执行spring MVC需要的所有配置

 

测试一下:

建立一个类,加入注解

package com.controller;

import org.springframework.web.bind.annotation.RequestMapping;


@Controller        //核心控制器
public class PersonController {

    //加入注解当页面访问test.do的请求时,会自动找到这个类
    @RequestMapping(value="test")
    public String test(){
        System.out.println("这是一个测试方法");
        return "success";
      }
}

建立一个jsp页面 做一个a标签,跳转

<a href="test.do">测试链接(页面跳转)</a><br>

 其他的一些例子

   @RequestParam 注解 表示前台传过来的值
    //传值, 字符串和数字
    @RequestMapping(value="test1")
    public String test1(@RequestParam("str")String str, 
            @RequestParam("num")int num) {
        
        System.out.println("str: "+str);
        System.out.println("num: "+num);
        return "error";
    }
    @RequestMapping(value="test0/{str}")
    public String test0(@PathVariable("str")String str) {
        
        System.out.println("str: "+str);
        //System.out.println("num: "+num);
        return "error";
    }
    
    //测试post传送方式
    @RequestMapping(value="test2")
    public String test2(@RequestParam("str")String str, 
            @RequestParam("num")int num) {
        
        System.out.println("str: "+str);
        System.out.println("num: "+num);
        return "error";
    }
    
    //传日期型参数
    @RequestMapping("test3")
    public String test3(@RequestParam("date")
    @DateTimeFormat(pattern="yyyyMMdd")Date date) {
        System.out.println(date);
        return "success";
    }
    
    //传递实体类 前端只需要传成员即可  例如实体类中有成员     id    那么前端传id过来就能接收
    @RequestMapping("test4")
    public String test4(Person p) {    //传实体类,参数不用加@RequestParam
        System.out.println(p);
        return "success";
    }
    
    //传递数组
    @RequestMapping("test5")
    public String test5(@RequestParam("strs[]")String[] strs) {
        for(String s : strs) {
            System.out.println(s);
        }
        return "success";
    }
    
    //带日期型参数的实体类  在实体类的时间类型上加一个注解@DateTimeFormat(pattern="yyyyMMdd")
    @RequestMapping("test6")
    public String test6(Person p) {
        System.out.println(p);
        return "success";
    }
    

    //带日期型参数的实体类
    
    @ResponseBody    //把返回的数据打到前台
    @RequestMapping("test7")
    public String test7(Person p) {
        System.out.println(p);
        String json = "{\"success\":true}";
        return json;
    }
    

 

转载于:https://www.cnblogs.com/zhaotiancheng/p/6691603.html

相关文章:

  • 将Python程序打包为exe方法
  • Impdp导入时报错:ORA-39006,ORA-39213
  • 专访朱诗雄:Apache Spark中的全新流式引擎Structured Streaming
  • nagios
  • 开发App没有数据源?不存在的!国内值得关注的API集合
  • 2015携程JAVA工程师笔试题(基础却又没多少人做对的面向对象面试题)
  • JavaScript服务器推送技术之 WebSocket
  • 在 Windows 上安装Rabbit MQ 指南
  • 20165318 预备作业二 学习基础和C语言基础调查
  • 终极简洁设置tabbar在push到新界面的时候隐藏,返回时显示
  • 06.系统规划
  • 打开mat文件
  • netty如何知道连接已经关闭,socket心跳,双工?异步?
  • Android 线性布局(LinearLayout)相关官方文档 - 指南部分
  • hexo 添加标签
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [LeetCode] Wiggle Sort
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【技术性】Search知识
  • Angular 4.x 动态创建组件
  • canvas 高仿 Apple Watch 表盘
  • gcc介绍及安装
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • MYSQL 的 IF 函数
  • MySQL主从复制读写分离及奇怪的问题
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • SQLServer之创建显式事务
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • vue总结
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 运行时添加log4j2的appender
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • zabbix3.2监控linux磁盘IO
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #Lua:Lua调用C++生成的DLL库
  • $refs 、$nextTic、动态组件、name的使用
  • (南京观海微电子)——COF介绍
  • (算法设计与分析)第一章算法概述-习题
  • (万字长文)Spring的核心知识尽揽其中
  • (转)Mysql的优化设置
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CLR基本术语
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net FrameWork总结
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET/C# 使用反射注册事件
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .Net6使用WebSocket与前端进行通信
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net下简单快捷的数值高低位切换
  • [2010-8-30]
  • [BT]BUUCTF刷题第4天(3.22)