注解完成一个 简单SpringMVC项目
一、步骤
- 首先建立一个Maven文件,然后增加web框架。idea记得配置打的包里的WEB-INF,在此目录下建一个lib文件夹然后把包导进去(idea老问题了据说),ecilipse会自行建立lib文件夹
- 配置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">
<!--1.注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--2.关联一个springmvc配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-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>
- 然后根据web.xml里的去配置一个spring-servlet.xml的配置文件,
设立启动级别(servlet),spring-servlet.xml的配置如下,自己可以更改context:/里的pakage,扫描之后让指定的包里的注解生效。
<?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-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
">
<!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
<context:component-scan base-package="com.cjy.controller"/>
<!--过滤,springMVC不处理非静态资源-->
<mvc:default-servlet-handler/>
<!--静态资源文件的引用,支持mvc注解驱动-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
- 配置Controller
@Controller
会对controller所应继承的Controller里的方法进行实现。ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
@RequestMapping("/h1")
设置此方法的路径。- 返回所要跳转的页面的名字。返回的String会被视图解析器解析。数据会被传输到页面(model),hello.jsp如下
<%--
Created by IntelliJ IDEA.
User: 18480
Date: 2021/6/18
Time: 20:58
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
- 启动tomcat,输入下方路径并查看结果
http://localhost:8080/com.cjy.controller/h1
- 这里说一下另一种注解,
@RestController
这个注解与@Controller
不同,会标注这个类不会被视图解析器解析,即直接返回一个字符串(Json)给所需。
package com.cjy.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class controller {
@RequestMapping("/h1")
public String hello(Model model){
//数据
model.addAttribute("msg","HelloSpringMVC");
return "hello";//在识图解析器组合成/WEB-INF/jsp/hello.jsp
}
}
二、与原版的对比
- 使用springmvc的三大配置
- 处理器映射器
- 处理器适配器
- 视图解析器
- 现在只需要开启注解驱动就能省略前两个的配置,我们只需要配置视图解析器就行
<mvc:annotation-driven/>
- 用注解来对Controller里的方法进行实现。
- 原版即无注解版。
原版controller如下
package com.cjy.java.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:我们先导入Controller接口
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{
//ModelAndView 模型核视图
ModelAndView modelAndView = new ModelAndView();
//封装对象,放在ModelAndView中
modelAndView.addObject("msg","HelloSpringMVC");
modelAndView.setViewName("hello");//: /WEB-INF/jsp/hello.jsp
return modelAndView;
}
}
原版spring-servlet.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<!--映射器适配-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 视图层配置 :DispatcherServlet给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--Handler,根据Handel返回一个映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean id="/hello" class="com.cjy.java.controller.HelloController"/>
</beans>
总结
注解版的springmvc只是对原版中的处理器解析器和处理器适配器用注解进行简化(注解开启驱动)。然后用注解对Controller进行实现,简化实现的过程。