了解掌握Servlet之后,我们会发现Servlet开发在接受请求数据参数,数据共享,页面跳转等操作相对比较复杂。SpringMvc框架则是对Servlet的操作进行了整合封装处理。
- SpringMVC底层就是的Servlet,SpringMVC就是对Servlet进行更深层次的封装
Springmvc模式
什么是mvc?
mvc分别指的是模型model(javabean), 视图view(jsp/img) ,控制器Controller(Action/servlet) 控制器就是为了保证M和V的一致性,当模型发生改变时,控制器可以把模型中的新内容更新到视图上,这样就达到了页面代码和后台代码的分离的效果。
什么是SpringMvc?
SpringMVC是Spring框架内置的MVC的实现。SpringMVC就是一个Spring内置的MVC框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化、等等),而且使用简单,与Spring无缝集成。 支持 RESTful风格的 URL 请求 。
用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
SpringMvc案例
1.创建maven项目,导入jar包
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.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>
2.编写Controller控制器(类似编写Servlet类)
- 实现Controller接口,与Servlet类作用类似(封装,处理数据)。
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView 模型和视图
ModelAndView mv = new ModelAndView();
//封装对象,放在ModelAndView中。Model
mv.addObject("msg","HelloSpringMVC!");
//封装要跳转的视图,放在ModelAndView中
mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
return mv;
}
}
3.注册DispacherServlet
与注册Servlet相似,只不过我们用Controller代替Servlet之后,需要注册DispacherServlet来对Controller进行处理映射。所以DispacherServlet也是SpringMvc框架的核心。
<!--1.注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
<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>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4.配置SpringMvc.xml文件
在注册DispacherServlet时,关联了一个SpringMvc.xml文件,表示通过Spring容器来获得相关的Controller类,处理器,适配器,以及视图解析器。
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<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-->
<bean id="/hello" class="com.jack.controller.HelloController"/>
5.准备一个jsp页面获取Controller类封装的数据
在web目录下创建jsp包,新建.jsp文件在jsp包下
hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
6.配置Tomcat
选择需要运行的项目
添加成功后开始运行服务器测试SpringMvc
- 在url路径输入命令/hello,成功获取到controller类里的信息“HelloSpringMVC!”
SpringMvc基于注解配置
- 开发时往往使用的是注解方式配置,以此来提高开发效率。
1.注解Controller类
- 此时在controller类里,使用的不是ModelAndView对数据进行封装,采用的是Model类进行封装处理。
2.配置注解xml文件
wen.xml文件配置,jsp页面都不需要改变
3.配置Tomcat,测试SpringMvc注解。
- 添加运行的项目
- 输入注解RequestMapping添加的路径值,显示封装好的数据。
SpringMvc表单提交数据跳转页面
1.创建一个表单页面
- “/e/t1”表示的是跳转页面命令路径值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/e/t1" method="post">
<input type="test" name="name">
<input type="submit">
</form>
</body>
</html>
注意:from.jsp放在子包下,从默认页面跳转表单页面,视图解释器解析不了,所以from.jsp应该与默认页面一样,直接放在web包下。
2.编写提交页面Controller类
public class EncodingController {
@PostMapping("e/t1")
public String test(String name, Model model){
model.addAttribute("msg",name);
return "test";
}
}
- 表单页面的name提交后,赋值给Controller类的name在test页面显示。
3.配置Tomcat,测试。 - 输入from.jsp路径访问表单页面
- 输入字符,成功跳转页面显示
3.解决乱码问题
- 当我们在表单输入时,跳转页面会出现乱码问题。
- 此时我们需要在web.xml文件中配置一个SpringMvc过滤器。
<!--配置SpringMvc过滤器,解决乱码问题-->
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
SpringMvc的过滤器可以解决大多数的乱码问题。
通过路径赋值显示
- 创建一个Controller类
- 通过路径赋值
RestFul风格路径赋值
RestFul风格的作用主要是简化一般路径赋值的格式,便于使用,并且可以让前端无法知道赋值的变量名,较为安全。 - 创建一个Controller类:
- 测试RestFul风格
成功完全赋值,并且返回正确值显示。
Json
1.什么是Json?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2.Jackson的使用
简单的理解Jackson使用就是将Json字符串在前端页面进行展示。
- Maven项目导入Jackson包
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
lombok包是为了后面便于User类设置属性。
- 创建需要显示信息字符串的用户类
利用lombok注解User类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
private String sex;
}
- 创建Controller类
@RequestMapping("/j1")
// @ResponseBody注解之后对的方法前端不会返回视图,而是字符串。
public String json1() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
User user = new User("杰克1", 3, "男");
String str = mapper.writeValueAsString(user);
return str;
}
- 配置Tomcat,测试jackson
成功显示用户信息
3.fastjson的使用
- 导入fastjson包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
- 创建Controller类
@RequestMapping("/j4")
public String json4(){
List<User> user = new ArrayList<User>();
User user1 = new User("杰克1",3,"男");
User user2 = new User("杰克2",3,"男");
User user3 = new User("杰克3",3,"男");
User user4 = new User("杰克4",3,"男");
user.add(user1);
user.add(user2);
user.add(user3);
user.add(user4);
String str = JSON.toJSONString(user);
return str;
}
- 测试fastjson
总结
SpringMvc项目在idea中配置好Tomcat后,在代码没有任何错误时也有可能会出现报错,需要在Project Structrue中Artifacts的指定项目下的WEB-INF添加一个lib目录,把maven项目所有的jar包添加到lib目录下。因为服务器在加载web项目时,web项目下并没有jar包。