SpringMvc必会知识 你不会请来砍我

前言

整理了一些必会的知识,你要是不会,就来砍死博主

image

常用注解

@RequestParam
将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
案例:

语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
 
value:参数名
 
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
 
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
http://localhost:8080/upmovie/movie/getbyid?name=xiaoming
 @RequestMapping("show16")
    public ModelAndView test16(@RequestParam("name")String name){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "接收普通的请求参数:" + name);
        return mv;
    }

@PathVariable
从一个URI模板里面取值来填充

http://localhost:8080/upmovie/movie/getbyid/19
@RequestMapping(value = "/getbyid/{id}", method = RequestMethod.GET)
	@ResponseBody
	private Map<String, Object> getbyid( HttpServletRequest request,@PathVariable("id") int idnum){
		Map<String, Object> modelMap = new HashMap<String, Object>();
		modelMap.put("idnum", idnum);
		return modelMap;
	}

@RequestParam 和 @PathVariable 注解是用于从 request 中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从 request 里面拿取值,而 @PathVariable 是从一个URI模板里面来填充

@RequestMapping是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。用于类上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;方法的级别上注解表示进一步指定到处理方法的映射关系。

@RequestMapping("/Student");//也相当于@RequestMapping(value="/Student");

常用有三种属性:
value:指定请求的实际地址,value 可以省略不写;

method 属性:指定请求的类型,主要有GET、PUT、POST、DELETE,默认为 GET。

produces 属性:指定返回内容类型,如 produces = “application/json; charset=UTF-8”。

自动扫描组件

手动配置Bean

在xml配置文件中,声明一个bean或者component,然后Spring容器会检查和注册你的bean或component

<bean id="customerService" class="com.lei.customer.services.CustomerService">
        <property name="customerDAO" ref="customerDAO" />
</bean>

<bean id="customerDAO" class="com.lei.customer.dao.CustomerDAO" />
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});
 
CustomerService cust = (CustomerService)context.getBean("customerService");

使用自动扫描组件

使用 @Component @Controller @Service @Repository

 <context:component-scan base-package="com.lei.customer" />

自定义扫描组件名称

@Service("AAA")
public class CustomerService 
...
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});
CustomerService cust = (CustomerService)context.getBean("AAA");

在扫描中过滤组件

1.在很多配置中一般都会吧Spring-common.xml和Spring-MVC.xml进行分开配置,这种配置就行各施其职一样,显得特别清晰。

在Spring-MVC.xml中只对@Controller进行扫描就可,作为一个控制器,其他的事情不做。

在Spring-common.xml中只对一些事务逻辑的注解扫描

2.现在给定一个项目包的机构:

com.fq.controlller

com.fq.service

就先给定这两个包机构

Spring-MVC.xml中有以下配置:

<!-- 扫描@Controller注解 -->
<context:component-scan base-package="com.fq.controller">
    <context:include-filter type="annotation"
        expression="org.springframework.stereotype.Controller" />
</context:component-scan>

可以看出要把最终的包写上,而不能这样写base-package=”com.fq”。这种写法对于include-filter来讲它都会扫描,而不是仅仅扫描@Controller。哈哈哈,这点需要注意。他一般会导致一个常见的错误,那就是事务不起作用,补救的方法是添加use-default-filters=”false”。

在Spring-common.xml中有如下配置:

<!-- 配置扫描注解,不扫描@Controller注解 -->
<context:component-scan base-package="com.fq">
    <context:exclude-filter type="annotation"
        expression="org.springframework.stereotype.Controller" />
</context:component-scan>

可以看到,他是要扫描com.fq包下的所有子类,不包含@Controller。对于exculude-filter不存在包不精确后都进行扫描的问题。

image

创作不易,如果本篇文章能帮助到你,请给予支持,赠人玫瑰,手有余香,虫虫蟹蟹观众姥爷了

猜你喜欢

转载自blog.csdn.net/qq_49313444/article/details/107359974