springmvc 学习(二) 使用注解开发

学习(一)内我们发现其实还要配置很多东西,这里都将使用注解进行配置,实际开发也是这样

首先web.xml文件 内容保持不变(几乎不变),依旧如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-control.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

<context:component-scan base-package="" /> 表示扫描使用@component注解的包,这个包下的所有类,带了这个注解,都自动注册。

 @Controller:web层 @Service:service层 @Repository:dao层 这三个注解的类也会被自动注册

 

<mvc:default-servlet-handler/> 表示过滤请求,因为所有的请求的都会走,前端控制器,当没有对应url就会报404,这是有这个过滤器时,就会先查询对应静态资源,没有再报404

 

<mvc:annotation-driven/> 这个表示自动注册 BeanNameUrlHandlerMapping SimpleControllerHandlerAdapter 之前这两个类 

这个模板几乎是不变的

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context ="http://www.springframework.org/schema/context"
       xmlns:mvc ="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
    <context:component-scan base-package="com.hys.controller"/>
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

使用注解开发

@Controller 不仅表示了这个类会自动注册bean,也表示这个是控制器类,当方法的返回值是string类型,会传到视图解析器进行解析,通过前后缀拼接进行跳转

当不想string返回值进行跳转,可以在方法上使用@ResponseBody 表示直接返回字符串,这个就和之前的resp.getWriter().println();直接把数据响应给前端,或者直接在类上用@RestController注解,也表示不会进行视图解析器跳转。

@ResponseBody 经常用到,因为前后端分离,通常传给前端就是字符串~

@RequestMapping 的作用域是类或者方法,当在方法上时,类下所有的方法默认加了一层路径,如下:这时候前端需要 xx/hello/h1就可以访问这个方法了!

@Controller
@RequestMapping("/hello")
public class hellocontroller {
@RequestMapping("/h1")
public String hello(Model model){
model.addAttribute("msg","go!");
return "hello";
}
}

 

posted @ 2021-09-03 23:34  黄易安  阅读(50)  评论(0)    收藏  举报