使用servlet提供接口

对于Java开发人员来说,应该已经习惯了应用spring框架中的注解方式来提供接口,本人就是这种。不过最近由于工作需要,要开发纯Java项目,不使用任何框架,那就只能使用servlet来达到提供接口的目的了,顺便复习一下。
Servlet是 Java用来创建动态web应用的服务组件,可以被部署在Java web服务器中,例如:Tomcat,JBoss,WebLogic等主流服务器中。Servlet可以对用户的请求做出响应。
它的功能如下:

  1. 读取客户端发来的显示信息(表单数据)
  2. 读取客户端发来的隐式信息(请求头信息)
  3. 生成相应结果
  4. 发送显示信息给客户端(HTML)
  5. 发送隐式数据到客户端(状态码和响应头信息)

由于servlet一般是和JSP配合开发,但这里重点是介绍servlet如何提供接口,所以这里不会进行JSP的开发。由于希望不改变前端的调用方式,则servlet获取参数的部分会和配合jsp获取参数的方式有一点区别,其他的就没有了,该干嘛干嘛。

最后的小demo,可以点击文末链接下载。

现在开始这个过程吧。

1,eclipse中新建一个动态web项目,命名为OrdinaryWorldServletDemo。
在这里插入图片描述
在这里插入图片描述
2,引入jar包,包括servlet-api.jar,dubbo-2.5.3.jar,fastjson-1.2.47.jar。
其中servlet-api.jar在tomcat的lib目录下,提供servlet基本依赖,引入即可(没有安装tomcat请先安装,因为我们待会要使用tomcat来跑这个servlet项目)。
3,新建一个po类。

package com.twf.demo.po;
import java.io.Serializable;
/**
 * 人物信息
 * @author twf
 *
 */
public class CharacterInfo implements Serializable{
	private static final long serialVersionUID = -3468076463472476354L;
	private String name; // 姓名
	private String sex; // 性别
	private String job; // 工作
	private String address; // 地址
	public CharacterInfo(String name, String sex, String job, String address) {
		super();
		this.name = name;
		this.sex = sex;
		this.job = job;
		this.address = address;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "CharacterInfo [name=" + name + ", sex=" + sex + ", job=" + job
				+ ", address=" + address + "]";
	}
}

4, 新建一个servlet类。

package com.twf.demo.servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.dubbo.common.utils.IOUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.twf.demo.po.CharacterInfo;

@WebServlet("/FindCharacterInfoServlet")  // 该注解将会作为接口url的一部分
public class FindCharacterInfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 响应参数格式设置
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/json");
		response.setStatus(HttpServletResponse.SC_OK);
		
		// 如果是从JSP页面发起的请求,则参数是以下面的方式获取的。
//		String parameter = request.getParameter("xxx");
		
		// 现在是以这种方式先获取请求参数得json格式字符串
		BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf-8"));
		String body = IOUtils.read(reader); // 获取请求参数的json格式字符串
		
		// 然后将json字符串转为Java对象,这里只对参数做一个打印操作,有需要的朋友可以自行做其做其他操作
		CharacterInfo characterInfo = JSON.parseObject(body, new TypeReference<CharacterInfo>() {});
		System.out.println(characterInfo.toString());
		
		// 造几条数据返回
		List<CharacterInfo> list = new ArrayList<CharacterInfo>(); 
		CharacterInfo characterInfo1 = new CharacterInfo("孙少平", "男", "煤矿工人", "大牙湾煤矿");
		CharacterInfo characterInfo2 = new CharacterInfo("孙少安", "男", "农民企业家", "双水村");
		CharacterInfo characterInfo3 = new CharacterInfo("田晓霞", "女", "记者", "黄原省城");
		CharacterInfo characterInfo4 = new CharacterInfo("田润叶", "女", "教师", "学校");
		list.add(characterInfo1);
		list.add(characterInfo2);
		list.add(characterInfo3);
		list.add(characterInfo4);
		response.getWriter().println(list);
	}
}

5,使用postman模拟发送请求及结果如下。请求的url(即接口)就是:IP+端口+项目名称+servlet类的路径注解,如果发送的是POST请求,就会执行doPost()方法,如果发送的是GET请求,就会执行doGet方法。
在这里插入图片描述
后台日志打印如下:
在这里插入图片描述
说明接口调用成功。

另外,url的配置也可以采用配置文件的方式,即

  • 去掉servlet类的注解中的路径,只保留“@WebServlet”这部分
  • 然后在web.xml文件中加上如下配置:
    <servlet>
		<description></description>
		<display-name>FindCharacterInfoServlet</display-name>
		<servlet-name>FindCharacterInfoServlet</servlet-name>
		<servlet-class>com.twf.demo.servlet.FindCharacterInfoServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>FindCharacterInfoServlet</servlet-name>
		<url-pattern>/FindCharacterInfoServlet</url-pattern>
	</servlet-mapping>

项目源码点这里

猜你喜欢

转载自blog.csdn.net/tanwenfang/article/details/90573880