概述
Servlet编写
1. 接口开发规范
我们在做的是一个前后端分离项目、需要通过接口文档对接的项目. 所以开发过程中要仔细查看前端所需的api接口和参数字段
为了严格按照接口进行开发,提高效率,对请求及响应格式进行规范化。
开发规范 |
---|
2、post请求时有三种数据格式,可以提交form表单数据 和 Json数据(ContentType=application/json),文件等多部件类型(multipart/form-data)三种数据格式 . jsonl类型的数据 Servlet中使用 fastjson进行解析 |
3、响应结果统一格式为json |
开发规范 |
---|
1、get 请求时,采用key/value格式请求,Servlet中可以使用 getParameter() 获取。 |
2、post请求时有三种数据格式 第一种: Json数据 ,jsonl类型的数据 Servlet中使用 fastjson进行解析 第二种: 提交form表单数据 第三种: 文件等多部件类型(multipart/form-data) |
3、响应结果统一格式为json |
为什么使用JSON?
数据格式比较简单, 易于读写, JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护 。
本项目使用的是 JSON解析工具为阿里巴巴的fastjson, maven工程导入下面的依赖即可 。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.37</version>
</dependency>
<dependency>
<groupId>com.colobu</groupId>
<artifactId>fastjson-jaxrs-json-provider</artifactId>
<version>0.3.1</version>
</dependency>
2. 接口文档
前端的开发基于服务端编写的接口,如果前端人员等待服务端人员将接口开发完毕再去开发前端内容这样做效率是 非常低下的,所以当接口定义完成,可以使用工具生成接口文档,前端人员查看接口文档即可进行前端开发,这样 前端和服务人员并行开发,大大提高了生产效率。
3.根据接口文档中的请求Servlet所带的参数的值选择相关业务处理。
(1)BaseServlet编写(接收 JSON格式与非 JSON格式)
package com.lagou.base;
import com.alibaba.fastjson.JSON;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Map;
public class BaseServlet extends HttpServlet {
/*
* doGET方法作为一个调度器 .根据请求功能的不同,调用对应的方法
* 规定必须传递一个参数
* methodName=功能名
* */
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取参数 要访问的方法名
//String methodName = req.getParameter("methodName");
String methodName = null;
//1.获取POST请求的 Content-Type类型
String contentType = req.getHeader("Content-Type");
//2.判断传递的数据是不是JSON格式
if("application/json;charset=utf-8".equals(contentType)){
//是JOSN格式 调用getPostJSON
String postJSON = getPostJSON(req);
//将JSON格式的字符串转化为map
Map<String,Object> map = JSON.parseObject(postJSON, Map.class);
//从map集合中获取 methodName
methodName =(String) map.get("methodName");
//将获取到的数据,保存到request域对象中
req.setAttribute("map",map);
}else{
methodName = req.getParameter("methodName");
}
//2.判断 执行对应的方法
if(methodName != null){
//通过反射优化代码 提升代码的可维护性
try {
//1.获取字节码文件对象
Class c = this.getClass();
//2.根据传入的方法名,获取对应的方法对象 findByName
Method method = c.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//3.调用method对象的 invoke方法,执行对应的功能
method.invoke(this,req,resp);
} catch (Exception e) {
e.printStackTrace();
System.out.println("请求的功能不存在!!");
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
/**
* POST请求格式为: application/json;charset=utf-8
* 使用该方法进行读取
* */
public String getPostJSON(HttpServletRequest request){
try {
//1.从request中 获取缓冲输入流对象
BufferedReader reader = request.getReader();
//2.创建StringBuffer 保存读取出的数据
StringBuffer sb = new StringBuffer();
//3.循环读取
String line = null;
while((line = reader.readLine()) != null){
//将每次读取的数据 追加到StringBuffer
sb.append(line);
}
//4.返回结果
return sb.toString();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
(2)普通业务Servlet的编写(接收 JSON格式与非 JSON格式)
package com.lagou.web.servlet;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
import com.lagou.base.BaseServlet;
import com.lagou.pojo.Course;
import com.lagou.pojo.Course_Lesson;
import com.lagou.pojo.Course_Section;
import com.lagou.service.CourseContentService;
import com.lagou.service.impl.CourseContentServiceImpl;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
@WebServlet("/courseContent")
public class CourseContentServlet extends BaseServlet {
//展示对应课程的章节与课时信息
public void findSectionAndLessonByCourseId(HttpServletRequest request , HttpServletResponse response){
try {
//1.获取参数
String course_id = request.getParameter("course_id");
//2.业务处理
CourseContentService contentService = new CourseContentServiceImpl();
List<Course_Section> list = contentService.findSectionAndLessonByCourseId(Integer.parseInt(course_id));
//3.返回结果
String result = JSON.toJSONString(list);
response.getWriter().print(result);
} catch (IOException e) {
e.printStackTrace();
}
}
//根据课程id 回显课程信息
public void findCourseById(HttpServletRequest request ,HttpServletResponse response){
try {
//1.获取参数
String course_id = request.getParameter("course_id");
//2.业务处理
CourseContentService contentService = new CourseContentServiceImpl();
Course course = contentService.findCourseByCourseId(Integer.parseInt(course_id));
//3.返回JSON数据
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(Course.class,"id","course_name");
String result = JSON.toJSONString(course, filter);
response.getWriter().print(result);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 保存&修改 章节信息
* */
public void saveOrUpdateSection(HttpServletRequest request ,HttpServletResponse response){
try {
//1.获取参数 从域对象中获取
Map<String,Object> map = (Map)request.getAttribute("map");
//2.创建Course_Section
Course_Section section = new Course_Section();
//3.使用BeanUtils工具类,将map中的数据封装到 section
BeanUtils.populate(section,map);
//4.业务处理
CourseContentService contentService = new CourseContentServiceImpl();
//判断是否携带id
if(section.getId() == 0){
//新增操作
String result = contentService.saveSection(section);
//5.响应结果
response.getWriter().print(result);
}else{
//修改操作
String result = contentService.updateSection(section);
response.getWriter().print(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//修改章节状态
public void updateSectionStatus(HttpServletRequest request ,HttpServletResponse response){
try {
//1.接收参数
int id = Integer.parseInt(request.getParameter("id"));//章节id
int status = Integer.parseInt(request.getParameter("status"));//章节状态
//2.业务处理
CourseContentService contentService = new CourseContentServiceImpl();
String result = contentService.updateSectionStatus(id, status);
//3.返回结果
response.getWriter().print(result);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 保存&修改 课时信息
* */
public void saveOrUpdateLesson(HttpServletRequest request ,HttpServletResponse response){
try {
//1.获取参数 从域对象中获取
Map<String,Object> map = (Map)request.getAttribute("map");
//2.创建Course_Lesson
Course_Lesson lesson = new Course_Lesson();
//3.使用BeanUtils工具类,将map中的数据封装到 section
BeanUtils.populate(lesson,map);
//4.业务处理
CourseContentService contentService = new CourseContentServiceImpl();
//判断是否携带id
if(lesson.getId() == 0){
//新增操作
String result = contentService.saveLesson(lesson);
//5.响应结果
response.getWriter().print(result);
}else{
//修改操作
String result = contentService.updateLesson(lesson);
response.getWriter().print(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
节选自拉钩教育JAVA系列教程
最后
以上就是等待苗条为你收集整理的Servlet编写Servlet编写的全部内容,希望文章能够帮你解决Servlet编写Servlet编写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复