文章引用:https://www.jianshu.com/p/15364a360251
新建maven-web项目步骤:



在新建工程要文件目录缺失 需要buildpath 在项目上右键Build-Path



<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wk</groupId>
<artifactId>TestSpringMVC</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>TestSpringMVC Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<!-- web jar和相关依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
</dependencies>
<build>
<finalName>TestSpringMVC</finalName>
</build>
</project>
在pom.xml引入Spring-webmvc jar包和依赖


新建项目的时候需要注意:web版本:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_3_1.dtd" >
<!--只能改变web-app后面的版本号-->
处理器映射器:
如果在web.xml中<url-pattern>/</url-pattern>
如果为/表明 在jsp文件如果没有对应的Spring中的xml配置 会自动交给tomcat常规方式来找 但是html等其他类型的文件就不行了
可以web.xml中<url-pattern>/*</url-pattern>
表明所有类型的文件都需要在Spring的xml中必须要有对应的配置
有多个处理器映射器 同样也有多个处理器适配器 是一一对应的
(最常用的)注解式的处理器映射器和处理器适配器
三种返回值类型 String ModelAndView void
ModelAndView 和String是同步类型 form表单类型的
如果是返回String类型的 默认是请求转发 如果要使用重定向 要在代码的最后return "redirect:"; //是指返回String类型的字符串的名字
void是借助于ajax的返回值
处理器适配器中的依赖注入的参数(方法中可以传入的参数类型):
* Modal
* HttpServletRequest
* HttpSession
* ServletContext
* HttpResponse
在处理器适配器中需要注意的点:
/*
* 非侵入式设计:代码和框架的耦合性比较低 不过分依赖框架 可以达到复用的目的
*
*
*/
@Controller
@RequestMapping("/test")
public class TestController {
// @RequestMapping("/test")//这个不限接受请求类型 可以后面加限制类型 可以进行两级设置
@RequestMapping(value="/test",method=RequestMethod.GET)
// @GetMapping("test")//直接指定是接受get请求的
// @PostMapping("test")//直接指定是接受post请求的
public ModelAndView test() {
List<Employee> list = new ArrayList<>();
Employee e = new Employee();
e.setEmpno(1);
e.setEmpname("jack");
e.setHiredate(new Date());
Employee e2 = new Employee();
e2.setEmpno(2);
e2.setEmpname("james");
e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));
list.add(e);
list.add(e2);
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
mav.addObject("list", list);
/**
* 当返回值是ModalAndView的时候,跳转方式是:请求转发
*
*/
return mav;
}
/*
* 请求转发和重定向的区别
* 请求转发是一次性的 前端页面向servet或者controller服务器端发送请求时 tomcat会自动生成doget dopost方法
* 服务器端会以jsp的形式 通过浏览器渲染成前端页面 jsp是服务器端语言 产生一次servlet 前端->servlet->jsp
* 重定向是两次 前端发送请求给服务器端 服务器发回前端 由前端来找到jsp 浏览器把jsp渲染成前端页面 产生两次servlet 前端->servlet->前端->jsp
*
* 请求转发和重定向的用法:
* 如果在servlet中有值进行传递 就用请求转发
* 如果没有值传递 就用重定向
*/
/*
* 当返回值是String, 默认跳转方式是:请求转发 如果想用响应重定向 return redirect:
*
* 可以依赖注入的参数(5个):
* Modal
* HttpServletRequest
* HttpSession
* ServletContext
* HttpResponse
*
*/
//一下的方法的返回值是String
@GetMapping("test2")
public String test2(Model m) {
List<Employee> list = new ArrayList<>();
Employee e = new Employee();
e.setEmpno(1);
e.setEmpname("jack");
e.setHiredate(new Date());
Employee e2 = new Employee();
e2.setEmpno(2);
e2.setEmpname("james");
e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));
list.add(e);
list.add(e2);
m.addAttribute("list", list);
return "index";
}
@GetMapping("test3")
public String test3(HttpServletRequest httpServletRequest) {
//java1.7 转实运算符
List<Employee> list = new ArrayList<>();
Employee e = new Employee();
e.setEmpno(1);
e.setEmpname("jack");
e.setHiredate(new Date());
Employee e2 = new Employee();
e2.setEmpno(2);
e2.setEmpname("james");
e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));
list.add(e);
list.add(e2);
httpServletRequest.setAttribute("list", list);
return "index";
}
//test4 是重定向
@GetMapping("test4")
public String test4(HttpSession session) {
List<Employee> list = new ArrayList<>();
Employee e = new Employee();
e.setEmpno(1);
e.setEmpname("jack");
e.setHiredate(new Date());
Employee e2 = new Employee();
e2.setEmpno(2);
e2.setEmpname("james");
e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));
list.add(e);
list.add(e2);
session.setAttribute("list", list);
//return "redirect:/WEB-INF/index.jsp";//请求重定向 redirect 不会自动添加前缀和后缀 还不能访问安全目录
return "redirect:transfer";
}
@GetMapping("/transfer")
public String transfer() {
return "index";
}
/*
* 对象{"empno":1,"empname":"feiyy","hiredate":"2019-11=07"}
*
* 数组[{},{},{}]
*
* 第三方工具:fastjson(阿里巴巴)
* gson(谷歌)
* jackson
*
*/
@GetMapping("/emps")
public void getEmps(HttpServletResponse resp) {
List<Employee> list = new ArrayList<>();
Employee e = new Employee();
e.setEmpno(1);
e.setEmpname("jack");
e.setHiredate(new Date());
Employee e2 = new Employee();
e2.setEmpno(2);
e2.setEmpname("james");
e2.setHiredate(java.sql.Date.valueOf("1990-1-1"));
list.add(e);
list.add(e2);
//阿里巴巴的fastJSON
String str=JSON.toJSONString(list);
//通过rsponse对象将json字符串传回客户端
try {
resp.getWriter().append(str);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
其中getEmps方法中fastJSON是以后会用到的api 可以将集合等数据转为字符串 传输给前端 由前端解析取值
JSON的特点:前后端分离的项目常用:一个数据库可以对应多个前端页面
JSON 是纯文本
JSON 具有“自我描述性”(人类可读)
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进行解析
JSON 数据可使用 AJAX 进行传输
JSON数据类型:数组 字符串 布尔
AJAX请求:
第三方AJAX框架axios:http://www.axios-js.com/ 用来接收JSON发送过来的数据
参数绑定:
绑定单个值
绑定对象
绑定符合类型对象
日期类型绑定(spring不能给Date类型自动进行绑定)//需要自己定义日期转换器
数组绑定
集合绑定
网友评论