helloworld(springmvc 非maven)

1 篇文章 0 订阅

helloworld(springmvc 非maven)

环境准备

windows环境

  1. intellij idea ultimate 2018.1
  2. jdk1.8
  3. springmvc 4.3.18
  4. fiddler(模拟发包)

开始

step1 初始项目结构
在这里插入图片描述

step2
在这里插入图片描述
finish即可

step3 项目结构大致如下
在这里插入图片描述

相对于原生servlet程序

  1. 多了两个配置文件applicationContext.xml和dispatch-servlet.xml
  • applicationContext.xml负责ServletContext初始化配置
  • dispatch-servlet.xml负责指定的DispatchServlet初始化配置

step4 编码 编写对应的controller代码
部分代码截图如下,详情https://github.com/fqcheng220/HelloWorld2_SpringMVC
在这里插入图片描述
step5 运行 部署到tomcat服务器上

Run->Edit configuration
选择local
选择local

在这里插入图片描述
点击+按钮 添加artifact

在这里插入图片描述
apply后 start即可

这时候通常tomcat会启动报错
在这里插入图片描述

原因是jar包没有导入
解决方法:
File->Project Structure->Artifacts

在这里插入图片描述

点击fix,添加依赖jar包

restful api

遇到的问题
1.不能返回json

解决方案:需要增加json解析支持,默认的AnnotationMethodHandlerAdapter持有的HttpMessageConverter列表引用 中不包含json处理类(网上还有其他方案fastjson等,此处使用jackson)
在这里插入图片描述
一开始死活不能导入jackson jar包,尝试添加到module library,也尝试添加到project library,tomcat启动都会报类找不到,索性尝试导入自己写的TestJar包 发现也是无法引用,是不是导入机制有什么特别的?
后来突然想到tomcat可能要部署jar包
于是首先添加到module library
在这里插入图片描述
选择事先copy到lib文件夹下对应的三个jackson jar包

在这里插入图片描述

之后
在这里插入图片描述

切换到Artifacts标签,注意
在这里插入图片描述

又是点击fix!!!!!!!!!!!!终于正常了

2.controller类中方法 不能正确的获取post请求入参
@RequestParam使用要求

  • 请求header必须有Content-Type:application/x-www-form-urlencoded
  • 请求body类似userName=123&pwd=1

在这里插入图片描述

根源是原生的HttpServletRequest.getParameterXXX方法生效必须要求这两个条件
源码跟踪:
DispatchServlet.doDispatch(xxxx)<-------AnnotationMethodHandlerAdapter.invokeHandlerMethod(xxx)
<-------HandlerMethodInvoker.resolveRequestParam(xxx)

在这里插入图片描述

@RequestBody使用要求

  • 请求header中Content-Type:必须不能为空
    通常为application/json或者application/xml等

HandlerMethodInvoker.resolveRequestBody(xxx)<-------取决于AnnotationMethodHandlerAdapter持有的HttpMessageConverter列表中是否有可以处理的实例

  • 如果Content-Type请求为application/json,则body必须是json串 类似 { “userName”:
    “123”, “pwd”: “1” },否则会报出
    org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error:xxxxxxxx

MappingJackson2HttpMessageConverter.read异常

3.请求过滤

AnnotationMethodHandlerAdapter持有的HttpMessageConverter列表引用 可以过滤请求决定是否响应
canRead canWrite方法会筛选关心的mediatypes(无论请求指定了什么Content-Type即请求正文格式和Accept即响应正文格式)
本例中 dispatcher-servlet.xml配置了

<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/html;charset=UTF-8</value>
                    <value>application/json;charset=UTF-8</value>
                    <value>application/xml;charset=UTF-8</value>
                </list>
            </property>
        </bean>

总结:

  1. 后端使用的注解(请求参数/响应数据类型)和HttpMessageConverter 决定了前端需要发送指定格式的请求和可以接受指定格式的响应
  2. csdn扩展的markdown语法很强大,如表格、脚注、内嵌HTML等等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值