Spring_定义SpringMVC控制器

美丽的蓝图,落在懒汉手里,也不过是一页废纸。

  在SpringMVC中,控制器只是方法上添加了@RequestMapping注解的类,这个注解声明了他们所要处理的请求。

  @Controller注解用来声明控制器,它基于@Component注解,它的目地就是辅助实现组件扫描。

package chapter5.practice3;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/games")
public class PlayGameController {
/**
* 返回至baskerball.jsp页面
* @param game 接受查询参数
* @return
*/
@RequestMapping("/play")
public String playGame(@RequestParam("game") String game) {
System.out.println("I can play " + game);
return "basketball";
}

/**
* 返回JSON数据
* @return
*/
@ResponseBody
@RequestMapping(value = "/show", produces = "application/json;charset=UTF-8")
public Map<String, Object> showAllGames() {
Map<String, Object> gamesMap = new HashMap<String, Object>();
java.util.List<String> gameList = new ArrayList<String>();
gameList.add("DNF");
gameList.add("LOL");
gamesMap.put("gameList", gameList);
return gamesMap;
}

/**
* 表单参数
* @param game
* @return
*/
@RequestMapping(value="/isExisit", method=RequestMethod.POST)
public String gameIsExisit(Game game) {
return "yes";
}

/**
* 路径参数
* @param gameId
* @return
*/
@RequestMapping(value="/{gameId}",method=RequestMethod.GET)
public String showGameImg(@PathVariable String gameId) {
return "showGameImg";
}

}

以上代码定义了一个简单的SpringMVC控制器。

1. 其中类级别上的@RequestMapping定义了该控制器类类级别的请求处理,platGame方法上的@RequestMapping定义了该方法的请求处理。

2. SpringMVC控制器返回类型常用的有以下几种:

  1)ModelAndView

   顾名思义返回带model数据的view,即返回model数据和视图名称。

@RequestMapping(value="/showGameInfo", method=RequestMethod.POST)
    public ModelAndView showGameInfo() {
        //通过构造器指定跳转的页面
        ModelAndView gameModelAndView = new ModelAndView("gameDetail");
        //也可以通过setViewName方法设定gameModelAndView.setViewName("gameDetail");
        Map<String, Object> gamesMap = new HashMap<String, Object>();
        java.util.List<String> gameList = new ArrayList<String>();
        gameList.add("DNF");
        gameList.add("LOL");
        gamesMap.put("gameList", gameList);
        //addObject方法装载model数据
        gameModelAndView.addObject("gamesMap", gamesMap);
        return gameModelAndView;
    }

  2)String

    返回跳转的视图名称。

    需要注意的是:

  (1)如果方法声明了@ResponseBody,则会将该字符串值输出到页面;

     (2)如果字符串中形式为"redirect:basketball",则表示跳转页面的方式为重定向,将不会携带上次请求的request;

       (3)如果字符串中形式为"forward:basketball",则表示跳转页面的方式为转发,将携带上次请求的request。

@RequestMapping("/play")
    public String playGame(@RequestParam("game") String game) {
        System.out.println("I can play " + game);
        return "basketball";
    }

  3)Void

    当返回类型为void时,返回的页面为对应的访问地址。如下代码,该请求的响应页面"/index"

@RequestMapping(value="/index", method=RequestMethod.POST)
    public void index() {
        System.out.println("index...");
    }

3. SpringMVC允许以多种方式将客户端中的数据传送到控制器的处理方法中:

  1)查询参数

  2)表单参数

  3)路径变量

原文地址:https://www.cnblogs.com/dandelZH/p/9043610.html

时间: 2024-10-02 00:27:37

Spring_定义SpringMVC控制器的相关文章

猫猫学iOS 之微博项目实战(2)微博主框架-自己定义导航控制器NavigationController

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 一:加入导航控制器 上一篇博客完毕了对底部的TabBar的设置,这一章我们完毕自己定义导航控制器(NYNavigationController). 为啥要做自己定义呢.由于为了更好地封装代码,而且系统的UINavigationController不能满足我们的需求了,所以得自己定义. 首先,我们在NYTabBarViewCon

SpringMVC控制器接收不了PUT提交的参数的解决方案

摘要: SpringMVC控制器接收不了PUT提交的参数的解决方案 这次改造了下框架,把控制器的API全部REST化,不做不知道,SpringMVC的REST有各种坑让你去跳,顺利绕过它们花了我不少时间,这次来提下SpringMVC的PUT提交参数为null的情况. 照常先贴出我的控制器代码,没什么特别的,就是打印出接受到的前台参数值: @RequestMapping(value = "/{id}", method = RequestMethod.PUT) @ResponseBody

SpringMvc 控制器注解简介

Spring2.5之前,我们是通过实现Control接口或实现来定义我们的处理器类. Spring2.5引入了注解处理器支持,通过@controller和@requestMapping注解定义我们的类,并提供了一组强大的注解: 需要通过处理器映射 DefaultAnnotationHandlerMapping和处理器适配器AnnotationMethodHandlerAdapter来开启支持@Controller 和@RequestMapping注解的处理器. @controller 用于标识是

SpringMVC控制器与视图的数据交换

1,先创建spring的主配置文件(applicationContaxt.xml如果写在WEB-INF下,就不用配置context了,就是不用告诉它路径了,WEB-INF会自动加载的),由监听器负责加载 ,导入类库,添加spring支持 2,stru2的核心控制器就是咱自己写的Action  视图就是jsp  模型:数据访问层.业务逻辑层.实体类  StrutsPrepareAndExecuteFilter 3,SpringMVC:先在web.xml中配置核心控制器:添加servlet,Disp

springMVC控制器,处理器,映射器,适配器

前端控制器DispatcherServlet <!--定义spring mvc 的前端控制器Servlet --><servlet> <!--Servlet的名称--> <servlet-name>SpringMVC</servlet-name> <!--Servlet对应的java类--> <servlet-class>org.springframework.web.servlet.DispatcherServlet&l

springmvc控制器请求路径配置

<!--springmvc核心控制器 --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation

SpringMVC 控制器(一)

这一篇讲以下三个知识点: [email protected]--请求映射注解 [email protected]--请求参数 3.ModelAndView--返回模型和视图 示例:(学生信息的查询.添加.修改)--为了方便就不链接数据库直接在类中模拟了一些数据 1.配置springMVC的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://ww

springmvc控制器controller单例问题

springmvc controller默认的是单例singleton的,具体可以查看注解scope可以一目了然. 单例的原因有二: 1.为了性能. 2.不需要多例. 1.这个不用废话了,单例不用每次都new,当然快了. 2.不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例. 我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了. 因此,只要controller中不定义属性,那么单例完全是安全的.下面给个例子

SpringMVC控制器 跳转到jsp页面 css img js等文件不起作用 不显示

今天在SpringMVC转发页面的时候发现跳转页面确实成功,但是JS,CSS等静态资源不起作用: 控制层代码: /** * 转发到查看培养方案详情的页面 * @return */ @RequestMapping("/2TrainSchemeDatail") public String forward2TrainSchemeDetail(@RequestParam(defaultValue = "1") String trainSchemeId, Model mode