四、SpringMVC之常用注解

四、SpringMVC之常用注解

注解 7个

package cn.it.demo.controller;
import cn.it.demo.domain.User;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
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.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;


/**
 * 6.@SessionAttributes 需要配合Mode对象一起使用 
 *                      1)将model对象中的数据存入到session域中 names:
 *                      2)接收string类型数组 
 *                      3)取值:从model对象中获取 model对象中的key
 */
@Controller
@SessionAttributes(names= {"user","user1"})
public class userController {

    @RequestMapping(value = "/testSessionAttributes")
    public String testSessionAttributes(Model model) {
        User userDB = getUserFormDB();
        model.addAttribute("user", userDB);
        model.addAttribute("user1", userDB);
        return "redirect:viewShow.jsp";
    }

    /**
     * 1.@RequestParam : 用于方法形参与前台传递参数不一致时的转换,
     *                 当配置类该注解时,传递参数必须和该注解中的value一致
     *               1).value :input表单传递的参数名称 name (需要和value一样)
     *               2).required : 配置当前参数是否必须 true:请求必须要携带name属性 false:有没有都可以
     *               3).defaultValue : 指定默认值 当参数没有传递值的时候,使用此默认值
     *               4).name: 和value的功能一样,可以混用
     */
    @RequestMapping("/RequestParam")
    public String testRequestMapping(@RequestParam(defaultValue = "cting", value = "name") String username) {
        System.out.println(username);
        return "success";
    }

    /**
     * 2.@CookieValue 从Cookie中获取指定的属性值 ,配置到方法参数上 
     *               1).value :value : cookie的名称 
     *               2).required : 配置当前参数是否必须 true:请求必须要携带name属性 false:有没有都可以
     *               3).defaultValue : 指定默认值 当参数没有传递值的时候,使用此默认值
     */
    @RequestMapping("/servletCookie")
    public String testCookieValue(@CookieValue( "JSESSIONID") String cookie) {
        System.out.println(cookie);
        return "success";
    }

    /**
     * 3.@RequestHeader * 配置到方法参数上 从请求中获取指定的头信息
     *            1).value :value : header中头信息的名称
     *            2).required : 配置当前参数是否必须 true:请求必须要携带name属性 false:有没有都可以
     *            3).defaultValue : 指定默认值 当参数没有传递值的时候,使用此默认值
     */
    @RequestMapping(value = "/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "Host") String sessionId) {
        System.out.println(sessionId);
        return "success";
    }

    /**
     * 使用占位符的形式描述id:{id}
     * 
     * 4.@PathVariable : 从占位符中获取数据的 value : 占位符中的属性名
     *           1).value :从占位符中获取数据的 value : 占位符中的属性名
     *           2).required : 配置当前参数是否必须 true:请求必须要携带name属性 
     *                                           false:有没有都可以
     */

    @RequestMapping(method = RequestMethod.POST, value = "/user/{id}")
    public String delUser(@PathVariable("id") String uid) {
        System.out.println("del:" + uid);
        return "success";
    }
    /*
     * @RequestMapping(method=RequestMethod.GET,value="/user/{id}") public String
     * findUser(@PathVariable("id")String uid,String username) {
     * System.out.println("find"+uid); System.out.println(username); return
     * "success"; }
     */




    /**
     * 5.
     *  第一步:@ModelAttribute 需要配置到方法上
     *                          此方法,在执行控制器方法之前执行
     *  第二步:@ModelAttribute 需要配置到控制器方法形参上,
     *                          从前置方法封装的model对象中获取数据
     *  1)Model(spring提供的对象)  和  request 代表含义类似
     *       model中数据最终存入到request域中
     *  2)Model配置到方法参数中,在方法体中直接使用
     *      addAttribute("key","value");
     *  3)@ModelAttribute :
     *      中这些方法的执行顺序
     *          modelAttributeTest  -- updateUser(控制器方法)
     *      * 全部绑定到一次请求中
     */
    //第一、modelMap
    @ModelAttribute
    public void modelAttributeTest(User user,Model model) {
        //查询数据库
        System.out.println("也发发起请求参数 : " + user);
        User dbUser = this.getUserFormDB();
        model.addAttribute("dbUser", dbUser);
        //request.setAttribute("dbUser", dbUser);//也可以直接放入request中
    }

    //第二、@ModelAttribute 配置到方法参数中,从前置方法封装的model对象中获取数据
    @RequestMapping("/updateUser")
    public String updateUser(@ModelAttribute(value="dbUser")  User dbUser) {
        // username = 张三 ,修改  age = 1;
        System.out.println("从数据库查询的user对象:" + dbUser);
        //1.修改用户属性
        //2.更新数据库
        return "success";
    }
    /**
     *7.SessionStatus:控制器方法形参,可以用于清空session
     */
    @RequestMapping(value = "/clearSession")
    public String clearSession(SessionStatus sessionStatus) {
        sessionStatus.setComplete();
        return "loginSuccess";
    }

    /**
     *通过session模拟登录
     */
    @RequestMapping(value = "/login")
    public String login(User user, HttpSession session) {
        User userDB = findUser(user.getUsername());
        session.setAttribute("user", userDB);
        User u = (User)session.getAttribute("user");
        System.out.println(u.getAge());
        System.out.println(userDB);
        return "loginSuccess";
    }

    /**
     *通过@SessionAttributes配合model模拟登录
     */
    @RequestMapping(value = "/login1")
    public String login1(User user, Model model) {
        User userDB = findUser(user.getUsername());
        System.out.println(userDB);
        model.addAttribute("user", userDB);
        model.addAttribute("user1", userDB);
        return "loginSuccess";
    }


    // 模拟登录获取用户信息
    private User findUser(String username) {
        User user = new User();
        user.setUsername(username);
        user.setAge(28);
        return user;
    }

    //从数据库中查询用户
    private User getUserFormDB() {
        User user = new User();
        user.setUsername("张三");
        user.setPassword("123456");
        user.setAge(121);
        return user;
    }

}

猜你喜欢

转载自blog.csdn.net/houysx/article/details/80043413