Tomcat 是 jakarta 所提供的 JSP/Servlet Reference Implementation, 主要的开发者 Craig McClanahan 也是 Struts 的主要开发人员, 因此, 他利用了 struts 建立了 tomcat admin 这个项目, 作为管理 tomcat server 的环境, 当你安装完成 tomcat 的时候, 只需要 http://localhost:8080/admin , 就可以连结到 administrator 的页面, 它采用 Memory Realm 的身份验证模式, 会出现一登个登陆页面要求你登陆,
可以登陆的用户, 将根据你的 %CATALINA_HOME%\conf\ 之下的 tomcat-users.xml 所定义 admin 这个 role 的所有用户,
xml version='1.0' encoding='utf-8'?> <tomcat-users><role rolename="tomcat"></role><role rolename="role1"></role><role rolename="manager"></role><role rolename="admin"></role><user roles="tomcat" username="tomcat" password="tomcat"></user><user roles="role1" username="role1" password="tomcat"></user><user roles="tomcat,role1" username="both" password="tomcat"></user><user roles="admin,manager" username="admin" password=""></user></tomcat-users>
这个范例中, 具有 admin ROLE 的身份的只有 admin 这个用户,他的密码为空白,所以我们就可以采用, Username="admin", Password="", 来登陆这个系统. 那么,为何是采用 admin ROLE 呢, 而不是其他的 ROLE 呢 ? 就必须查看你的 %CATALINA_HOME%\server\webapps\admin\WEB-INF\web.xml,
<security-constraint> <display-name>Tomcat Server Configuration Security Constraint</display-name> <web-resource-collection><web-resource-name>Protected Area</web-resource-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.do</url-pattern> <url-pattern>*.html</url-pattern> </web-resource-collection><auth-constraint> <role-name>admin</role-name> </auth-constraint></security-constraint> <login-config><auth-method>FORM</auth-method> <realm-name>Tomcat Server Configuration Form-Based Authentication Area</realm-name> <form-login-config><form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config></login-config> <security-role><description>The role that is required to log in to the Administration Application </description><role-name>admin</role-name> </security-role>
无论是 Authetication ( 身份验证 ) 还是 Authorization ( 权限管控 ) 都只有设置相关的 admin ROLE, 当你想要新增或修改相关的 AA, 就必须修改这一个文件, 来符合你的环境.
登陆完成之后, 就会出现一个管理员界面, 至于他的作用就是管理整个 tomcat 相关的设置文件,
而这次我们要探讨的不是怎么使用整个 tomcat admin 的操作, 而是左方的控制树状选单.
SECTION 02 TreeControlNode 简介
每一个树状节点都是一个 TreeControlNode, 主要可以设置
name: 这个节点的名称
icon: 这个节点的图片
label: 这个节点的说明
action: 是否具有连结
target: 点选后的目标位置 ( frame )
expanded: 是否展开
TreeBuilder , 就是产生 TreeControlNode 的集合, 我们可以查看产生 ROOT 的方法.
TreeControlNode root = new TreeControlNode("ROOT-NODE",null, rootnodeName,"setUpTree.do?select=ROOT-NODE","content", true, domain);
不难发现, 就是这么产生每一个树状节点.
SECTION 03 TreeControl 简介
org.apache.webapp.admin.SetUpTreeAction 是整个 Tree 初始化的重要 action, 第一次取得所有网页资料, 将在这里产生将所有的数据放入 session 之中, 你会看到 servlet.getServletConfig().getInitParameter("...") 将会去采用 web.xml 中的 init-parameter 设置值, 接下来的操作就比较重要, 牵扯也比较广泛, 我们会把 root 放到 TreeControl 之中,
TreeControl control = new TreeControl(root);
简单来说, 先建立一个 Root 的 TreeNode, 我们将根据这个 Root 去设置 TreeControl, 就是整个树状结构的根. 请注意, 最后我们放入 session 的是 treeControl 但是这时候, treeControl 只有 root 这个根节点.
接着, 我们将把整个树状结构放到 treeControl, 该怎么办, 怎么处理 ?
我们利用到 TreeBuilder ( Builder Pattern ) 你会看到一些复杂的代码, 没关系, 他将建立很多 tree 可以在 web.xml 的 treebuilders 之 init-param 中看到 -org.apache.webapp.admin.TomcatTreeBuilder, -org.apache.webapp.admin.resources.ResourcesTreeBuilder, -org.apache.webapp.admin.users.UsersTreeBuilder 这几个 TreeBuilder, 不过我只说明 UsersTreeBuilder 就足够让大家了解了. 基本上,我们将 org.apache.webapp.admin.users.UsersTreeBuilder newInstance() 产生对象,接着使用 buildTree() 就能够产生整个树状结构放到 treeControl 之中 ~
SECTION 04 TreeBuilder 简介
TreeBuilder 是一个 interface, 我们前端的程序就是调用 TreeBuilder 来产生 Tree 放入 Session 之中,
public interface TreeBuilder { public void buildTree(TreeControl treeControl, ApplicationServlet servlet, HttpServletRequest request); }
例如 org.apache.webapp.admin.users.UsersTreeBuilder 中,我们可以看到他实现 buildTree(), 最重要的是 addSubtree()中, 产生所有的子节点, 接着,由 root 开始 add 所有的节点, 此时, 所有的树状资料就是放在 treeControl 这个 session 之中.
protected void addSubtree(TreeControlNode root, MessageResources resources) { String databaseName = URLEncoder.encode ("Users:type=UserDatabase,database=UserDatabase"); TreeControlNode subtree = new TreeControlNode ("Global User and Group Administration", "folder_16_pad.gif", resources.getMessage("users.treeBuilder.subtreeNode"), null, "content", true); TreeControlNode groups = new TreeControlNode ("Global Administer Groups", "Groups.gif", resources.getMessage("users.treeBuilder.groupsNode"), "users/listGroups.do?databaseName=" + URLEncoder.encode(databaseName) + "&forward=" + URLEncoder.encode("Groups List Setup"), "content", false); TreeControlNode roles = new TreeControlNode ("Global Administer Roles", "Roles.gif", resources.getMessage("users.treeBuilder.rolesNode"), "users/listRoles.do?databaseName=" + URLEncoder.encode(databaseName) + "&forward=" + URLEncoder.encode("Roles List Setup"), "content", false); TreeControlNode users = new TreeControlNode ("Global Administer Users", "Users.gif", resources.getMessage("users.treeBuilder.usersNode"), "users/listUsers.do?databaseName=" + URLEncoder.encode(databaseName) + "&forward=" + URLEncoder.encode("Users List Setup"), "content", false); root.addChild(subtree); subtree.addChild(users); subtree.addChild(groups); subtree.addChild(roles); }
很明显的, 我们可以知道, 这个 UsersTreeBuilder 产生的就是 Tomcat Admin 的 User Definition. 下面具有 Users, Groups 以及 Roles 的子节点, 当你选择任何一个子节点的时候, 他将会有一个 action 的动作送到 server, 并且修改相关的树状设置产生应该显示的树状模块, 及管理画面.
SECTION 05 TreeControlTag 的简介
在 org.apache.webapp.admin.TreeControlTag 之中, 最重要的就是从 Session 取得 TreeControl 并且根据里面的內容产生相关的 HTML 代码.
// 取得 TreeControl protected TreeControl getTreeControl() throws JspException { ........ } // 产生 HTML 代码 protected void render(JspWriter out, TreeControlNode node, int level, int width, boolean last) throws IOException { ....... }
如果你对 tablib 熟悉的话, 可以看一下这个程序, 如果不熟悉, 你就当作是理所当然的代码.这个 taglib 也是整个树状结构的控制核心, 他会根据你的网页操作, 更改你的树状结构的展现方式, 如果必要的时候,例如增加 checkbox 的处理,可以修改这个程序的 render 部分, 让它具有勾选的功能.
SECTION 06 tree-control-test.jsp 的简介
你可以看到 SetUpTreeAction 最后就是 forward 到 Tree Control Test , 在 struts-config.xml 设置中 Tree Control Test 就是指到 tree-control-test.jsp 在这个 jsp 之中, 简单的 taglib 调用
<!----><controls:tree ??="" action="treeControlTest.do?tree=${name}" ????????????????="" ????????="" ??????="" styleselected="tree-control-selected" tree="treeControlTest" ???????????????="" styleunselected="tree-control-unselected"></controls:tree>
就可以产生所有的树状结构了. 但是, 你可以看到每个 Node 的 action 就是 treeControlTest.do. 所以最后, 就是从 struts-config.xml 中检查 treeControlTest 是指 org.apache.webapp.admin.TreeControlTest 这个程序. 基本上你会传入 tree 这个参数, 如果你现在将 expand = true 修改设置为 false, 还可以传入 select 这个参数, 代表现在是这个 treeControlNode 被选择了.
SECTION 07 结论
在 BEA Workshop 8.1 的 netui:tree 组件, 也是采用同样的解决方式来产生 Tree. 这是属于动态的树状选单产生的方法. 和一次下载到 client 端的 javascript Tree 来相比, 每一次打开关上节点的动作都必须和 Server 端沟通, 是比较耗费资源的. 当 client 端的 browser 版本不确定的时候, 使用 DHTML ( html+javascript ) 有时候会产生错误, 有时候更会因为 javascript 数据量过大会导致 client 端的内存不足, 另外, Jdon 的 wys1978 提供了 http://webfx.eae.net/dhtml/xloadtree/xloadtree.html 一个 javascript Tree, 虽然属于 javascript, 但是不同的是, 每次动作都去调用 server 取得数据, 所以, 当你使用比较小型的系统可以采用 struts-menu 一次下载的方式就可以完成你的 tree 选单, 当数据量过大或变化频繁的时候, 我不建议一次下载所有的数据到 client 端, 所以, 不论是 taglib 解决方法还是 xloadtree 都是比较好的选择.
分享到:
相关推荐
Jakarta Struts 1.1的标签还包括"jakarta-struts_1"和"struts1_w",这可能是指Struts 1的不同版本或相关讨论主题。Struts 1在后续版本中不断演进,添加了更多特性,但随着Spring MVC和Play Framework等新型框架的...
这个压缩包"jakarta-tomcat-5.5.7-admin.zip"提供了Tomcat服务器的管理员接口,使得系统管理员能够更方便地管理他们的应用服务。 **Tomcat 5.5.7 特性** 1. **Servlet 2.4 和 JSP 2.0 支持**:Tomcat 5.5.7符合...
apache-jakarta-commons-codec.jar apache-jakarta-commons-collections.jar apache-jakarta-commons-discovery.jar apache-jakarta-commons-email.jar apache-jakarta-commons-fileupload.jar apache-jakarta-...
在本文中,我们将深入探讨jakarta-tomcat-connectors-1.2.15-src.tar.gz这个源码包,揭示其中包含的源代码、设计理念以及如何利用这些源码来理解Tomcat的工作原理。 首先,让我们了解一下Jakarta Tomcat Connectors...
【标题】"jakarta-tomcat-connectors-jk2.0.4-win32" 是一个针对Windows 32位系统的Tomcat连接器版本,它主要用于集成Apache HTTP服务器与Apache Tomcat应用服务器。这个组件是Jakarta项目的一部分,旨在提供高效且...
标题中的"jakarta-tomcat-connectors-jk-1.2.6-src.tar.gz"是一个源码压缩包,其中包含了Jakarta Tomcat Connectors(JK)的版本1.2.6的源代码。Jakarta Tomcat Connectors是Apache Tomcat服务器的一部分,用于处理...
【标题】"jakarta-tomcat-connectors-1.2.15-src.zip" 是一个包含Apache Tomcat连接器源代码的压缩包,主要用于帮助开发者深入理解Tomcat的工作原理,并进行自定义或扩展。 【描述】提到的"jakarta_tomcat_...
这个“jakarta-tomcat-connectors-jk2-src-current.tar.gz”文件是一个源码包,包含了JK2的源代码,供开发者研究、定制或扩展其功能。 1. **JK2简介** JK2 是Tomcat Connectors的下一代版本,提供了一种更灵活和高...
- **Major Version**: Tomcat 10.0.0-M1是Tomcat的重大更新,标志着Java EE(现称为Jakarta EE)8支持的开始。M1是Milestone 1的缩写,表示这是该版本开发过程中的一个重要里程碑。 - **Java Compatibility**: ...
这可能包括对Java EE 9的支持,因为Java EE已经被更名为Jakarta EE,并且在Tomcat 10中,API包名也进行了调整,以遵循新的Jakarta EE规范。 3. **Servlet和JSP支持**: - Tomcat的核心功能之一就是作为Servlet容器...
《 jakarta-tomcat-4.0-b1.zip:深入解析Tomcat与JSTL的融合应用》 在IT行业中,服务器端应用的部署和运行是至关重要的环节,而Apache Tomcat作为Java Servlet和JavaServer Pages(JSP)的开源Web应用服务器,一直...
`jakarta-struts-1.2.4-src.zip` 包含了Struts 1.2.4的完整源代码,开发者可以借此深入了解框架的内部实现,学习其设计思路。主要的源代码目录结构如下: - `org.apache.struts.action`:包含Action和ActionForm...
tomcat升级为10.x版本以后,由于JavaEE更名为Jakarta,原有的javax.*命名空间迁移为jakarta.x,原有项目如需迁移到tomca10.x必须要更改代码,此工具不需修改大量的源代码,只需将打出的war包放到解压后的lib下,执行...
1. **下载与安装**:首先,从Apache官方网站下载对应版本的jakarta-tomcat-connectors-jk2.0.2-win32-IIS.zip文件,解压后将isapi_redirect.dll和相关库文件拷贝到IIS的扩展目录。 2. **配置IIS**:在IIS管理工具中...
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,它早期的名称为catalina,后来由Apache、Sun 和其他一些公司及...
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理...
【Jakarta Tomcat 4.0.1:入门与核心概念】 Jakarta Tomcat 4.0.1 是一个基于Apache软件基金会(ASF)的Jakarta项目中的关键组件,它是针对Java Servlet和JavaServer Pages(JSP)技术的开源Web应用服务器。作为一...
Tomcat是Apache软件基金会Jakarta项目的一部分,它实现了Java EE的Web容器规范——Servlet和JSP规范。这次我们关注的是其针对Windows x64操作系统的版本。 Tomcat 8.5.x系列是Tomcat的稳定版本之一,提供了许多改进...
这个版本号4.1.39表明它是Tomcat 4系列的一个稳定版本,发布于2005年,而“LE”代表“Limited Edition”,即限制版,可能指的是某些功能或支持的限制。"jdk14"则暗示这个版本的Tomcat需要Java Development Kit (JDK)...
Apache Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器。按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat...