`
yelifei94
  • 浏览: 30689 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

二、Jforum核心类 Jforum

阅读更多
<!-- 核心servlet 处理全部请求 -->
    <servlet>
		<servlet-name>jforum</servlet-name>
		<servlet-class>net.jforum.JForum</servlet-class>
		
		<init-param>
			<param-name>development</param-name>
			<param-value>true</param-value>
		</init-param>
    </servlet>

	<!-- Installer -->
	<!-- 初始化servlet -->
    <servlet>
    	<servlet-name>install</servlet-name>
    	<servlet-class>net.jforum.InstallServlet</servlet-class>
    	
    	<init-param>
			<param-name>development</param-name>
			<param-value>true</param-value>
		</init-param>
    </servlet>

    <!-- Mapping -->
    <servlet-mapping>
    	<servlet-name>install</servlet-name>
    	<url-pattern>/install/install.page</url-pattern>
    </servlet-mapping>
 
	<servlet-mapping>
    	<servlet-name>jforum</servlet-name>
    	<url-pattern>*.page</url-pattern>
    </servlet-mapping>

 

 

package net.jforum;


/**
 *集成基类Servlet JForumBaseServlet
 *JForumBaseServlet 中也是负责对一起基本配置的加载
 *搭配环境
 */
public class JForum extends JForumBaseServlet {
	private static boolean isDatabaseUp;

	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		super.startApplication();

		isDatabaseUp = ForumStartup.startDatabase();
		try {
			Connection conn = DBConnection.getImplementation().getConnection();
			
			/**
			 * 所有的SystemGlobals.getValue都是获取配置文件中的信息,至于他是如何加载配置文件
			 */
			conn.setAutoCommit(!(SystemGlobals
					.getBoolValue("database.use.transactions")));

			MySQLVersionWorkarounder dw = new MySQLVersionWorkarounder();
			dw.handleWorkarounds(conn);

			JForumExecutionContext ex = JForumExecutionContext.get();
			ex.setConnection(conn);
			JForumExecutionContext.set(ex);

			ForumStartup.startForumRepository();
			// 字面意思理解,加载排行,表情,板块信息
			RankingRepository.loadRanks();
			SmiliesRepository.loadSmilies();
			BanlistRepository.loadBanlist();
		} catch (Throwable e) {
			throw new ForumStartupException("Error while starting jforum", e);
		} finally {
			JForumExecutionContext.finish();
		}
	}

	/**
	 * 这个方法是重点,他负调用其他的业务层,处理数据
	 */
	public void service(HttpServletRequest req, HttpServletResponse res)
			throws IOException, ServletException {
		Writer out = null;

		/**
		 * JForumContext保存了容器的一些基本信息 从他的属性可以看出来 
		 * contextPath : 容器路径 不知道怎么理解
		 * servletExtension : servlet的拓展
		 * request :servlet原始请求信息
		 * response : 
		 * isEncodingDisabled : boolean 
		 * isBot : boolean
		 */
		JForumContext forumContext = null;
		RequestContext request = null;
		ResponseContext response = null;
		
		/**
		 * 获取默认编码 在config/database下面 不同的数据库都有
		 */
		String encoding = SystemGlobals.getValue("encoding");
		try {
			JForumExecutionContext ex = JForumExecutionContext.get();

			req.getParameterNames();
			
			/**
			 * WebRequestContext 这个类也非常重要,
			 * 它负责对请求的一些参数处理
			 */
			request = new WebRequestContext(req);
			response = new WebResponseContext(res);

			checkDatabaseStatus();
            
			/**
			 * 创建 JForumContext对象 封装容器基本信息
			 */
			forumContext = new JForumContext(request.getContextPath(),
					SystemGlobals.getValue("servlet.extension"), request,
					response);

			ex.setForumContext(forumContext);

			JForumExecutionContext.set(ex);

			/**
			 * context是封装在jar包里面的容器模板
			 */
			SimpleHash context = JForumExecutionContext.getTemplateContext();

			ControllerUtils utils = new ControllerUtils();
			utils.refreshSession();

			/**
			 * 下面是系列的通用处理过程,把一些配置信息加载到容器当中
			 * ,对我们改装jforum功能作用不大
			 */
			context.put("logged", SessionFacade.isLogged());

			SecurityRepository.load(SessionFacade.getUserSession().getUserId());

			utils.prepareTemplateContext(context, forumContext);

			String module = request.getModule();

			String moduleClass = (module != null) ? ModulesRepository
					.getModuleClass(module) : null;

			if (moduleClass == null) {
				response.sendError(404);
			} else {
				boolean shouldBan = shouldBan(request.getRemoteAddr());

				if (!(shouldBan)) {
					context.put("moduleName", module);
					context.put("action", request.getAction());
				} else {
					moduleClass = ModulesRepository.getModuleClass("forums");
					context.put("moduleName", "forums");
					((WebRequestContext) request).changeAction("banned");
				}

				if ((shouldBan)
						&& (SystemGlobals
								.getBoolValue("banlist.send.403forbidden"))) {
					response.sendError(403);
				} else {
					context.put("language", I18n.getUserLanguage());
					context.put("session", SessionFacade.getUserSession());
					context.put("request", req);
					context.put("response", response);

					out = processCommand(out, request, response, encoding,
							context, moduleClass);
				}
			}
		} catch (Exception e) {
			handleException(out, response, encoding, e, request);
		} finally {
			handleFinally(out, forumContext, response);
		}
	}
}

 

 

   如果需要 跟踪数据的话 毫无疑问是从这个类开始,以及编码 等其他信息均可在这里得到。

0
1
分享到:
评论

相关推荐

    jforum3.0所需要的jar包

    7. **Jforum核心jar**:最后,jforum-*.jar是jForum自身的核心库,包含了论坛系统的业务逻辑和具体实现。这些jar包是jForum3.0的核心组成部分,确保了论坛的各项功能得以实现。 在部署jForum3.0时,确保所有必要的...

    jforum二次开发 详解 BBS开源安装

    【JForum二次开发详解:BBS开源安装】 JForum是一款基于Java语言的开源论坛系统,以其高度可定制性、稳定性及强大的社区功能受到广大开发者喜爱。对于那些希望根据自身需求进行定制化的用户,JForum提供了丰富的二...

    Jforum相关文档和PPT

    数据库访问实现是Jforum数据存储的核心。Jforum通常使用Hibernate或iBatis等ORM框架,通过SQL语句与数据库交互。理解如何配置数据源、编写实体类、映射文件以及执行查询和更新操作,对于论坛的数据库管理至关重要。 ...

    JForum3 完整项目

    **JForum3核心特性** 1. **多语言支持**:JForum3 支持多种语言,方便不同地区的用户进行交流,体现了其国际化和本地化的优秀特性。 2. **模板引擎**:采用Freemarker模板引擎,使得界面设计与程序逻辑分离,方便...

    jforum 源码

    本篇文章将深入探讨JForum源码中的核心知识点,以及它如何与FreeMarker结合提供动态网页生成。 1. **FreeMarker模板引擎** FreeMarker是一个用Java语言编写的模板引擎,用于生成动态内容。在JForum中,FreeMarker...

    jforum3源代码 数据库

    2. **业务逻辑层(Business Logic Layer)**:包含Java类,处理论坛的核心业务,如用户登录、发帖、回复等。 3. **数据访问层(Data Access Layer)**:通过DAO(Data Access Object)接口和实现,与数据库进行交互...

    jforum-2.1.8-编译代码.zip

    在这个"jforum-2.1.8-编译代码.zip"压缩包中,包含了JForum 2.1.8版本的源代码,对于开发者来说,这是一个深入理解JForum工作原理、进行二次开发或定制化改造的宝贵资源。 首先,让我们了解JForum的基本架构。...

    jforum 2.1.9源码

    1. **Core**:这是JForum的核心模块,包含了论坛的基本功能,如用户管理、论坛板块、帖子处理等。其中,`com.jforum`包下包含了大部分业务逻辑,而`com.jforum.util`则提供了基础工具类。 2. **Database**:JForum...

    jforum功能说明

    Jforum的核心优势在于其代码结构清晰,遵循BSD授权,这意味着用户在使用和进行二次开发时不必担心版权问题,使其成为论坛系统二次开发的理想选择。 Jforum采用自有的MVC(Model-View-Controller)框架,虽然初学者...

    jforum-2.1.8.zip

    四、JForum核心组件与技术 1. **Struts框架**:JForum采用Struts作为MVC框架,处理HTTP请求并控制业务流程。 2. **Spring框架**:用于依赖注入,管理Bean,实现事务控制等。 3. **Hibernate**:作为ORM框架,负责...

    java开源论坛jforum

    在JForum中,这部分通常由Servlet或Action类实现。当用户发起请求时,控制器接收并解析请求,调用相应的模型方法处理数据,然后将结果传递给视图进行展示。控制器还负责处理错误和异常,保持系统的稳定运行。 除了...

    Jforum论坛数据库架构

    数据库架构是任何Web应用程序的核心部分,对于Jforum论坛而言也不例外。一个良好的数据库架构设计能够确保论坛的数据高效、稳定且易于扩展。本文将深入探讨Jforum论坛的数据库架构,分析其设计原则、主要数据表结构...

    jforum博客

    1. **安装与配置**:下载JForum的源码或二进制包,根据官方文档配置数据库连接、电子邮件服务等基本设置。 2. **模板定制**:进入`templates`目录,选择或创建一个模板,修改HTML和JSP文件以适应博客的布局,例如...

    jforum-2.1.8-src.zip

    此外,JForum的源代码开放,允许开发者进行二次开发,定制化自己的论坛系统。 6. **安全与性能** JForum重视安全性,提供了防止SQL注入、XSS攻击等安全措施。同时,通过优化数据库查询和缓存策略,提升了系统的...

    jforum开源论坛 官方源代码(2.1.9)

    本文将深入解析JForum的核心组件、架构设计以及关键功能,为对Java Web开发感兴趣的朋友们提供参考。 首先,JForum的核心组件主要包括用户管理、论坛板块、主题与帖子、权限控制和搜索功能。用户管理模块允许用户...

    Java论坛系统 JForum

    论坛的核心是主题和帖子。主题是一组相关帖子的集合,通常由一个发起人创建,其他用户可以通过回复帖子参与到讨论中。JForum支持丰富的帖子格式,包括富文本编辑器,允许用户插入图片、链接和其他多媒体内容。 **5....

    jforum项目

    在这个项目中,我们将深入探讨JForum的核心特性,理解其架构设计,并通过分析源码来提升我们的Java Web开发技能。 首先,JForum采用了MVC(Model-View-Controller)架构模式,这是Web应用开发中的经典模式。Model...

    jforum2.1.9代码及SQL SERVER数据库备份

    首先,jForum的核心特性在于它的模块化设计,允许开发者轻松地扩展和定制功能。源码分析可以从以下几个方面入手: 1. **框架结构**:jForum基于Java Servlet和JSP技术构建,利用MVC(Model-View-Controller)设计...

    JForum-2.1.6-src.zip_JForum-2.1.4_JForum-2.1.6-src_ejb_jforum_jf

    JForum 提供了丰富的API和文档,方便开发者进行二次开发。 ### 文件结构分析 在提供的压缩包`JForum-2.1.6-src`中,我们可以看到源代码的完整结构,包括但不限于以下关键部分: - **src**: 包含了所有源代码,...

Global site tag (gtag.js) - Google Analytics