SpringMVC-狂神

SpringMVC优点:

轻量级,简单易学

高效,基于请求响应的MVC框架

与Spring无缝结合

功能强大:RESTful风格,数据验证,格式化,本地化,主题等

简单灵活

SpringMVC全部围绕DispatchServlet中心控制器来进行。DispatchServlet的任务是将请求分发到不同的处理器

DispatcherServlet源码:

 SpringMVC的运行原理:

1,用户发起请求,被在web.xml中注册的DispatcheerServlet拦截请求,

2,HandleMapping为处理器映射器,由DispatcherServlet自行调用,HandlerMappping由请求的url查找Handler处理器,这个处理器在注册bean中自己定义。

3,HandlerExecution表示具体的Handler处理器,其作用是根据url查找控制器,如url上被查找的控制器为:hello

4,HandlerExecution将解析后的信息传递给DispaerServlet,如解析控制器映射。

5,通过HandlerMapping中得到的Handle处理器,去寻找HandlerAdapter处理器适配器,及找到对应的Controller,

6,Controller调用业务层,

7,调用完service后,Controller 返回具体的信息ModelAndView给HandlerAdapter处理器适配器

8,HandlerAdapter将返回的具体业务信息如:ModerAndView返回给DispatcherServlet

9,DispatcherServlet接收到处理器适配器返回的ModelAndView之后,去寻找视图解析器ViewResolver,

10,视图解析器ViewResolver将视图名传递给DispatcherServlet

11,DispatcherServlet根据返回的视图的名字,选择到底需要调用那个视图。

12,返回视图给用户。

RestFuf风格:资源定位及资源操作的风格,不是一种协议,只是一种风格。

原来使用的风格:http://localhost:8080/id=1&name=zs

RestFul风格:http://mp.csdn.net/id/1/name/zs

优点:可以让软件设计更简洁,更有层次,更有易于缓存的实现等机制。

原始的操作方式:一个方法对应着一个功能,通过url中的不同参数来实现不同的效果。

RestFul风格:可以通过不同的请求方式来实现不同的效果。

SpringMVC:Ajax:异步无刷新请求

SpringMVC:基于MVC开发模式的框架,用来优化控制器,是Spring家族的一员,同样具备IOC和AOP

MVC:一种开发模式,是模型视图控制器的简称,所有的web应用都是基于MVC的开发模式的。

M:Model模型,包含实体类,业务逻辑层,数据访问层

V:View:包含html,JavaScript,vue等,用来呈现数据的

C:Control:控制器,接受客户端请求,并返回响应给客户端的组件,Sevrlet就是组件

SpringMVC优点:轻量级基于MVC的框架,具备IOC和AOP,易上手,完全基于注解开发。

SpringMVC的执行流程:

基于直接的SpringMVC框架开发步骤

1,新建Webapp模板

2,完善Maven目录

3,修改pom.xml文件,添加SpringMVC的依赖,添加Servlet依赖

4,添加SpringMVC.xml配置文件, 指定包扫描,添加视图解析器

5,删除web.xml,添加web.xml文件,

6,在web.xml文件中注册springmvc框架(所有web请求都是基于servlet的)

7,开发页面

8,开发控制器(Servlet),他是一个普通的类

9,添加Tomcat进行 测试

Spring注解

1,@Controller:将控制层的创建对象的功能交给Spring容器

2,@RequestMapping:映射服务器访问的名称

1)此注解可加在方法上,为某个方法添加一个路径,通过这个路径可以访问这个方法。

@RequestMapping("demo")
    public String domo(){
        return "demo";
    }

2)可以加载类名上,相当于添加一个包路径(虚拟路径)

比如:在yyk包下有两个类:A和B,同时具有方法C,并且方法C被@RequestMapping(“/index”)注解修饰,如果此时访问C方法,就会冲突,所以此时在A和B上添加@RequestMapping(“A”)就可以通过/A/index访问到A类中的C方法。

3),此注解可以区分get和post请求

4)RequestMapping5种属性注入的方式优化

a,值注入

@RequestMapping("index1")

public String index(String name,int age){ return "main";}

<input type = “text” name = "name">

<intput type = "text" name = "age">

<input type = "button" value = “提交”>

保证提交的数据name属性和方法的参数相同,Spring会自动对属性进行注入。

b,对象注入

class User{String name;int age; 构造方法和Setter方法}

@RequestMapping("index2")

public String index(User user){sout(user); return "main";}

<input type = “text” name = "name">

<intput type = "text" name = "age">

<input type = "button" value = “提交”>

保证从input标签中传入的name值和实体类种的对象名一致们,Spring会自动将数据进行封装

c,动态占位符提交

@RequestMapping("index3/{name}/{age}")

public String index(

        @PathVariable

        String name;

        @PathVariable

        int age;

){ sout(age + " ," +name); return "main"}

<a href = "${pageContext.request.contextPath}/index/张三/22.do">动态提交</a>

使用动态占位符提交数据,一般使用在超链接中,将需要传入的属性,在请求路径种使用/参数/参数1的形式进行传递,在接收端使用/{name}/{age}的形式进行属性注入。

d,请求参数映射

@Request("index4")

public String index(@ReuqestParam("name") String uname,@RequestParam("age") int uage){sout(uage+","+uname);return "main"; }

<input type = “text” name = "name">

<intput type = "text" name = "age">

<input type = "button" value = “提交”>

当请求中的参数和方法中的参数名不一致时,使用@RequestParam注解,将请求中的注解注入到方法的参数中。

e,手工提前数据使用Request对象提取

@ReuqestMappping("index5")

public String index(HttpServletRequest request){

String name = request.getParamter("name");

int age = Integer.parseInt(request.getParamter("age"));

return "main";}

<input type = “text” name = "name">

<intput type = "text" name = "age">

<input type = "button" value = “提交”>

中文乱码配置过滤器:

action方法的返回值:

1)String:返回客户端资源的地址,自动拼接前缀后缀,还可以屏蔽自动拼接字符串,指定返回路劲。

2)Object:返回Json格式的对象,自动将对象或集合转为json,使用jackson工具进行转换,必须要添加jackson依赖。一般用于ajex请求。

3)void:一般用于ajax请求。

4)基本数据类型:用于ajax请求。

5),ModelAndView

ajax请求步骤:

1,添加jackson依赖

2,在webapp目录下新建js目录,添加Jquery的函数库

3,导入函数库在html中

4,在方法上添加注解@ResponseBody注解

5,在springMVC.xml中添加注解驱动<mvc:annotationdriven/>,用来解析@ResponseBody注解

     

3,@ResponseMapping:用来处理ajax请求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值