SpringMVC
学习方式的变化:
SSM框架的学习:研究官方文档,锻炼自学能力,笔记能力,项目能力
SSM框架整合 = JavaWeb做项目;
Spring:IOC和AOP很重要
SpringMVC: SpringMVC的执行流程很重要,其底层是servlet
SpringMVC: SSM框架整合!!!【常常翻找博客】
MVC:模型model(dao,service) 视图(View) 控制器(Controller)
MVVM
dao
service
servlet
jsp/html
前端 数据传输 实体类
pojo:User
vo:UserVo
dto:
1.Servlet操作步骤:
- 新建一个maven项目作为父项目,删除src目录;在pom中导入下方依赖
<!-- 导入依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
- 建立一个module作为子项目,右键,然后点【Add framework support】;在子项目的pom中导入部分依赖
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
- 编写一个servlet类【HelloServlet】继承HttpServlet ;继承(extends)了servlet接口的类就属于servlet了 ;alt+insert然后重写doget和dopost方法 ; 将dopost中的返回值改为doGet(req, resp)
- 编写的这个servlet类,是为了处理用户请求的,其中在get这里,需要完成:取得参数、业务逻辑、视图跳转三个步骤
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取前端参数
String method = req.getParameter("method");
if(method.equals("add")){
req.getSession().setAttribute("msg","执行了add方法");
}
if(method.equals("delete")){
req.getSession().setAttribute("msg","执行了delete方法");
}
//2.调用业务层
//3.视图转发(request)或重定向(response)
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
- 将我们需要输出的msp,在test.jsp(在WEB-INF jsp下)中注册一下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
- 编写完我们的servlet后,需要在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">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.wk.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!-- 设置超时时间15分钟-->
<!-- <session-config>-->
<!-- <session-timeout>15</session-timeout>-->
<!-- </session-config>-->
<!-- 设置欢迎页面-->
<!-- <welcome-file-list>-->
<!-- <welcome-file>index.jsp</welcome-file>-->
<!-- </welcome-file-list>-->
</web-app>
- 建立一个form.jsp来配置tomcat
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/hello" method="post">
<input type="text" name="method">
<input type="submit">
</form>
</body>
</html>
- 配置并启动tomcat
2. 概述
- 我们可以将SpringMVC中所有用到的bean,注册到Spring中
- 约定大于配置
- 用的人多
- 围绕着DispatcherServlet
3.HelloSpringMVC
配置步骤(有待完善):
-
“我们写完一个controller之后,会跳转到一个视图”(WEB-INF下jsp包下的test.jsp),跳过来后,在body里面写上${msg} ,为了显示我们要输出的内容
-
然后在web.xml中配置DispatchServlet
配置servlet和其mapping*/ 与 /的区别:
/ :只匹配所有的请求,不会去匹配jsp页面/* :匹配所有的请求,包含jsp页面
<?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的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 启动级别:1-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
可能遇到的问题
- 就是我们可能会在代码都正确的情况下,但是不成功,解决方法如下
- 打开project structure
- 在我们所在的项目的WEB-INF下面,新建一个lib目录
- 在里面导入我们所有的依赖,而且要有下方图片的显示
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-llZ9h9Za-1624702852814)(C:\Users\AW\Desktop\SpringMVC.assets\image-20210603135558612.png)]
原理
如果到了深究代码原理的阶段,就看看狂神说springmvc上的SpringMVC执行原理
上面的这些我们会用注解去实现,这才是SpringMVC的精髓,会比上方简单很多
4. 用注解开发SpringMVC
- add为web项目,在pom.xml中导入下方所示,在project structure中添加 lib目录,并导入依赖
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
注解开发的极简步骤:
- 新建一个module
- 变成web项目
- 配web.xml
- 配pom.xml
- 在project structure中,添加lib,并导入依赖
- 添加hello.jsp
- 建立HelloController 这一java文件
- Tomcat运行
- 特别注意:xml一定要写好,不能有一点错误,特别是标点符号
5.控制器
在类的开头要加上 @Controller
6.RestFul风格
网址的组成中,总是以斜杠 / 分隔各个部分 ; 看起来简洁
7.重定向
不需要在springmvc-servlet.xml中配置视图解析器了,然后只需要在我们新建立的Java文件中进行如下代码的操作
@Controller
public class ModelTest1 {
@RequestMapping("/m1/t1")
public String test(Model model){
//重定向(在不配置视图解析器的情况下)
model.addAttribute("msg","ModelTest1");
return "redirect:/index.jsp";
}
}
8.数据处理
- 建立UserController
- 建立pojo , 建立User
- 在pom中,加入注解
- 在UserController中配置
- 运行Tomcat
9.乱码问题
启动Tomcat之后,可以向form.jsp中输入数据之后提交,但是可能会显示404,问题在于我们的代码中的form.xml与EncodingController中的地址的相关表示不对
//EncodingController中 @PostMapping("/e/t9")
form.xml之中
<form action="${pageContext.request.contextPath}/e/t9" method="post">
操作步骤:
- 建立EncodingController,正常的配置
- 打开后输入中文,结果会返回乱码
- 我们需要建立一个EncodingFilter作为过滤器
- 需要在web.xml中进行配置
- 》如果post方法不可以,那么就改为get方法
》》或者是讲web.xml中的 / 改为 /*
- 》如果post方法不可以,那么就改为get方法
- 将中文进行过滤,然后成功输出中文
10.JSON
基础步骤:
- 建立一个module
- 添加web支持
- 在web下面建立一个jsontest.html
- 在浏览器打开,审查元素console,即可看到配置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
// 编写一个javascript对象 ES6
var user = {
name:"Wk",
age:3,
sex:"男"
};
console.log(user);
</script>
</head>
<body>
</body>
</html>
11.Jackson的使用
使用步骤【springmvc-05-json】:
- 导入jackson的依赖,到pom.xml中
- 配置web.xml
- 配置springmvc-servlet.xml
- 建立实体类User
- 建立UserControer
- 配置tomcat,配置lib;运行
问题解决:
- 乱码问题,在@RequestMapping部分,加上一定的配置
@RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")//生成网页后,可以跳转的页面
- 乱码统一解决方法
<!-- JSON乱码问题配置-->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
12.Ajax
遇见问题:
- ClassNotFound,原因是没导入lib目录
ngframework.http.converter.json.MappingJackson2HttpMessageConverter">
</mvc:message-converters>
</mvc:annotation-driven>
## 12.Ajax
遇见问题:
1. ClassNotFound,原因是没导入lib目录