SpringMVC SSM框架笔记一:从零开始创建Web接口项目
2019-12-02 本文已影响0人
仙大
开发环境
- IntelliJ IDEA 2019-02
- win10 64位
- java 1.8
创建项目
- 打开IDEA,new - project
- 选择JAVA - JAVA EE - Web Application,记住勾选Create web.xml
-
下一步输入项目名 - Finish
图片.png
创建完成之后,目录结构大致如下:
图片.png
ROOTDIR <!--项目根目录-->
-src
-web
-WEB-INF
-web.xml <!--这是Servlet项目的配置文件-->
-index.jsp
创建包名、目录层级
我这里包名暂定为 com.test
图片.png
- bean 定义数据库映射对象
- common 存放公共类、工具类
- dao 定义Mybatis访问层,通过dao里面的接口访问数据库
- service 存放处理业务流程的类
- controller 控制器,存放接口定义的类
引入maven包管理
- 鼠标在项目根目录上邮件 - 选择Add Framework Support
- 勾选maven,点击OK,项目会在根目录下生成pom.xml文件,这就是项目的maven依赖管理配置文件
- 弹窗选择Enable Auto-Import,打开自动引用,修改pom.xml后会自动修改变更的引用
引入Spring MVC到项目
- 打开pom.xml,按住Alt+Insert,选择Dependence
- 搜索 org.springframework ,选择spring-webmvc最新版本
- 点击Add后,springmvc会自动添加到项目引用
接下来干啥?当然是跑个接口试试呗!
创建一个接口吧
- 在 src/main/java 目录中创建一个包名:com.test
- 创建控制器类:Location.kt
@Controller //控制器
@ResponseBody //接口返回需要这个注解
@RequestMapping("/location")//路径
class Location {
@RequestMapping("/test")
fun test(): Any {
return HashMap<String, Any>().apply {
put("code", 1)
put("msg", "yes")
}
}
}
如何让它跑起来呢?应该让spring框架知道这是一个接口
- 常见项目bean配置文件:
app-bean.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"
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/tool http://www.springframework.org/schema/tool/spring-tool.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<mvc:annotation-driven/><!--这句必须要,搭配component-scan-->
<context:component-scan base-package="com.test"/><!--class的注解扫描,扫描后将有Spring注解的类注册到spring-->
</beans>
dispatch-bean.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.xsd">
</beans>
- 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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app-bean.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatch-servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatch-bean.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatch-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
到这里,spring配置环境就OK了,接下来需要搭建运行环境
- 搭建本地环境步骤略过~~~
运行一次试试:报错了~~哈哈哈
org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class java.util.HashMap
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:234)
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:181)
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:123)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:893)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:798)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
- 翻译一下:找不到类型为java.util.HashMap的返回值的转换器
意思就是HashMap不知道以什么类型返回给接口调用者,加上Jackson就OK了!
- pom.xml 增加Jackson的dependence ,再次运行,没毛病了~
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9.3</version>
</dependency>