SpringMVC简单介绍

                                                                                                SpringMVC

 

MVC的概念:

M:model,模型层, 一种javabean,是数据库中的表的实体类型的映射

V:view,视图层,jsp页面,和用户交互的一个界面

C:controller,控制层,接受请求,调用业务逻辑,返回结果,调用结果视图

 

1. JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架。

 

2.简介: Spring MVC是Spring提供的一个强大而灵活的web框架,将Web层进行解耦

 

3.组成: DispatcherServlet( 前端控制器)、 HandlerMapping(处理器映射)、处理器(控制器)、 ViewResolver(视图解析器)、视图

 

4.SpringMVC的运行原理

        1)  Http请求:客户端请求提交到DispatcherServlet。

        2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping(处理器映射),通过处理器映射找到处理请求的Controller(处理器)。 

        3 调用处理器:DispatcherServlet将请求提交到Controller。

        4 调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。 

        5 处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。 

        6   Http响应:视图负责将结果显示到客户端。

 

 

5.SpringMVC接口的解释

    1)DispacherServlet接口:

                Spring提供的前端控制器所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。

                DispacherServlet它是SpringMVC的核心 负责接收HTTP请求组织协调Spring MVC的各个组成部分

                    1) 截获符合特定格式的URL请求

                    2) 初始化DispatcherServlet上下文对应WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联

                    3) 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

 

    2)HandlerMapping接口:将客户的请求找到指定的collection

 

    3) Controller接口: 处理用户的请求,一旦collection处理完用户请求,则返回 ModelAndView对象给DispacheServlet前端控制器;

              从宏观角度考虑:DispacheServlet是整个Web应用的控制器

              从微观角度考虑:Collection是一次Http请求过程中的控制器

 

    4)  ViewResolver接口:     Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。

 

 

6.SpringMVC中的常用注解

  ⇒ @RequestMapping:  来映射请求,也就是通过它来指定控制器可以处理哪些URL请求

@Controller
//设置想要跳转的父路径
@RequestMapping(value="/car")
public class CarController {
    @Autowired
    private CarService carServcie;
// 设置方法下的子路经
    @RequestMapping(value="/goshopping",method=RequestMethod.POST)
    public String goshopping(
            @RequestParam("count") int [] count,
            @RequestParam("pid") Long [] pid,
            HttpServletRequest request
)

 参数:1.value 和 path  :他们的作用是相同的,相当于请求的路径,可以加在类上或者方法上

            2.method:   主要用来定义接收浏览器发来的何种请求 (method=RequestMethod.POS/RequestMethod.GET)

                    如果不明确指定method参数,那么可以接收任何类型的请求

                    如果明确指定,请求方式和接收方式不匹配,那么会出现 405 错误

                                

⇒ @RequestParam: 传递请求参数

@RequestMapping(value="/do_login", method= RequestMethod.POST)
public String doLogin(
        @RequestParam(value="username",defaultValue="user") String username,
        @RequestParam("password") String password,
        @RequestParam(value="code",required=true) String code){ 

参数:value:请求的参数名。

            required: 是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;当请求的参数没有code时,就会报404,如果将required=flase,表示参数可传递,可不传递,不会报错。

             defaultValue:默认值,表示如果请求中没有同名参数时的默认值。

 

⇒ @PathVariable :路径传参

@RequestMapping(value="/users/{userId}/topics/{topicId}")  
    public String test( @PathVariable(value="userId") int userId, @PathVariable(value="topicId") int topicId)

 

⇒ @ResponseBody: 后端向前端传递json数据返回去

          注解表示该方法的返回的结果直接写入 HTTP 响应正文, 一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebod后返回结果不会被解析为跳转路径,而是直接返回Json数据写入HTTP 响应正文中。

function login() {
    var datas = '{"username":"' + $('#username').val() + '","userid":"' + $('#userid').val() + '","status":"' + $('#status').val() + '"}';
    $.ajax({
        type : 'POST',
        contentType : 'application/json',
        url : "${pageContext.request.contextPath}/user/login",
        processData : false,
        dataType : 'json',
        data : datas,
        success : function(data) {
            alert("userid: " + data.userid + "username: " + data.username + "status: "+ data.status);
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
            alert("出现异常,异常信息:"+textStatus,"error");
        }
    });
};
@RequestMapping(value = "user/login")

@ResponseBody

// 将ajax(datas)发出的请求写入 User 对象中,返回json对象响应回去

public User login(User user) {   

    User user = new User();

    user .setUserid(1);

    user .setUsername("MrF");

    user .setStatus("1");

    return user ;

}

 

⇒ @RequestBody  :主要用来接收前端传递给后端的json字符串中的数据

    1. 将 HTTP 请求正文插入方法中,该注解用于读取body部分数据,然后绑定到返回的json对象上,再把对象数据绑定到 controller中的方法的参数上

@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中
public User login(@RequestBody User user) {   
// 这样就不会再被解析为跳转路径,而是直接将user对象写入 HTTP 响应正文中
    return user;    
}

    2.@RequestBody 与@RequestParam()的区别

              1).@RequestBody 与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个.

               2).@RequestParam注解接收的参数是来自于requestHeader中,即请求头,也就是在url中,格式为xxx?username=123&password=456;@RequestBody注解接收的参数则是来自于requestBody中,即请求体中。

               3). 如果为get请求时,后台接收参数的注解应该为@RequestParam,如果为post请求时,则后台接收参数的注解就是为@RequestBody

    3.注意点::

             1).直接通过浏览器输入url时,@RequestBody获取不到json对象,需要用java编程或者基于ajax的方法请求,将Content-Type设置为application/json

             2). multipart/form-data,上传文件form表中的属性值enctype 则@requestBody不能处理

<form method="post"action="http://w.sohu.com/t2/upload.do" enctype=”multipart/form-data”>
         <inputtype="text" name="desc">
         <inputtype="file" name="pic">
</form>

 

⇒ @Resource和@Autowired: 注入bean

      @Resource:名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,

      @Autowired: 类型进行自动装配的。如果当Spring上下文中存在不止一个IUservice类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题

1. @Autowired   
2. @Qualifier("userServiceImpl")   
3. public IUserService userService;  

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值