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";
}
}

浙公网安备 33010602011771号