有关Spring MVC知识点的总结

Spring MVC


五大组件

DispatcherService (前端控制器)

接受请求,请求配置在HandlerMapping中.基于HandlerMapping的配置,调用相应的模型来处理.

HandlerMapping

包含了请求路径与模型的对应关系.告诉DispatcherService请求路径与模型之间的关系.

Controller (处理器)

负责处理业务逻辑.model

ModelAndView

封装了处理结果,需要将Controller封装为ModelAndView.

model表示处理结果,view表示视图.处理结果除了数据之外,还可能有视图名.

ViewResolver (视图解析器)

视图解析器. freemarker velocity ... 可以解析非jsp视图.

DispatcherServlet依据ViewResolver的解析,告诉DispatcherService调用哪个试图对象来生成相应的页面.

五大组件之间的关系


1.DispatcherServlet根据HanderMapping的配置,调用相应的Controller来处理.

2.Controller将处理结果封装成ModelAndView对象,然后返回给DispatcherServlet.

3.DispatcherServlet依据ViewResolver的解析,调用相应的视图对象(比如某个jsp)来生成相应的页面.

使用注解开发基于springmvc的web应用

步骤:

step1:导包

step2:添加spring的配置文件

step3:配置前端控制器DispatcherServlet.

step4:写Controller(处理器) 业务逻辑的处理

@Controller

多个方法

String ModelAndView

@RequestMapping

step5:jsp

step6:添加配置:

< context:component-scan base-package=""/ > <!-- 主键扫描 -->

< mvc:annotation-driver /> <!-- 视图解析器 -->


读取请求参数值:

1.通过请求对象读取

将request对象作为方法的入参即可.


@RequestMapping("/toLogin.do")   //告诉前端控制器请求路径与处理器方法的对应关系,不需要配置HandlerMapping
public String login(HttpServletRequest request) {
    String username = request.getParameter("username");
    System.out.println("username: " + username);
    String psd = request.getParameter("password");
    System.out.println("password: " + psd);
    return "login";
}

2.使用@RequestParam注解得到参数的方法值.

将注解加到方法的形参前面,明确的告诉传过来的值和参数之间的对应关系


@RequestMapping("/login.do")
public String login(String username, @RequestParam("password") String psd) {
    System.out.println("username: " + username + " password: " + psd);
    return "index";
}

3.使用javabean封装请求参数值.

java类的属性和请求参数名一致


@RequestMapping("/login.do")
public String login(User user) {
    System.out.println("username: " + user.username + " password: " + user.password);
    return "index";
}

向页面传值的方式

1.使用request域,将值传给页面.

将数据绑定到request,然后转发到某个jsp.


//向页面传值的第一种方式  使用request
@RequestMapping("/login1.do")
public String login1(User user, HttpServletRequest request) {
    System.out.println("login1");
    String username = user.getUsername();
    String password = user.getPassword();
    //将数据绑定到request
    request.setAttribute("username", username);
    request.setAttribute("password", password);
    //spring默认使用转发,会自动转发到以return值为jsp名的页面.
    return "index";
}

<h1>登录成功!</h1>
<h1>${username}</h1>
<h1>${password}</h1>  <!-- EL表达式 -->

2.使用ModelAndView来给页面传值.

将数据先封装到ModelAndView对象里面,然后将该对象作为方法的返回值.


//向页面传值的第二种方式  使用ModelAndView
@RequestMapping("/login2.do")
public ModelAndView login2(User user) {
    System.out.println(user.getUsername() + " " + user.getPassword());
    Map<String,Object> map = new HashMap<>();
    map.put("username", user.getUsername()); //相当于request.setAttribute("username", username);
    map.put("password", user.getPassword());
    //构造ModelAndView对象
    ModelAndView mav = new ModelAndView("index", map);
    return mav;
}

3.使用ModelMap绑定

将该对象作为方法的参数,然后将数据绑定到该对象


//向页面传值的第三种方式  使用ModelMap
@RequestMapping("/login3")
public String login3(User user, ModelMap mm) {
    System.out.println("login3()");
    System.out.println(user.getUsername() + " " + user.getPassword());
    mm.addAttribute("username", user.getUsername()); //相当于request.setAttribute..
    return "index";
}

4.使用Session对象绑定

Session声明周期长于Request.


    //向页面传值的第四种方式  使用Session
    @RequestMapping("/login4")
    public String login4(User user, HttpSession session) {
        System.out.println(user.getUsername() + " " + user.getPassword());
        session.setAttribute("username", user.getUsername());
        return "index";
    }

重定向

若方法返回值是String

在重定向地址前添加"redirect:"


@RequestMapping("/login.do")
public String login() {
    return "redirect:index.toIndex.do";
}

@RequestMapping("/toIndex.do")
public String toIndex() {
    return "index";
}

若方法的返回值是ModelAndView


@RequestMapping("/login.do")
public ModelAndView login() {
    RedirectView rv = new RedirectView("toIndex.do");
    return new ModelAndView(rw);
}

@RequestMapping("/toIndex.do")
public String toIndex() {
    return "index";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章