首页天道酬勤controller是干什么的,controller网站

controller是干什么的,controller网站

张世龙 05-13 09:41 73次浏览

转载来源: https://www.cn blogs.com/feng Rui-/p/6074381.html 3358 www.Sina.com /

在SpringMVC中,控制器Controller处理dispatcher servlet分发的请求,在业务流程层处理用户请求的数据,然后将其封装到Model中并返回相应的View进行显示SpringMVC提供了一种简单的定义控制器的方法。 不需要继承特定类或实现特定接口,而是使用@Controller标记类为Controller,然后使用注释(如@RequestMapping或@RequestParam )请求URL 可以从控制器的方法参数中灵活地检索,而不直接依赖于http servlet对象,如HttpServletRequest或HttpServletResponse。 首先,为了对控制器有一个初步的图像,下面定义了一个简单的控制器。

@ controllerpublicclassmycontroller { @ request mapping ('/show view ' ) public ModelAndView showView ) { modelandviewmodelannnnnew modelandview.addobject('model中必须包含的属性名称','对应的属性值,这是对象'); 返回模型视角; }在上面的示例中,@Controller被标记在MyController类的上方,因此MyController类是SpringMVC Controller对象,@ request mapping (“/shhing”) 指示在请求showView.do时访问MyController的showView方法,并返回包含Model和View的ModelAndView对象。一、简介

@Controller用于标记类,使用它标记的类是SpringMVC Controller对象。 分发处理器扫描正在使用注释的类的方法,并检测该方法是否正在使用@RequestMapping注释。 @Controller只是定义了控制器类,使用@RequestMapping注释的方法才是实际处理请求的处理器。 这将在后面叙述。

如果只使用@Controller标记类,则不能将其标记为SpringMVC的控制器类。 因为此时Spring还没有识别。 那么,怎么做Spring才能知道呢? 此时,我们需要将该控制器类交给Spring进行管理。 以MyController为例

@ controllerpublicclassmycontroller { @ request mapping ('/show view ' ) public ModelAndView showView ) { modelandviewmodelannnnnew modelandview.addobject('model中必须包含的属性名称','对应的属性值,这是对象'); 返回模型视角; }此时,有两种方法可以将MyController交给Spring来识别我们标记的@Controller。

第一种方法是在SpringMVC配置文件中定义MyController的bean对象。

bean class=' com.host.app.web.controller.my controller ' /第二种方法是在SpringMVC配置文件中标记为@Controller的控制器位置

context 3360 component-scan base-package=' com.host.app.web.controller ' context 3360 exclude-filter type=' ano llle

can >

注:上面 context:exclude-filter 标注的是不扫描 @Service 标注的类

三、使用 @RequestMapping 来映射 Request 请求与处理器
可以使用@RequestMapping 来映射URL 到控制器类,或者是到Controller 控制器的处理方法上。当@RequestMapping 标记在Controller 类上的时候,里面使用@RequestMapping 标记的方法的请求地址都是相对于类上的@RequestMapping 而言的;当Controller 类上没有标记@RequestMapping 注解时,方法上的@RequestMapping 都是绝对路径。这种绝对路径和相对路径所组合成的最终路径都是相对于根路径“/ ”而言的。

@Controllerpublic class MyController { @RequestMapping ( "/showView" ) public ModelAndView showView() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName( "viewName" ); modelAndView.addObject( " 需要放到 model 中的属性名称 " , " 对应的属性值,它是一个对象 " ); return modelAndView; }}

在这个控制器中,因为MyController 没有被@RequestMapping 标记,所以当需要访问到里面使用了@RequestMapping 标记的showView 方法时,就是使用的绝对路径/showView.do 请求就可以了。

@Controller@RequestMapping ( "/test" )public class MyController { @RequestMapping ( "/showView" ) public ModelAndView showView() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName( "viewName" ); modelAndView.addObject( " 需要放到 model 中的属性名称 " , " 对应的属性值,它是一个对象 " ); return modelAndView; }}

这种情况是在控制器上加了@RequestMapping 注解,所以当需要访问到里面使用了@RequestMapping 标记的方法showView() 的时候就需要使用showView 方法上@RequestMapping 相对于控制器MyController上@RequestMapping 的地址,即/test/showView.do 。

(一)使用 URI 模板
URI 模板就是在URI 中给定一个变量,然后在映射的时候动态的给该变量赋值。如URI 模板http://localhost/app/{variable1}/index.html ,这个模板里面包含一个变量variable1 ,那么当我们请求http://localhost/app/hello/index.html 的时候,该URL 就跟模板相匹配,只是把模板中的variable1 用hello 来取代。在SpringMVC 中,这种取代模板中定义的变量的值也可以给处理器方法使用,这样我们就可以非常方便的实现URL 的RestFul 风格。这个变量在SpringMVC 中是使用@PathVariable 来标记的。

在SpringMVC 中,我们可以使用@PathVariable 来标记一个Controller 的处理方法参数,表示该参数的值将使用URI 模板中对应的变量的值来赋值。

@Controller@RequestMapping ( "/test/{variable1}" )public class MyController { @RequestMapping ( "/showView/{variable2}" ) public ModelAndView showView( @PathVariable String variable1, @PathVariable ( "variable2" ) int variable2) { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName( "viewName" ); modelAndView.addObject( " 需要放到 model 中的属性名称 " , " 对应的属性值,它是一个对象 " ); return modelAndView; }}

在上面的代码中我们定义了两个URI 变量,一个是控制器类上的variable1 ,一个是showView 方法上的variable2,然后在showView 方法的参数里面使用@PathVariable 标记使用了这两个变量。所以当我们使用/test/hello/showView/2.do 来请求的时候就可以访问到MyController 的showView 方法,这个时候variable1 就被赋予值hello ,variable2 就被赋予值2 ,然后我们在showView 方法参数里面标注了参数variable1 和variable2 是来自访问路径的path 变量,这样方法参数variable1 和variable2 就被分别赋予hello 和2 。方法参数variable1 是定义为String 类型,variable2 是定义为int 类型,像这种简单类型在进行赋值的时候Spring 是会帮我们自动转换的

在上面的代码中我们可以看到在标记variable1 为path 变量的时候我们使用的是@PathVariable ,而在标记variable2 的时候使用的是@PathVariable(“variable2”) 。这两者有什么区别呢?第一种情况就默认去URI 模板中找跟参数名相同的变量,但是这种情况只有在使用debug 模式进行编译的时候才可以,而第二种情况是明确规定使用的就是URI 模板中的variable2 变量。当不是使用debug 模式进行编译,或者是所需要使用的变量名跟参数名不相同的时候,就要使用第二种方式明确指出使用的是URI 模板中的哪个变量。

除了在请求路径中使用URI 模板,定义变量之外,@RequestMapping 中还支持通配符“* ”。如下面的代码我就可以使用/myTest/whatever/wildcard.do 访问到Controller 的testWildcard 方法。

@Controller@RequestMapping ( "/myTest" )public class MyController { @RequestMapping ( "*/wildcard" ) public String testWildcard() { System. out .println( "wildcard------------" ); return "wildcard" ; } }

(二)使用 @RequestParam 绑定 HttpServletRequest 请求参数到控制器方法参数

@RequestMapping ( "requestParam" ) public String testRequestParam( @RequestParam(required=false) String name, @RequestParam ( "age" ) int age) { return "requestParam" ; }

在上面代码中利用@RequestParam 从HttpServletRequest 中绑定了参数name 到控制器方法参数name ,绑定了参数age 到控制器方法参数age 。值得注意的是和@PathVariable 一样,负责的大米没有明确指定从request 中取哪个参数时,Spring 在代码是debug 编译的情况下会默认取更方法参数同名的参数,如果不是debug 编译的就会报错。此外,当需要从request 中绑定的参数和方法的参数名不相同的时候,也需要在@RequestParam 中明确指出是要绑定哪个参数。在上面的代码中如果我访问/requestParam.do?name=hello&age=1 则Spring 将会把request请求参数name 的值hello 赋给对应的处理方法参数name ,把参数age 的值1 赋给对应的处理方法参数age 。

在@RequestParam 中除了指定绑定哪个参数的属性value 之外,还有一个属性required ,它表示所指定的参数是否必须在request 属性中存在,默认是true ,表示必须存在,当不存在时就会报错。在上面代码中我们指定了参数name 的required 的属性为false ,而没有指定age 的required 属性,这时候如果我们访问/requestParam.do而没有传递参数的时候,系统就会抛出异常,因为age 参数是必须存在的,而我们没有指定。而如果我们访问/requestParam.do?age=1 的时候就可以正常访问,因为我们传递了必须的参数age ,而参数name 是非必须的,不传递也可以。

iir数字滤波器的设计实验,iir和fir数字滤波器的比较 service层可以调用不同dao,mybatis的dao层实现