springmvc相关知识(SpringMVC Controller)

一、@Controller和@RequestMapping

1.1@Controller注解

        在Spring MVC 中使用 org.springframework.stereotype.Controller注解类型声明某类的实例是控制器

定义控制器步骤如下:

1、为控制器类加注解@Controller

@Controller
public class HelloController {
	
	
}

2、扫描控制器所在的包<context:component-scan/>

	<!-- 将控制器扫描到容器中 -->
	<context:component-scan base-package="controller"/>  

1.2@RequestMapping注解

        在Spring MVC 中使用 @RequestMapping 将请求与处理方法一一对应 @RequestMapping负责将不同请求映射到对应的控制器方法中

@Controller
public class HelloController {
	
	@RequestMapping("/hello")
	public String hello(){
		return "hello";
	}
	
}

        @RequestMapping不仅仅可以定义在方法处,还可以定义在类上

@Controller
@RequestMapping("/hello")
public class HelloController {
	
	@RequestMapping("/hello")
	public String hello(){
		return "hello";
	}
	
}

        如果@RequestMapping注解定义在类上的话,请求的url应该是:类注解url+方法注解的url。建议一般在类上也定义@RequestMapping,这样方便维护程序。

在上面的代码中,如果想要访问hello()方法的话,就必须输入如下url:

http://localhost:8080/springmvc/hello/hello

        在@RequestMapping指定的URL中可以含有变量参数,使用@PathVariable指定形参接收url中的参数值

@Controller
@RequestMapping("/hello")
public class HelloController {
	
	@RequestMapping("/hello/{username}")
	public String hello(@PathVariable("username") String username){
        System.out.println(username);
		return "hello";
	}
	
}

        @RequestMapping 可以通过 method 属性来限制请求的类型,如GET、POST等。

@Controller
@RequestMapping("/hello")
public class HelloController {
	
	@RequestMapping("/hello/{username}",method=RequestMethod.GET)
	public String hello(@PathVariable("username") String username){
        System.out.println(username);
		return "hello";
	}
	
}

        @RequestMapping也可以使用组合注解来限制方法接收请求的类型

二、前后端数据交互

2.1视图向控制器传参

        前端是指前端视图,比如:jsp页面,后端指我们的控制器Controller 前后端数据交互包括: 视图向控制器传参,控制器向视图传参

  1、第一种方式使用HttpServletRequest接收请求参数

   使用HttpServletRequest 作为Action的参数来接收用户请求,从用户请求中获取参数值

@RequestMapping("/doLogin")
	public String doLogin(HttpServletRequest request){
		String username=request.getParameter("username");
        String password=request.getParameter("password");
		boolean success= service.isSuccess(name, pass);
		if (success) {
			return "/login/login_succ";
		}else{
			return "/login/login_fail";
		}
	}

2、第二种方式:使用简单数据类型接收请求参数(这种方式要保证方法形参名要和用户请求参数名保持一致) 

@RequestMapping("/doLogin")
	public String doLogin(String username,String password){
		boolean isLogin= false;
        Login login =new Login();
        isLogin=login.isSuccess(username.password);
		if (isLogin) {
			return "/login/login_succ";
		}else{
			return "/login/login_fail";
		}
	}

如果不一致,则使用@RequestParam指定

@RequestMapping("/doLogin")
	public String doLogin(@RequestParam("username")String uname,
                          @RequestParam("password")String pass){
		boolean success= loginService.isSuccess(uname.pass);
		if (success) {
			return "/login/login_succ";
		}else{
			return "/login/login_fail";
		}
	}

3、第三种方式:使用实体类对象接收请求参数

        在项目下新建“entity”包,包下新建一个实体类“LoginParam”用于接收参数

        在Action中使用“LoginParam”对象作为参数来接收表单数据

@RequestMapping("/doLogin")
public String doLogin(LoginParam param){
    boolean success= loginService.isSuccess(param.getUsername(), param.getPassword());
    if (success) {
        return "/login/login_succ";
    }else{
        return "/login/login_fail";
    }
}

 2.2控制器向视图传参

1、第一种方式通过HttpServletRequest传递数据

@RequestMapping("/doLogin")
public String doLogin(LoginParam param,HttpservletRequest request){
    boolean success = loginService.isSuccess(param.getUsername(),param.getPassword());
    if(success){
        request.setAttribute("param", param);
        SimpleDateFormat df = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
        request.setAttribute ("current", df.format(new Date()));
        return "/login/login_succ";
    }else{
        return "/login/login_fail";
    }
}

2、第二种方式使用Model或者Map或者ModelMap传递数据

可以使用SpringMVC提供的Model对象来完成控制器和视图之间数据的传递, Model是一个Map的数据结构,也可以使用Map/ModelMap作为入参

 

@RequestMapping("/doLogin")
public String doLogin(LoginParam param,Model model){
    boolean success = loginService.isSuccess(param.getUsername(),param.getPassword());
    if(success){
        model.setAttribute("param", param);
        SimpleDateFormat df = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
        request.setAttribute ("current", df.format(new Date()));
        return "/login/login_succ";
    }else{
        return "/login/login_fail";
    }
}

3、第三种方式使用ModelAndView传递数据

@RequestMapping("/doLogin")
public ModelAndView doLogin(LoginParam param){
    boolean success = loginService.isSuccess(param.getUsername(),param.getPassword());
    ModelAndView mv=new ModelAndView();
    if(success){
        
        SimpleDateFormat df = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
        mv.setViewName("/login/login_succ");
		mv.addObject("param",param);
		mv.addObject("current",current);
    }else{
       mv.setViewName("/login/login_fail");
    }
    return mv;
}

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值