Java服务器开发之搭建游戏基础框架
最开始的项目是一个Maven构建的Java Web项目,使用Tomcat做为Web容器来提供服务。
上图是游戏的一个最基础架构的脑图,下面是对应搭建好项目的目录组织
java
下面讲解这基础的项目中最最最重要的一个文件:web.xml文件
当启动Web项目会先读取项目中的Web.xml配置文件。web
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>com.server.core.boot.GameStartListener</listener-class> </listener> <servlet> <servlet-name>CheckTokenServlet</servlet-name> <servlet-class>com.server.core.login.CheckTokenServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CheckTokenServlet</servlet-name> <url-pattern>/login/CheckToken</url-pattern> </servlet-mapping> <servlet> <servlet-name>BackgroundManager</servlet-name> <servlet-class>com.server.game.backstage.BackgroundManager</servlet-class> </servlet> <servlet-mapping> <servlet-name>BackgroundManager</servlet-name> <url-pattern>/background/*</url-pattern> </servlet-mapping>
Web.xml的执行步骤:数据库
-
执行listener和context-param服务器
- 所以咱们在Listener中将游戏启动起来,所以这里调用启动游戏的代码逻辑com.server.core.boot.GameStartListener
-
接着容器建立一个ServeltContext,项目全部部分都将会共享这个上下文架构
- 游戏项目中用不到这个,所以不作定义
-
容器以context-param的name做为键,value做为值,将其转化为键值对,存入ServletContextapp
- 一样用不到,不作定义
-
容器建立listener中的类实例,根据配置的class类路径listener-class来建立监听,在监听中会有contextInitialized(ServletContextEvent args)初始化方法,启动Web应用时,系统调用Listener的该方法,在这个方法中得到context-param的值就是application.getInitParameter(“context-param的键”);获得这个context-param的值以后,你就能够作一些操做了。框架
-
例子:你可能想在项目启动以前就打开数据库,那么这里就能够在context-param中设置数据库的链接方式(驱动、url、user、password),在监听类中初始化数据库的链接。这个监听是本身写的一个类,除了初始化方法,它还有销毁方法,用于关闭应用前释放资源。好比:说数据库链接的关闭,此时,调用contextDestroyed(ServletContextEvent args),关闭Web应用时,系统调用Listener的该方法。jsp
-
所以结合第一步,咱们就会将游戏逻辑启动起来ide
public class GameStartListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent arg0) { GameServer.start(); } @Override public void contextDestroyed(ServletContextEvent arg0) { GameServer.stop(); } }
-
-
接着,容器会读取filter,根据指定的类路径来实例化过滤器。url
- 游戏项目通常用不到,不作定义。
-
以上都是在WEB项目尚未彻底启动起来的时候就已经完成了的工做。若是系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,并且通常不会被容器销毁,它能够服务于多个用户的请求。因此,Servlet的初始化都要比上面提到的那几个要迟。
-
因为游戏项目中须要一些后台功能提供给运营后台来使用,所以游戏项目中也须要定义几个servlet
- 后台管理servlet:BackgroundManager
- 后台GMservlet:CheckTokenServlet
servlet代码以下:
public class BackgroundManager extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { BackgroundService.getInstance().handle(req, resp); } }
-
总结
- 经过JavaWeb项目配置对应的web.xml的方式来做为容器将游戏项目启动起来。
- 真正的游戏启动或关闭逻辑转到对应的管理类中
- 经过xml中定义的游戏启动逻辑以及后台查询管理类来管理后台对游戏的一些操做
- 为后台提供一些基础的操做游戏逻辑功能
经过上面的两部将能够简单的搭建起一个最基本的游戏项目。你们能够行动起来搭建看看。
下一节的内容预告以下