了解下服务器返回一串json

前言:

做了几年的Android’开发,对也一直对服务器的技术感兴趣,没事时候会研究一些,趁着有时间写个博客算是对后端入个门,做后端的请忽略,毕竟入门文章.

现在讲究前后端分离,各做各的事情,一直以来我们与服务器都是通过约定好的接口来交互,讨论的问题除了接口的定义还是接口的定义,那么今天我们瞅一下接口如何将数据返回给我们,我们如何发起一个http(https)请求,数据就从服务器返回来了(仅限java).

内容概要:

- 了解下java常用的服务器

- 返一串json需要哪些东西

- 返回一串json具体实现过程
常用的服务器:

Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问。开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有Tomcat、Resin、JBoss、WebSphere 和 WebLogic 等,下面将分别进行介绍。

Tomcat 服务器

目前最为流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型、轻量级的支持JSP和Servlet 技术的Web服务器,也是初学者学习开发JSP应用的首选。

Resin 服务器

Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。Resin本身包含了一个支持HTML的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建。

JBoss服务器

JBoss是一个种遵从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。JBoss采用JML API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含Servlet和JSP的Web容器,不过它可以和Tomcat完美结合。

WebSphere 服务器

WebSphere是IBM公司的产品,可进一步细分为 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的应用环境,可以运行于 Sun Solaris、Windows NT 等多种操作系统平台,用于建立、部署和管理Internet和Intranet Web应用程序。

WebLogic 服务器

WebLogic 是BEA公司的产品,可进一步细分为 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的一切应用服务器的用户来说,WebLogic是一个十分理想的选择。

先看看常用的技术概要:
- 服务框架:Dubbo,zookeeper,Rest服务

- 缓存:redis,ehcache

- 消息中间件:ActiveMQ,kafka

- 负责均衡:Nginx

- 分布式文件:FastDFS

- 安全框架:Apache shiro

- 任务调度:quartz

- 持久层框架:mybatis

- 日志:log4j

- 项目基础搭建。spring,springmvc,

- 环境搭建:linux下,

- 开发工具:eclipse。idea等

- 服务器:tomcat,jetty等

仅仅是返回个json需要这么多东西?,当然是不需要的,那到底需要啥呢?
想象一下,客户端X发起一个http(https)请求,服务端收得有个人叫做A收请求,A收完请求得找个人叫做B处理,B经过一系列处理以后,得将结果返回给X.流程如下:

好像有个Servlet,这就是返回一个json需要的关键技术之一

关键技术之二是?

好像多了个数据库,嗯,关键技术之二就是数据库

好了,配置完服务器,有Servlelt+数据库,那么返回给请求方一串json就是妥妥的了

数据库不多说,那么Servlet又是什么呢?

这是Servlet的详细教程,不需要看任何CSDN的博客

有点粗糙,看个详细的说明(盗用大漠孤狼哥们的图,这里借用一下):

总结一下时序图:

返回一串json具体实现过程

前提:JDK+IDE+Tomcat配置完+MySQL配置完

Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。

HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
  HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。

step1:
  • 写个类继承HttpServlet,继承doGet()或者doPost()方法
  • 在web.xml配置文件里添加映射关系,暴露对外访问路径.
  • 启动服务器,在浏览器上访问该Servlet(app调用接口也行),本质都是调用服务器对外暴露的接口
	
	public class TestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	//		super.doGet(req, resp);
	//        processHtmlResult(resp);
	//        processJsonListResult(resp);
	//        processSQLResultList(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	//        super.doPost(req, resp);
    }

    private void processSQLResultList(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/json;charset=UTF-8");
        String name = req.getParameter("name");
        String pwd = req.getParameter("pwd");
        if (name == null || "".equals(name) || pwd == null || "".equals(pwd)) {
            BaseJsonBean bean = new BaseJsonBean();
            bean.setErrcode(1);
            bean.setErrMessage("request fail beause args is illegl!");
            PrintWriter writer = resp.getWriter();
            writer.println(new Gson().toJson(bean));
            writer.flush();
        } else {
            TempUserDao.getInstance().insertUser(new UserBean(name, pwd));
            List<UserBean> resultList = TempUserDao.getInstance().selectAllUser();
            AllUserJsonBean bean = new AllUserJsonBean(resultList.size(), resultList);
            bean.setErrcode(0);
            bean.setErrMessage("request success!");
            PrintWriter writer = resp.getWriter();
            writer.println(new Gson().toJson(bean));
            writer.flush();
        }

    }

    private void processJsonListResult(HttpServletResponse resp) throws IOException {
        resp.setContentType("text/json;charset=UTF-8");
        List<UserBean> list = new ArrayList<>();
        list.add(new UserBean("小强", "Mr.qiang"));
        list.add(new UserBean("小明", "Mr.ming"));
        list.add(new UserBean("隔壁老王", "Mr.wang"));
        list.add(new UserBean("瘦猴", "Mr.monkey"));
        list.add(new UserBean("旺仔", "Mr.boys"));
        list.add(new UserBean("老妹儿", "Mr.girl"));
        AllUserJsonBean bean = new AllUserJsonBean(list.size(), list);
        bean.setErrcode(0);
        bean.setErrMessage("request success!");
        PrintWriter writer = resp.getWriter();
        writer.println(new Gson().toJson(bean));
        writer.flush();
    }

    private void processHtmlResult(HttpServletResponse resp) throws IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.println("一曲相思 sing by 半阳");
        writer.flush();
    }
}
<servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>servlet.test.TestServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/wc</url-pattern>
    </servlet-mapping>

http://localhost:8080/rootDir/test
http://localhost:8080/rootDir/wc

至此,终于了解了后端如何将实体bean,生成json返给客户端了.本地就可以访问了,但是如果需要让别人访问,那就需要对外提供服务的服务器(阿里云,腾讯云,百度云,华为云,京东云等云服务器厂商),如果是个网站,还需要公网ip,域名(包含DNS域名解析)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值