前言:
做了几年的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又是什么呢?
有点粗糙,看个详细的说明(盗用大漠孤狼哥们的图,这里借用一下):
总结一下时序图:
返回一串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域名解析)