系列文章目录
文章目录
SpringMVC-命令控制器讲解
Springmvc通过命令设计模式接收页面参数
添加jsp页面
<form action="${pageContext.request.contextPath}/command.do" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
性别:<input type="text" name="gender"><br>
生日:<input type="text" name="birthday"><br>
<input type="submit">
</form>
根据我们现有的知识
我们会这么做
这个用户添加的控制器跟UserController类似
然后还需要在 DispatcherServlet-servlet 里面动一下“刀”
启动项目,访问一下我们配置的路径
那么现在我们就有一个疑问了,我们前面的jsp页面,这是啥?
我们提交一下,那不爽死了吗,提交一下看看,不出意外的爽死了
我们想一想我们想要的是什么
我们最终会把它们封装到一个模型里面去
我们新建一个包
写个模型,把我们需要的属性 写上,记得要提供get/set 和toString方法
模型写好之后
我们就要考虑,怎么跟表单所提交的 /command.do相关联
注意,这个 command 就是命令控制器
先这样写
新建有一个info.jsp
再继续往下
其实也可以用set赋值
这样
这样 CommandController类就写完了
再在 info.jsp里面加点东西
然后这样就可以运行了吗
千万要记住,新手很容易犯一个错
就是 DispatcherServlet-servlet.xml 忘记配置
我们还要在 DispatcherServlet-servlet.xml 里面配置一下
其实我们在这里配置控制器 就相当于我们在struts里面配置action一样
这样就很好理解了
然后我们运行一下看看,这样就是告诉我们怎么接收参数以及底层原理
乱码后面说,反正这样就是能接收到参数的
就行了
回顾
Command控制器
Info.jsp
views结构
DispatchServelt-sevlet配置文件
这个怎么解释呢
往下看
BeanNameUrlHandlerMapping和ControllerClassNameHandlerMapping的区别
但是如果不配置name,而配置根据类名来找控制器
(即使用 ControllerClassNameHandlerMapping来进行操作)
这样就可以不加斜杆
乱码问题的解决
首先我们看提交方法 是post 方法
我们需要配置一下,就不会有乱码了
需要注意的是 有post请求、和get 请求解决乱码之分
POST请求乱码
<!-- 配置编码过滤器 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
复制一下粘贴到web.xml就行了
重启服务看看,是否中文没有乱码了
但是我们发现控制台显示是乱码,这个怎么解决呢
1.修改idea安装目录下的两个文件
C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.4\bin\idea.exe.vmoptions
C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.4\bin\idea64.exe.vmoptions
在这两个文件下增加一行:
-Dfile.encoding=UTF-8
2.做此修改后,tomcat运行日志会打印中文乱码
所以在还需要在VM options选项中配置:
注意改完之后,需要重启idea,然后就好了
另外需要注意,配置这个只是修改jsp不用刷新
GET请求乱码【后续完善】
Tomcat8 默认进行了url编码,get请求不乱码,Tomcat7会乱码
总结
实际开发中,包括前面几篇文章和这篇文章的知识我们都不会用,但是这些是底层原理,底层就是这样做的
实际上,了解底层原理之后,对我们深入学习是很有帮助的