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;
}
}