注解 转发与重定向

package controller;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

/**
 * 如何写一个处理器:
 * 1.不用实现Controller接口。
 * 2.可以在处理器类当中,添加多个方法,每个方法处理一种类型的请求。
 * 3.方法名不作要求,返回类型可以是ModelAndView,也可以是String.
 * 4.使用@Controller ,将该处理器纳入容器进行关系。(也就是说,spring配置文件不用配置该处理器了)
 * 5.使用RequestMapping,告诉前端控制器(DispatcherServlet),请求路径与处理器的方法的对应关系。(spring配置文件不用配置
 * HandlerMapping了)。
 */
@Controller
public class HelloController {
    @RequestMapping("/tologin.do")
    public String hello(){
        System.out.println("tologin()");
        return "login";
    }
    
    @RequestMapping("/login.do")
    //读取请求参数的第一种方式:
    public String login1(HttpServletRequest request){
        System.out.println("login1()");
        String adminCode = request.getParameter("adminCode");
        String pwd = request.getParameter("pwd");
        System.out.println("adminCode:"+adminCode +" pwd:"+pwd);
        return "index";
    }
    @RequestMapping("/login2.do")
    //读取请求参数的第二种方式:
    //使用@RequestParam注解。
    public String login2(@RequestParam("adminCode") String adminCode,@RequestParam("pwd") String password){
        System.out.println("login2()");
        System.out.println("adminCode2:"+adminCode +" pwd2:"+password);
        return "index";
    }
    @RequestMapping("/login3.do")
    //读取请求参数值的第三种方式:
    //将请求参数封装成一个javabean。
    public String login3(AdminParam ap){
        System.out.println("login3()");
        System.out.println("code:"+ap.getAdminCode()+" pwd:"+ap.getPwd());
        return "index";
    }
    
    @RequestMapping("/login4.do")
    //向页面传值的第一种方式:
    //使用request
    public String login4(AdminParam ap, HttpServletRequest req){
        System.out.println("login4()");
        String adminCode = ap.getAdminCode();
        System.out.println("adminCode:"+adminCode);
        //将数据绑定到request
        req.setAttribute("adminCode", adminCode);
        //springmvc默认使用转发,将adminCode转发给 index
        return "index";
    }
    @RequestMapping("/login5.do")
    //向页面传值的第二种方式:  将数据封装到ModelAndView对象里面,然后将该对象作为方法的返回值。
    //使用ModelAndView
    public ModelAndView login5(AdminParam ap ){
        System.out.println("login5()");
        String adminCode = ap.getAdminCode();
        System.out.println(adminCode);
        Map<String,Object> data = new HashMap<String,Object>();
        //相当于request.setAttribute("adminCode",adminCode);
        data.put("adminCode", adminCode);
        //构造ModelAndView对象
        ModelAndView mav = new ModelAndView("index",data);
        
        return mav;
    }
    @RequestMapping("/login6.do")
    //向页面传值的第三种方式:
    //使用ModelMap。
    public String login6(AdminParam ap,ModelMap mm){
        System.out.println("login6()");
        String adminCode = ap.getAdminCode();
        System.out.println(adminCode);
        //相当于request.setAttrBute..
        mm.addAttribute("adminCode", adminCode);
        return "index";
    }
    @RequestMapping("/login7.do")
    //向页面传值的第四种方式:  这种方式保留到内存中时间长,可以用到重定向中取值。
    //使用session
    public String login7(AdminParam ap,HttpSession session){
        System.out.println("login7()");
        String adminCode = ap.getAdminCode();
        System.out.println(adminCode);
        session.setAttribute("adminCode", adminCode);
        return "index";
    }
    
    @RequestMapping("/login8.do")
    //重定向一
    public String login8(){
        System.out.println("login8()");
        
        return "redirect:toIndex.do";
    }
    @RequestMapping("/toIndex.do")
    public String toIndex(){
        System.out.println("toIndex()");
        return "index";
    }
    
    @RequestMapping("/login9.do")
    //重定向二
    public ModelAndView login9(){
        System.out.println("login9()");
        RedirectView rv = new RedirectView("toIndex.do");
        return new ModelAndView(rv);
    }
}

--------------------------------------------------------------
package controller;

public class AdminParam {
    // 类型名称要和网页那么相同
    private String adminCode;
    private String pwd;
    public String getAdminCode() {
        return adminCode;
    }
    public void setAdminCode(String adminCode) {
        this.adminCode = adminCode;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    
}

 





 

posted @ 2017-07-29 18:38  scha  阅读(668)  评论(0编辑  收藏  举报