controller_controlleradvice - CSDN
精华内容
参与话题
  • 1. @Controller控制层 2. @Service() 3. @Repository持久层 springvmc采用经典的三层分层控制结构,在持久层,业务层和控制层分别采用@Repository、@Service、@Controller对分层中的类进行注解,而@Component...
    
    
    
    

    springvmc采用经典的三层分层控制结构,在持久层,业务层和控制层分别采用@Repository、@Service、@Controller对分层中的类进行注解,而@Component对那些比较中立的类进行注解

    1. @Controller控制层

    @Controller用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。
    @Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。
    @Controller标记在一个类上还不能真正意义上说它就是SpringMvc的控制器,应为这个时候Spring还不认识它,这个时候需要把这个控制器交给Spring来管理。有两种方式可以管理:
    <!--基于注解的装配-->
    <!--方式一-->
    <bean class="com.HelloWorld"/>
    <!--方式二-->
    <!--路径写到controller的上一层-->
    <context:component-scan base-package="com"/>
    

    Action层:

    package com;
    @Controller
    public class HelloWorld{
    	
    	@RequestMapping(value="/showRegUser")
    	public String printHello() {
    		return "hello";
    	}
    
        @Autowried
        private IocSerevce service;
        public void add(){
            service.add();
        }
    }
    
    component-scan默认扫描的注解类型是@Component,不过,在@Component的语义基础之上细化为@Reposity,@Service,@Controller.
    有一个use-defaultbao'i-filters属性,属性默认是true,表示会扫描抱下所有的标有@Component的类,并注册为bean,也就是@Component的子注解@Service,@reposity等
    如果只想扫描包下的@Controller或其他内容,则设置use-default-filters属性为false,表示不再按照scan指定的包进行扫描,而是按照指定包进行扫描
    <context:component-scan base-package="com" user-default-filters="false">
        <context:include-filter type="regex" expression="com.tan.*"/>
    </context:component-scan>
    

    当没有设置use-default-filters属性或属性为true时,表示基于base-package包下指定扫描的具体路径。

    2. @Service()


    此注注解属于业务逻辑层,service或者manager层
    默认按照名称进行装配,如果名称可以通过name属性指定,如果没有name属性,注解写在字段上时,默认去字段名进行查找,如果注解写在setter方法上,默认按照方法属性名称进行装配。当找不到匹配的bean时,才按照类型进行装配,如果name名称一旦指定就会按照名称进行装配

    Service层:

    @Service()
    public class IocService{
    
        @Resource
        private IIocDao iiocDao;
        public void add(){
            iiocDao.add();
        }
    }
    

    3. @Repository持久层

    此注解式持久层组件,用于标注数据访问组件,即DAO组件
    DAO层
    先定义一个接口

    public interface IIocDao{
        public void add();
    }
    

    然后实现类

    //Dao层中定义了一些接口
    //表示将Dao类声明为bean
    @Repository
    public class IocDao implements IIocDao{
        public void add(){
            System.out.println("调用了Dao");
        }
    }
    
    另外一种解释: @Repository对应数据访问层Bean
    @Repository(value="userDao")
    public class UserDaoImpl extends BeansDaoImpl<User>{
        ......
    }
    

    @Repository(value=“userDao”)注解告诉Spring ,让Spring创建一个名字叫做"userDao"的UserDapImpl实例。
    当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name=“userDao”)注解告诉Spring,Spring把创建好的userDao注入给Service即可。

     //注入userDao,从数据库中根据用户Id取出指定用户时需要用到
     @Resource(name = "userDao")
     private BaseDao<User> userDao;
    

    参考文章:https://www.cnblogs.com/xdp-gacl/p/3495887.html

    展开全文
  • Controller里面能写什么?

    万次阅读 2019-12-22 13:56:26
    就按MVC模式的开发模式来,我们项目中包含的结构层分别是view,controller,service,dao。 下面介绍一下各层的意义和项目运行流程: view是前台页面,用户发送请求时从前端的页面开始的,前端get到这个请求后会把...

    人工智能,零基础入门!http://www.captainbed.net/inner

    就按MVC模式的开发模式来,我们项目中包含的结构层分别是view,controller,service,dao。

    下面介绍一下各层的意义和项目运行流程:

    view是前台页面,用户发送请求时从前端的页面开始的,前端get到这个请求后会把请求和顺带参数信息传送到后台,后台接受这个请求找到对应的接口去执行对应的controller里的对应的方法,然后执行,然后controller会调用service层的业务逻辑,service有会去访问dao层来连接数据库。

    这是我们后端程序员都熟悉的开发模式,然而不论是刚开始从事程序开发的程序员还是有一定开发经验的程序员,有时候其实都特别搞得清楚controller层和service层之间的关系,会把他们的功能搞模糊,或者说是你虽然明确的知道他们两个的各自分工,但是在实际打开发过程中,就是会把一些代码写杂了,该写在service里的代码段写到controller里去了。

    所以,我们为了规范,有必要搞清楚controller中到底是写什么东西来着,

    1、这里只接收数据,然后校验数据,校验合法性和准确性,比如说登录的controller,接收到用户名和密码,你要判断长度是否符合要求,密码解密出来。

    2、有的必要的情况,创建一个对象,把数据补全,比如他的一些简单的属性,创建时间啊修改时间啊,还有初始值什么的。

    3、其他的都不要写在controller里,其他的复杂业务逻辑判断什么的,都放在service里头去。

     

    展开全文
  • controller层的作用

    万次阅读 2018-10-29 22:36:58
    以下从controller层开始:  package com.bootdo.common.controller; import com.bootdo.common.domain.City; import com.bootdo.common.domain.Province; import com.bootdo.common.service.SiteService; impo.....

    前端js部分链接

    以下从controller层开始: 

    package com.bootdo.common.controller;
    
    import com.bootdo.common.domain.City;
    import com.bootdo.common.domain.Province;
    import com.bootdo.common.service.SiteService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.Serializable;
    import java.util.List;
    
    @RequestMapping("/site")
    @Controller
    public class SiteController implements Serializable{
        private static final long serialVersionUID = 1L;
    
        @Autowired
        SiteService siteService;
    
    
    
    
    
        @GetMapping("/get_Province")
        @ResponseBody()
        public List<Province> initProvince() {
            return siteService.getAllProvince();
        }
    
        @GetMapping("/get_city")
        @ResponseBody()
        public List<City> getCity(HttpServletRequest request) {
            String codeP = request.getParameter("codeP");
            return siteService.getCity(codeP);
        }
    
        @GetMapping("/get_area")
        @ResponseBody()
        public List<Province> getArea(HttpServletRequest request) {
            String codeC = request.getParameter("codeC");
            List<Province> list = siteService.getArea(codeC);
            return list;
        }
    
    }
    

    在Java的开发中,controller层是连接前端和后端的。

    package com.bootdo.common.service;
    
    import com.bootdo.common.domain.City;
    import com.bootdo.common.domain.Province;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public interface SiteService {
        List<Province> getAllProvince();
    
        List<City> getCity(String codeP);
    
        List<Province> getArea(String codeC);
    }
    

    接受前端发来的请求,同时向后端发送请求,——>service 层——>serviceImpl实现service层,同时连接dao层,(在dao层中同样是接口)——>通过dao层去实现对数据库的操作——在XML文件中通过namespace完成连接dao层。

    package com.bootdo.common.service.impl;
    
    import com.bootdo.common.dao.AreaDao;
    import com.bootdo.common.dao.CityDao;
    import com.bootdo.common.dao.ProvinceDao;
    import com.bootdo.common.domain.City;
    import com.bootdo.common.domain.Province;
    import com.bootdo.common.service.SiteService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    
    @Service
    public class SiteServiceImpl implements SiteService {
    
        @Autowired
        ProvinceDao provinceMapper;
        @Autowired
        CityDao cityMapper;
        @Autowired
        AreaDao areaMapper;
    
        @Override
        public List<Province> getAllProvince() {
            List<Province> list = provinceMapper.list();
            return list;
        }
    
        @Override
        public List<City> getCity(String codeP) {
            return cityMapper.list(codeP);
        }
    
        @Override
        public List<Province> getArea(String codeC) {
            return areaMapper.list(codeC);
        }
    
    
    }

    下边是dao层代码:

    package com.bootdo.common.dao;
    
    import com.bootdo.common.domain.Province;
    import org.apache.ibatis.annotations.Mapper;
    
    import java.util.List;
    
    /**
     * 系统日志
     * @author chglee
     * @email 1992lcg@163.com
     * @date 2017-10-03 15:45:42
     */
    @Mapper
    public interface AreaDao {
    
        List<Province> list(String codeC);
    }
    

    最后就是操作数据库了。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.bootdo.common.dao.AreaDao">
    	<select id="list" resultType="com.bootdo.common.domain.Area" parameterType="java.lang.String">
    		select `id`,`code_a`,`name`,`code_c` from area WHERE code_c= #{codeC}
    	</select>
    </mapper>

    从这个里边的代码中可以看出来,对于不同的数据库,不同的表操作,可以通过在serviceImple层来变换。然后写不同的dao层和不同的XML文件来操作。

    展开全文
  • SpringMVC中的@Controller和@RequestMapping作用详解

    万次阅读 多人点赞 2020-10-11 11:12:39
    1.1 @Controller是什么 首先看个例子: @Controller表示在tomcat启动的时候,把这个类作为一个控制器加载到Spring的Bean工厂,如果不加,就是一个普通的类,和Spring没有半毛钱关系。 以下是两个常见的配置: ...

    1.1 @Controller是什么
    首先看个例子:

    
     

    @Controller表示在tomcat启动的时候,把这个类作为一个控制器加载到Spring的Bean工厂,如果不加,就是一个普通的类,和Spring没有半毛钱关系。

    以下是两个常见的配置:

    
     

     

    其中,base-package表示会扫描com.blogMgr目录下所有的包,一旦发现有个类上面加了类似于@Controller的注解,在容器启动的时候系统就会把它加载到Spring的Bean工厂,并且对其实例化。

     

    这也是为什么,我们只是写了Controller,但是从来没有在一个地方new这个Controller的原因,因为在Web容器启动的时候,这个Controller已经被Spring加载到自己的Bean工厂里面去了。

     

    这也就是所谓的Spring扫包机制。@Controller就是一个注解,当tomcat启动,我们会看到一些JAVA类挥舞着印有@Controller的旗子大喊:" Hey,SpringMVC,I'm  here,please take me to your bean factory!"

     

    1.2 @RequestMapping是什么

    在Controller中,总是会看到RequestMapping这个注解,看起来像是路径的跳转,以下列举了一个方便我们记忆的比喻。

     

    比如,有一天,我发现一部电影挺好看的,就在D盘建了一个文件夹,叫“电影”。里面放了两部电影,各自用一个文件夹来存放。

    1494897692559029057.png

     

    在上图中,我们可以看它的路径是“D:\电影”,该路径下又有一个文件夹【疯狂动物城 2016】,里面是这样的

    1494897702152088854.png

    那么,该文件的具体路径就是“D:\电影\疯狂动物城 2016”,现在我要访问这个资源,除了双击之外,是不是只需要在地址栏里面输入:“D:\电影\疯狂动物城 2016\疯狂动物城 2016.mp4”也可以呢?

    1494897725949001346.png

     

    是的,当然可以。

    1494897735746062558.png

    成功了,我们通过url的方式得到了我们想要的资源文件!

     

    现在我们把这个文件复制一份,拷贝到相同路径下

    1494897745480004347.png

    如果我尝试将第一个MP4文件的名字也改为“疯狂动物城 2016.mp4”,则会弹出提示如下

    1494897751918040594.png

    可见,在同一个路径下,不能有两个重名的文件。

     

    同理,如果我在同一个Controller里面设置两个相同的RequestMapping

    1494897766027073622.png

     

    编译是可以通过的,但是当我启动tomcat后,

    我通过url “http://localhost:8088/BlogMgr/blog/index”来访问,就会报错

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'blogController' bean method

     

    Ambiguous mapping found表示有一个路径模棱两可,也就是路径重名了,系统无法进行映射,所以报错了。这个和无法在同一个文件夹下面创建两个同名文件,是一个道理。

     

    那么,如果我一定要再创建一个“疯狂动物城 2016.mp4”的文件该怎么办呢

    1494897778730063720.png

    1494897786777045482.png

     

    然后,我把这个文件放在另一个文件夹里面就可以了。

     

    同理,我也可以另外建一个Controller,Controller类上面的RequestMapping叫“/blog2”,再在里面写一个一模一样的RequestMapping就肯定没有问题了。

     

    小结

    一个web项目本身就是一个系统,和操作系统一样,可以把项目当做一个系统,一个应用程序。人为什么要使用电脑,因为电脑可以

     

    1.给我们想要的资源(比如.avi)

    2.帮我们做事。

     

    在一个系统中,如果没有图形界面,我们要访问一个资源,必然是通过一个黑窗口来访问的,就是通过路径来访问的。一个B/S架构的web项目,就是一个类似于命令行一样的应用程序,我们唯有通过url,也就是路径去获得我们想要的资源和服务。

     

    再来看RequestMapping,最终对应的必然是一个方法,方法的功能无非就是进行一些业务的操作,或者返回一个什么东西。

     

    比如

    1494897796684010043.png

     

    我们就是通过这个方法获得了想要的jsp页面,RequestMapping的作用就是提供了一个句柄,让我们可以访问到对应的方法,最终获得我们想要的东西。综上所述,RequestMapping就是一个映射路径。

      

    1.3 @ResponseBody的作用
    在Controller里面,我们经常可以看到@ResponseBody这个注解,它的意思很简单,就是说明这个方法返回的东西会通过IO流的方式写入到浏览器。

    比如我们写一个方法:

    
     

    最终在浏览器获得的效果是这样的:

    1494897809137032549.png

     

    展开全文
  • Spring Boot(三)Controller的使用

    千次阅读 2018-09-07 14:04:57
    写在前面:完成这次博文的时间拖的格外久,因为在学习的时候,发现了一些不能理解的操作:注解,此外连接数据库进行操作也用了点时间。注解这个东西很神奇呀,因为以前用JSP没接触过,所以翻了翻... 关于Controller...
  • Controller

    千次阅读 2018-10-14 23:06:30
    在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个...
  • MVC中的Controller都有哪些作用?

    万次阅读 2016-11-02 13:50:06
    Controller 可以决定要显示哪一个View。 Controller 负责定义和调用Model。 控制器接受用户的输入并调用模型和视图去完成用户的需求。当web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理...
  • controller

    2020-07-29 14:20:48
    androidHost模式下一个简单的USB通信的例子。
  • Controller的使用

    千次阅读 2018-08-25 16:51:45
    @RestController:Spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controller @RequestMapping:配置url映射  @RequestMapping("/hello")放在类前面用于给整个类设置映射。  @...
  • Spring Boot Controller

    万次阅读 多人点赞 2019-06-12 15:42:58
    接上篇文章,HelloWorld程序中我们已经创建了一个HellController,里面包含了响应JSON的方法,本文针对Controller再做一下讲解。回顾上篇文章,我们在Controller中使用 @RestController 注解,该注解是Spring 4.0...
  • Realtek PCIe GBE Family Controller 驱动

    千次下载 热门讨论 2020-07-28 23:33:35
    Realtek PCIe GBE Family Controller 驱动
  • SpringMVC Controller单例和多例

    万次阅读 多人点赞 2020-10-17 08:56:10
    对于SpringMVC Controller单例和多例,下面举了个例子说明下. 第一次:类是多例,一个普通属性和一个静态属性。 结果:普通属性:0.............静态属性:0 普通属性:0.............静态属性:1 普通属性:0......
  • 控制器原则(Controller Principle) (1)问题 谁应该负责处理一个输入系统事件? (2)方案 把接收或者处理系统事件消息的职责分配给一个类。这个类可以代表: 整个系统、设备或者子系统; 系统事件发生时对应的...
  • 可以从 HTTPServletRequest,简单类型参数,pojo 类型参数,包装类,集合类型的参数中获取请求中的参数,当然,还可以通过 json 格式的字符串来获取
  • 本文是《k8s自定义controller三部曲》的终篇,编写controller的代码,通过监听API对象的增删改变化做出业务方面的响应
  • Spring Boot Junit 测试Controller

    万次阅读 2020-01-07 10:30:37
    Controller: package com.xiaolyuh.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.spring...
  • 转载请标明出处: ... 本文出自方志朋的博客 使用Spring Cloud做项目的同学会使用Feign这个组件进行远程服务的调用,Feign这个组件采用模板的方式,有着优雅的代码书写规范。核心原理对Feign等相关注解进行解析,并...
  • springmvc不进入Controller导致404

    万次阅读 多人点赞 2018-12-13 11:26:57
    目录 一.摘要 二.出现404的分类以及会导致的原因 1.启动项目后,无法访问主页出现的404; ...2.项目启动并且成功进入主页后,访问其他页面出现的404 ...三....3.1.先附上并简单介绍一下我的工程结构目录图: ...
  • SpringMVC的Controller中常用的三种返回值类型

    万次阅读 多人点赞 2019-12-09 14:15:16
    的第三范式 返回String类型(逻辑视图) 在返回值为String类型的时候可以调用重定向和转发的标签。 用redirect和forward返回,注意:用这两个标签必须写全路径,不适应视图解析器的逻辑视图...
  • SpringBoot Controller接收参数的几种常用方式

    万次阅读 多人点赞 2018-05-25 00:56:47
    第一类:请求路径参数 1、@PathVariable 获取路径参数。即url/{id}这种形式。 2、@RequestParam 获取查询参数。即url?name=这种形式 例子 GET ...对应的java代码: @GetMapping("...public void de...
1 2 3 4 5 ... 20
收藏数 845,021
精华内容 338,008
关键字:

controller