<!-- 核心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);
}
}
}
如果需要 跟踪数据的话 毫无疑问是从这个类开始,以及编码 等其他信息均可在这里得到。
分享到:
相关推荐
7. **Jforum核心jar**:最后,jforum-*.jar是jForum自身的核心库,包含了论坛系统的业务逻辑和具体实现。这些jar包是jForum3.0的核心组成部分,确保了论坛的各项功能得以实现。 在部署jForum3.0时,确保所有必要的...
【JForum二次开发详解:BBS开源安装】 JForum是一款基于Java语言的开源论坛系统,以其高度可定制性、稳定性及强大的社区功能受到广大开发者喜爱。对于那些希望根据自身需求进行定制化的用户,JForum提供了丰富的二...
数据库访问实现是Jforum数据存储的核心。Jforum通常使用Hibernate或iBatis等ORM框架,通过SQL语句与数据库交互。理解如何配置数据源、编写实体类、映射文件以及执行查询和更新操作,对于论坛的数据库管理至关重要。 ...
**JForum3核心特性** 1. **多语言支持**:JForum3 支持多种语言,方便不同地区的用户进行交流,体现了其国际化和本地化的优秀特性。 2. **模板引擎**:采用Freemarker模板引擎,使得界面设计与程序逻辑分离,方便...
本篇文章将深入探讨JForum源码中的核心知识点,以及它如何与FreeMarker结合提供动态网页生成。 1. **FreeMarker模板引擎** FreeMarker是一个用Java语言编写的模板引擎,用于生成动态内容。在JForum中,FreeMarker...
2. **业务逻辑层(Business Logic Layer)**:包含Java类,处理论坛的核心业务,如用户登录、发帖、回复等。 3. **数据访问层(Data Access Layer)**:通过DAO(Data Access Object)接口和实现,与数据库进行交互...
在这个"jforum-2.1.8-编译代码.zip"压缩包中,包含了JForum 2.1.8版本的源代码,对于开发者来说,这是一个深入理解JForum工作原理、进行二次开发或定制化改造的宝贵资源。 首先,让我们了解JForum的基本架构。...
1. **Core**:这是JForum的核心模块,包含了论坛的基本功能,如用户管理、论坛板块、帖子处理等。其中,`com.jforum`包下包含了大部分业务逻辑,而`com.jforum.util`则提供了基础工具类。 2. **Database**:JForum...
Jforum的核心优势在于其代码结构清晰,遵循BSD授权,这意味着用户在使用和进行二次开发时不必担心版权问题,使其成为论坛系统二次开发的理想选择。 Jforum采用自有的MVC(Model-View-Controller)框架,虽然初学者...
四、JForum核心组件与技术 1. **Struts框架**:JForum采用Struts作为MVC框架,处理HTTP请求并控制业务流程。 2. **Spring框架**:用于依赖注入,管理Bean,实现事务控制等。 3. **Hibernate**:作为ORM框架,负责...
在JForum中,这部分通常由Servlet或Action类实现。当用户发起请求时,控制器接收并解析请求,调用相应的模型方法处理数据,然后将结果传递给视图进行展示。控制器还负责处理错误和异常,保持系统的稳定运行。 除了...
数据库架构是任何Web应用程序的核心部分,对于Jforum论坛而言也不例外。一个良好的数据库架构设计能够确保论坛的数据高效、稳定且易于扩展。本文将深入探讨Jforum论坛的数据库架构,分析其设计原则、主要数据表结构...
1. **安装与配置**:下载JForum的源码或二进制包,根据官方文档配置数据库连接、电子邮件服务等基本设置。 2. **模板定制**:进入`templates`目录,选择或创建一个模板,修改HTML和JSP文件以适应博客的布局,例如...
此外,JForum的源代码开放,允许开发者进行二次开发,定制化自己的论坛系统。 6. **安全与性能** JForum重视安全性,提供了防止SQL注入、XSS攻击等安全措施。同时,通过优化数据库查询和缓存策略,提升了系统的...
本文将深入解析JForum的核心组件、架构设计以及关键功能,为对Java Web开发感兴趣的朋友们提供参考。 首先,JForum的核心组件主要包括用户管理、论坛板块、主题与帖子、权限控制和搜索功能。用户管理模块允许用户...
论坛的核心是主题和帖子。主题是一组相关帖子的集合,通常由一个发起人创建,其他用户可以通过回复帖子参与到讨论中。JForum支持丰富的帖子格式,包括富文本编辑器,允许用户插入图片、链接和其他多媒体内容。 **5....
在这个项目中,我们将深入探讨JForum的核心特性,理解其架构设计,并通过分析源码来提升我们的Java Web开发技能。 首先,JForum采用了MVC(Model-View-Controller)架构模式,这是Web应用开发中的经典模式。Model...
首先,jForum的核心特性在于它的模块化设计,允许开发者轻松地扩展和定制功能。源码分析可以从以下几个方面入手: 1. **框架结构**:jForum基于Java Servlet和JSP技术构建,利用MVC(Model-View-Controller)设计...
JForum 提供了丰富的API和文档,方便开发者进行二次开发。 ### 文件结构分析 在提供的压缩包`JForum-2.1.6-src`中,我们可以看到源代码的完整结构,包括但不限于以下关键部分: - **src**: 包含了所有源代码,...