博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC控制流程与简易配置方案
阅读量:5974 次
发布时间:2019-06-19

本文共 4415 字,大约阅读时间需要 14 分钟。

hot3.png

整体流程核心原理概述:

1.       用户发送请求给服务器。urluser.do  

 (1)user.do为页面请求。

2.       服务器收到请求。发现Dispatchservlet可以处理。于是调用DispatchServlet

 (1)Dispatchservlet前置控制器:配置在web.xml,用于拦截匹配的请求。

3.       在DispatchServlet内部,通过HandleMapping检查这个url有没有对应的Controller。如果有,则调用Controller

(1)HandleMapping处理器映射

(2)Controller控制器

4、    Control开始执行

5.       Controller执行完毕后,如果返回字符串,则ViewResolver将字符串转化成相应的视图对象;如果返回ModelAndView对象,该对象本身就包含了视图对象信息。

(1)ViewResolver视图解析器:在DispatchServlet的XX-servlet.xml中配置。

(2)ModelAndview对象:作用有两个第一个是设置转向地址,第二个是回写数据到页面上。

6.       DispatchServlet将执视图对象中的数据,输出给服务器。

7.       服务器将数据输出给客户端。

 SpringMVC配置:

一:配置web.xml

      1)问题:spring项目中有多个配置文件mvc.xml、dao.xml

      2)解决:在web.xml中

       
             
contextConfigLocation
             
/WEB-INF/xxx/*.xml
          

          其中: xxx表示xml文件路径             

                     *.xml表示后缀名为xml的任意文件

    3)可以使用逗号分隔

二:controller

       1:spring mvc 中将  controller  认为是 MVC中的C --控制层

       2:规范命名 类名  xxxController

       3:如果不基于注解:该类需要继承  CommandController   或者 其他很多 参见  spring帮助

            如果基于注解:在类名前加上@controller  

      4:补充:将类名前加上该注解,当spring启动  或者web服务启动  spring会自动扫描所有包(当然,这个可以设置)

         作用:  就是告诉服务器  这个类是MVC中的C    这个类可以接收用户请求    处理用户请求

三:问题:如何接收用户请求

     1:假设用户请求URL 是: 项目名/xxx.do      do不do都一样  不管这个do  你用什么都可以

     2:这个时候,spring开始在所有的 C 中,找对应的处理请求的方法

     3:在任意的可以C的类中,在你想要处理此请求的方法定义的前面

         @RequestMapping("/xxx")          这个时候的xxx  就是用户请求的xxx     不管do         public  String  方法名()         {           return  “aaa”;                                     返回一个字符串,非常有用   要注意   用来决定要显示的MVC的 V  视图层 是哪个          }

四:上面  配置好了  MVC的   C  也就是 控制层      在方法中返回字符串  用来决定MVC的V  视图层

       问题:如何让spring 去扫描类  建立关联

       1:在配置文件中  (spring)的 假设是 mvc.xml  中

       2:加入 <context:component-scan  base-package="包路径"/> 

五:问题 如何返回到视图层 V

     1: 解决:此时,需要在配置文件中,加入视图解析器    有很多种 ,太多了

     2:这里用基于jsp/jstl  视图

     3:在web.xml 中加入bean 配置

       
         前缀      
                  后缀

小结:通过上述5步  ,基本完成 C   V 的配置

 1:spring 中的C  一般起类名     XXXController   在这个类里面 需要加入@controller  标志这个类可以作为请求处理类   也就是 控制类

2:这个控制类里面可以有很多方法,哪个方法用来处理用户请求,就在那个方法前面 加  @RequestMapping(“/xxxxx请求路径”)

3;当请求处理完毕后  返回值  决定了  该处理完毕后  用户将跳转到那个页面   这个很重要 

4:例如

@RequestMapping("/xxx")          这个时候的xxx  就是用户请求的xxx     不管do public  String  方法名() {   return  “aaa”;                          返回一个字符串,非常有用   要注意   用来决定要显示的MVC的 V  视图层 是哪个 }

   返回 aaa 根据配置文件中的 视图处理器配置  加入前缀  后缀,页面将跳转到 /WEB-INF/views/aaa.jsp

@RequestMapping 

@RequestMapping:是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

1 问题:有多个 @RequestMapping 

@controller @RequestMapping("/aaa")           ----------------->类级别  可以不需要  如果要了  下面所有的请求路径前 都需要加入  /aaa public class ccccontroller{      @RequestMapping("/bbb") --------------------->方法级别 必须有   决定这个方法处理哪个请求     如果有类级别 /aaa/bbb       public String xxx(){                                                                                                                             如果没有 /bbb              retrun "xxx";      } }

2:问题:接收用户请求参数 值

    1)请求1: /test/start.do?name=zhangsan

         请求2: /test/start/zhangsan.do

        在请求2中 将参数作为请求URL 传递           感觉用的不习惯 

        采用 URL模板

    2)@RequestMapping("/start/{name}")    这个name  随便  啥都可以

         public String start(@PathVariable("name") string name){       反正和上面的对应

             return      方法体里面就可以直接获得参数

        }

    3)包含多个  @RequestMapping ("/start/{name}/{age}")

3  问题  不同请求方法  用不同处理方法   get  post

   @RequestMapping (value="/start" ,method=RequestMethod.GET)    处理post   就换成  POST

关于@RequestMapping的传递参数与函数返回值

@RequestMapping("/xxxx")

public String  aaa(){

}

在处理用户请求的方法里 ,

1:参数

   a)aaa()无参

   b)aaa(@PathVariable(" ")  类型  变量)  用来接收将参数作为URL传递的类型处理

   c)aaa(Httpservletrequest  啊  respons啊   session啊  等等) 呵呵  servlet

          注意 这里使用session  必须是sessio 已经存在

          如何让session存在     request.getSession()           

                                        session.setattribute()

                                        进入jsp页面  创建session对象

  d)aaa(@RequestParam  类型名  变量名) 

        就是省略了  request.getParamter     变量名 和 URL里面的参数名相同

 

e)aaa(@cookValue  类名  变名)        (@RequestHeader("user-Agent")  类名  变名 )

     读  cookie                                          读HTTP头

f)aaa(PrintWriter  out)  代替了 在方法体里面搞一个 PrintWriter  out  = new PrintWriter();

    参数里面 就生产了这个对象    方法体里面可以直接使用   out.println()

g) aaa(Map model)

     这个很重要  在方法体中直接可以使用 model   呵呵  看名字就知道是什么了吧  model----》模型层  装数据啊  实体类啊 

    在方法里面可以用 model.put("key" ,value)   就是map 类的对象   键值对

h)aaa(User user)   这个User 是实体类

     作用:用户发出带参数请求   xxx .do?name=a&pw=b

               在User 这个实体类中 有对应字段   自动将值传入实体类    感觉不实际 不好用  呵呵 感觉而已

2:返回值

    a) void  

         1)一般用在out 直接输出

         2)但他还是要返回一个页面的  不然用户看什么

              返回规则:生成隐含视图    

                               按照请求路径  ${appname}/test/xxx.do

                              取出 test/xxx    根据配置文件  将前缀 后缀 加上   

              这个看实际开发情况吧  说不清楚了

   b)String

         1):最常用  简单

         2)根据返回字符串  将配置文件里面的前缀  后缀 加上

   c)返回任意类型对象

          1)模型层   自动填充到  model中   就是Map      例如 model("user",user)

          2) 视图层    与void 一样 

   d)返回 list

       public List<User> queryUser()

{

}

        1)模型层  自动加入model("userList",user)  页面使用

       2)页面读取  request.getAttribute("userList")

            ${userList}

 

转载于:https://my.oschina.net/fal6112/blog/660116

你可能感兴趣的文章
小梅科普:白帽子-高端信息安全培训
查看>>
JavaScript学习总结(9)——JS常用函数(一)
查看>>
Maven+SpringMVC+MyBatis实现系统(一)
查看>>
易宝典文章——如何在Exchange 2010中使用PowerShell文本文件批量移动邮箱
查看>>
智能dns 根据地区解析
查看>>
VS2012配置Git并连接到osc@git
查看>>
索尼高清影视技术学院参观观后感
查看>>
jQuery 文本编辑器插件 HtmlBox 使用
查看>>
生活随笔
查看>>
多台服务器联合工作之samba+wordpress
查看>>
ssh登录服务器慢解决方法
查看>>
Qmake does not support build directories below the source directory
查看>>
linux下mysql5.5.15源码包编译安装
查看>>
linux逻辑卷的建立
查看>>
Red Hat Enterprise Linux7防火墙配置详细说明
查看>>
tomcat下web应用的基本结构,各文件夹里面存放什么?
查看>>
第三节 信息系统应用发布
查看>>
vmware安装CentOS后,克隆后网卡不能启动的解决方法
查看>>
nginx配置文件详解与配置文件优化(三)
查看>>
监控软件zabbix使用snmp协议
查看>>