使用servlet提供接口

    xiaoxiao2024-11-28  62

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

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

    由于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>

    项目源码点这里。

    最新回复(0)