用注解开发SpringMVC

每天向前一步 2021-02-23 17:22:03
开发 springmvc 注解 解开


Spring2.5以后,用注解开发SpringMVC的功能十分强大,注解也是SpringMVC的精髓。在实际开发中,都会使用注解来实现。
这让SpringMVC开发工作量最小化,开发者只要专注于业务逻辑及页面的编写实现。

1、web.xml文件

配置DispatcherServlet,及相应的servlet-mapping。
这个文件除了servlet-name,和springmvc的配置文件名,其余都是固定不变,可以复用的。

<?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">
<!--注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个springmvc的配置文件,命名规则为:【servlet-name】-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--/ 匹配所有的请求:不包括.jsp-->
<!--/* 匹配所有的请求:包括.jsp-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

2、Spring bean配置文件

沿用官方命名规则,此处用springmvc-servlet.xml。这个文件除了要扫描的包路径,其余都是固定不变,可以直接复用的。

  • 开启注解

    • 新增context约束
    • 开启自动扫描包
  • 静态资源过滤

    • 使用默认的default-servlet-handler
    • 让Spring MVC不处理静态资源 .css .js .html .mp3 .mp4
  • 支持mvc注解驱动

    • 在spring中一般采用@RequestMapping注解来完成映射关系
      要想使@RequestMapping注解生效
      必须向上下文中注册DefaultAnnotationHandlerMapping
      和一个AnnotationMethodHandlerAdapter实例
      这两个实例分别在类级别和方法级别处理。
      而annotation-driven配置帮助我们自动完成上述两个实例的注入。
  • 视图解析器

    • 默认使用InternalResourceViewResolver
    • 配置.jsp文件全路径文件名的前缀、后缀。
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
<context:component-scan base-package="controller"/>
<!--让Spring MVC不处理静态资源 .css .js .html .mp3 .mp4-->
<mvc:default-servlet-handler/>
<!--支持mvc注解驱动
在spring中一般采用@RequestMapping注解来完成映射关系
要想使@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理。
而annotation-driven配置帮助我们自动完成上述两个实例的注入。-->
<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>

3、Controller类编写

使用注解开发SpringMVC,99%的工作量都在controller类编写。SpringMVC Annotation 使开发量最小化。

Controller负责解析用户请求,进行业务处理,并返回一个模型。

Controller通过实现接口和注解定义两种方法实现。

实现了Controller接口的类就是控制器,这是较老的方法。

一个控制器类只能有一个方法。多个方法要写多个controller。

推荐用注解定义实现。

  • @Controller

    • 修饰类,保证该类能被Spring自动扫描到,自动装配为Spring bean
  • @RequestMapping

    请求地址,将controller类或其特定方法映射到指定前端视图

    • 修饰类,表示该类所有方法的响应路径以该地址作为父路径。
    • 修饰方法:表示该方法响应路径,方法响应到指定前端视图。
  • return

    • 返回值:视图jsp文件名

    • @Controller注解的类中,若方法返回值对应的jsp文件名存在,则会被视图解析器解析

@Controller //修饰类,保证该类能被Spring自动扫描到,自动装配为Spring bean
@RequestMapping("controller") //修饰类,表示该类所有方法的响应路径以该地址作为父路径
public class MyController {
//完整url:http://localhost:8080/(工程名)/controller/hello
@RequestMapping("/hello") //修饰方法:表示该方法响应路径,方法响应到指定前端视图。
public String sayHello(Model model){
model.addAttribute("msg", "Hello!SpringMVC Annotation!");
//返回值:视图jsp文件名
//@Controller注解的类中,若方法返回值对应的jsp文件名存在,则会被视图解析器解析
return "hello";
}
}

4、编写hello.jsp页面

放在/WEB-INF/jsp/路径下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Zuka</title>
</head>
<body>
${msg}
</body>
</html>

5、测试

url:http://localhost:8080/springmvc_annotation_war_exploded/controller/hello

版权声明
本文为[每天向前一步]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/letsdaydayup/p/14431760.html

  1. 忘记云服务器上MySQL数据库的root密码时如何重置密码?
  2. Detailed explanation of lettuce, an advanced client of redis
  3. Springboot learning integrated application (1)
  4. Linux File Recover
  5. Linux-Security
  6. How to reset the password when you forget the root password of MySQL database on the cloud server?
  7. Linux File Recover
  8. Linux-Security
  9. LiteOS:盘点那些重要的数据结构
  10. Linux Memory
  11. Liteos: inventory those important data structures
  12. Linux Memory
  13. 手把手教你使用IDEA2020创建SpringBoot项目
  14. Hand in hand to teach you how to create a springboot project with idea2020
  15. spring boot 整合swagger2生成API文档
  16. Spring boot integrates swagger2 to generate API documents
  17. linux操作系统重启后 解决nginx的pid消失问题
  18. Solve the problem of nginx PID disappearing after Linux operating system restart
  19. JAVA版本号含义
  20. The meaning of java version number
  21. 开源办公开发平台丨Mysql5.7两套四节点主从结构环境搭建教程(二)
  22. 开源办公开发平台丨Mysql5.7两套四节点主从结构环境搭建教程(一)
  23. Open source office development platform mysql5.7 two sets of four node master-slave structure environment building tutorial (2)
  24. HTTP的“无状态”和REST的“状态转换”
  25. Open source office development platform mysql5.7 two sets of four node master-slave structure environment building tutorial (1)
  26. 【大数据哔哔集20210128】使用Hive计算环比和同比
  27. 【大数据哔哔集20210125】Kafka将逐步弃用对zookeeper的依赖
  28. 【大数据哔哔集20210124】有人问我Kafka Leader选举?我真没慌
  29. 【大数据哔哔集20210123】别问,问就是Kafka高可靠
  30. Spring 事务、异步和循环依赖有什么关系?
  31. Spring 动态代理时是如何解决循环依赖的?为什么要使用三级缓存?
  32. "Stateless" of HTTP and "state transition" of rest
  33. [big data bibiji 20210128] use hive to calculate month on month and year on year
  34. [big data bibiji 20210125] Kafka will gradually abandon its dependence on zookeeper
  35. [big data beeps 20210124] someone asked me about Kafka leader election? I'm not in a panic
  36. [big data bibiji 20210123] don't ask, ask is Kafka highly reliable
  37. jQuery Gantt Package 在Visual Studio中创建一个新的ASP.NET项目
  38. What is the relationship between spring transactions, asynchrony, and circular dependencies?
  39. How to solve circular dependency in spring dynamic proxy? Why use level 3 caching?
  40. Unicode码的二进制转换(Java)
  41. JAVA的函数式接口
  42. JAVA里的元祖类
  43. JQuery Gantt package to create a new ASP.NET project
  44. Binary conversion of Unicode code (Java)
  45. The functional interface of Java
  46. Yuanzu class in Java
  47. Java中的CPU占用高和内存占用高的问题排查
  48. HashMap连环问你能答出几道?
  49. IntelliJ IDEA 还能画思维导图,果然最强 IDE!
  50. java中的反射和代理
  51. Troubleshooting of high CPU and memory usage in Java
  52. How many questions can you answer?
  53. IntelliJ idea can also draw mind maps. It's really the strongest ide!
  54. Reflection and proxy in Java
  55. Java中的CPU占用高和内存占用高的问题排查
  56. Linux OOM(out of memory)
  57. mysql 自定义函数因参数名称报错
  58. Troubleshooting of high CPU and memory usage in Java
  59. Linux OOM(out of memory)
  60. MySQL user defined function error due to parameter name