发表于: 2021-04-18 18:05:38
4 1178
一,今天完成的事情
任务二1-4
1,查看接口定义格式,分别给出CRUD的接口文档格式。
Rest风格不带状态。uri也一般不出现动词,只用名词。但是完全按照Rest风格做的网站不多。我的controller中的方法上value不带动词就是Rest风格。
我直接给出前端地址,前后端能互相理解。一般不直接给一个类student,消除歧义。接口分为四部分:方法、uri、请求参数、返回参数。uri这里的/a /u未使用。
1)API设计
HOST :http://localhost :8080
此任务只有Student一个pojo,所以在Student上的controller类上入口是/student,最终是http://localhost :8080/student。
2)查
API:/getbyid/{id}
请求⽅式:GET
参数类型:接收{id}参数。id是long类型。
响应参数类型:JSON,在model.jsp中展示。
3)删
API:/delete
请求⽅式:DELETE
参数类型:接收url?id=参数。id是long类型。
响应参数类型:找不到:code:400; message:"id.null"。
成功:code:200; message: "deletedSuccessfully"。
4)加
API:/add
请求⽅式:POST
参数类型:JSON (请添加请求头:ContentType:application/json)
携带字段:组成类Student的字段,不带id,但是一定带以下字段。其它字段可选。
{ "name":"your_name"
}
可选:
private String qqNumber;
private String major;
private String estimatedTimeEnrollment;
private String school;
private String studentId;
private String logLink;
private String mentor;
private String wishes;
private String recommendedFrom;
响应参数类型:JSON
响应信息:因为没带名字失败code:400; message:"name.null"。
成功:code:200; message: "deletedSuccessfully"。
5)改
API:/update
请求⽅式:PUT
参数类型:JSON (请添加请求头:Content -Type:applicat ion/json)
携带字段:组成类Student的字段,一定要带id。
{ "id":id
}
加上以下一个或者全部
private Long createAt;
private Long updateAt;
private String name;
private String qqNumber;
private String major;
private String estimatedTimeEnrollment;
private String school;
private String studentId;
private String logLink;
private String mentor;
private String wishes;
private String recommendedFrom;
响应参数类型:JSON
响应信息:找不到:code:400; message:"id.null"。
成功:code:200; message: "deletedSuccessfully"。
2,创建Maven WEB工程。目录结构如图
3,
根据接口文档,使用Spring Rest 编写对应的Controller,日志记录接收参数后,暂时不用写业务逻辑,直接返回JSP,直接用Json Tag-lib 生成假数据。
Controller,用以下语句返回到相应的jsp网页。
return "jsontaglib"
// request来保存数据
@RequestMapping("/jsontaglib")
public String testJsonTaglib(HttpServletRequest request, HttpServletResponse response) {
List<Student> students = new ArrayList<>();
Student student = new Student();
//Only get one id this time, not much judge
long id = 0L;
if( request.getParameter("id") != null )
id = Long.parseLong(request.getParameter("id"));
student.setId(id);
student.setName("testingJsonTaglib");
student.setCreateAt(1289808L);
student.setUpdateAt(23979237923L);
student.setStudentId("stu"+id);
Student student2 = new Student();
id = 222L;
student2.setId(id);
student2.setName("testingJsonTaglib2");
student2.setCreateAt(12898082L);
student2.setUpdateAt(239792379232L);
student2.setStudentId("stu"+id);
students.add(student);
students.add(student2);
request.setAttribute("students", students);
return "jsontaglib";
}
jsp位置是
为了展示,jsontaglib.jsp的内容是
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<json:object>
<json:array name="students" var="student" items="${students}">
<json:object>
<json:property name="id" value="${student.id}"/>
<json:property name="name" value="${student.name}"/>
<json:property name="studentId" value="${student.studentId}"/>
<json:property name="createAt" value="${student.createAt}"/>
<json:property name="updateAt" value="${student.updateAt}"/>
</json:object>
</json:array>
</json:object>
为了展示,spring-mvc.xml的设置是
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 扫描web相关的bean -->
<context:component-scan base-package="com.nicole.mybatis.controller"/>
<!-- 开启SpringMVC注解模式 -->
<mvc:annotation-driven/>
<!-- 静态资源默认servlet配置 -->
<mvc:default-servlet-handler/>
<!-- 配置jsp 显示ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
以上代码扫描Contriller
为了安全,把网页放到
/WEB-INF/views/
之中,
加上后缀
value=".jsp"
return的如果是String才看.jsp的网页
本地使用配置tomcat,运行网页
因为甩validation类的错误,jdk换回1.8
上图为成功运行tomcat
jsontaglib.jsp的list能够正确的展示
网页展示也可以通过mav等方式
@RequestMapping("/mav")
public ModelAndView mav(Long id) {
ModelAndView mav = new ModelAndView("model");
id = 1L;
Student student = studentService.getStudent(id);
mav.addObject("student", student);
return mav;
}
model.jsp
<%--
Created by IntelliJ IDEA.
User: Nicole
Time: 14:30
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Model.jsp</title>
</head>
<body>
${student}
</body>
</html>
4,本地运行Jetty:run 插件,修改端口号为8080,浏览器访问任意查询接口,判断是否可以正确返回数据
用run插件的方式,首先找到
然后在左上角找到+号,选择Maven,写入配置,包括端口指定8080
注意command line使用的命令。
用run的方式成功运行Jetty
成功查询
如果访问的端口不对,就不能访问
二,今天问题:
Validation有关错误可以通过更换JDK解决
三,今天的收获:
给出任务二的接口。Json Tag-lib的应用。我平时用的最多的还是@ResponseBody。
REST风格,一般在代码中通过
@RequestMapping(value = "/xxx", method = RequestMethod.POST)
这样来决定,POST,PUT,GET,DELETE
任务二是,怎么通过外部,如网页对数据库进行增删改查,使用服务器和浏览器进行交流。本地的程序放到服务器上,配置必须的运行环境,包括数据库,web服务器等。
四,明天的计划:
任务2,条目5-8
评论