JetSpeed源码分析

导读:

  类功能分析:

  1. Request相关:

  1.1. Interface org.apache.jetspeed.request.RequestContext

  这个接口定义了许多可获取的上下文组件:

  包括:

  1.HttpRequest/Response;

  2.ServletConfig;

  3.ProfileLocater

  4.Pipeline

  5.Page

  6.ContentDispachter

  7.PortalURL

  8.ActionWindow

  9.CapabilityMap

  这样所有处理该RequestContext的组件都已包含在它自己里面了;只需在调用的过程中注入这些对象的实例即可。

  1.2. Class org.apache.jetspeed.container.ContainerRequest

  该类继承自HttpServletRequestWrapper,持有PortletDefinition和PortletRequest;

  1.3. Class org.apache.jetspeed.request.PortalRequest

  该类继承自HttpServletRequestWrapper,持有servletpath和contextpath和Httpsession;

  1.4. Interface org.apache.jetspeed.request.PortletRequest

  1.保存Request参数和取得参数的键;

  2.获取对应Portlet的模式;检查是否支持特定的模式;

  3.获取本地信息和权限信息;

  该类代表了一个 标准的访问portlet对象,功能如下:

  定义了一组常量用来从getAttribute()方法中获取客户端属性;

  public static final String USER_INFO = "javax.portlet.userinfo";

  public static final String FORM_AUTH = "FORM";

  public Object getAttribute(String name);

  ...

  定义了两个方法来获取模式和窗体状态:

  public PortletMode getPortletMode();

  public WindowState getWindowState();

  ...

  定义了一组方法来获取当前PortletRequest的Session:

  public PortletMode getPortletMode();

  public WindowState getWindowState();

  ...

  1.5.

  Interface org.apache.jetspeed.request.ActionRequest

  该类继承自PortletRequest,提供了Reader来读取PortletRequest中的内容;

  1.6. Interface org.apache.jetspeed.request.RendereRequest

  该类继承自PortletRequest,没有新增任何方法;

  1.7. Class org.apache.jetspeed.engine.servlet.ServletRequestImpl

  该类继承了HttpRequestWrapper,用来在PortletContainer内部传递Request请求;

  1.8. Class org.apache.jetspeed.container.invoker.LocalServletRequest

  该类封装了HttpRequestWrapper来提供一组属性值信息;

  1.9.

  Interface org.apache.jetspeed.aggregator.ContentDispatcher

  该接口提供一个方法从Fragment解析为PortletContent:

  PortletContent getPortletContent(Fragment fragment);

  ...

  2. Response相关:

  2.1. public class ContainerResponse extends HttpServletResponseWrapper

  封装了RenderResponse和ActionResponse,用来在容器内和被调用的Servlet通信;

  2.2. public class ContainerResponse extends HttpServletResponseWrapper

  包装了HttpServletResponse,通过:

  _getHttpServletResonse()方法获取其中的HttpServletResponse;

  encodeURL() 编码URL字符串;

  sendRedirect() 进行转发;

  2.3. class ServletResponseImpl extends HttpServletResponseWrapper implements PortletDispatcherIncludeAware

  对HttpServletResponseWrapper的又一次封装,只有包含include才使用它;

  2.4. interface PortletResponse

  定义了该接口来使Portlet容器和调用它的Client通信,定义了:

  public String encodeURL(String path); 用该方法来返回一个包含资源/应用数据的URL字符串;

  2.5. interface RenderResponse

  Portlet使用它来完成对客户端的相应;定义了:

  public PortletURL createRenderURL (); 方法来返回一个标示Portlet的具体URL,该URL 可能包含状态/模式等数据;

  public PortletURL createActionURL ();方法来返回一个标示Portlet的具体URL,该URL 可能包含状态/模式等数据;

  3. Servlet相关:

  3.1. class JetspeedServlet extends HttpServlet implements JetspeedEngineConstants, HttpSessionListener

  整个Portal引擎的入口,定义了如下的方法:

  public final void init( ServletConfig config )

  来完成启动引擎和获取相关资源的工作;

  public final void doGet( HttpServletRequest req, HttpServletResponse res )

  使用RequestContextComponent来创建用于和Portal通信的RequestContext;

  3.2. class JetspeedContainerServlet extends HttpServlet

  该类仅起到了路由请求的作用,并未提供任何上下文设置,定义了:

  public final void doGet(HttpServletRequest request, HttpServletResponse response)

  来完成根据request中设置的portletRequest/portletResponse的相关属性来选择交给目地Portlet的特定方法;

  4. Context相关:

  4.1. public interface PortalContext

  可以由该接口获取支持的窗体状态,portlet模式和启动属性等;

  4.2. public interface PortletContext

  可以由该接口获取支持的MIME-TYPE,PortletRequestDispatcher等;

  4.3. public class PortletRequestContext

  该类使用ThreadLocal来保存自己,并持有以下:

  private PortletDefinition pd;

  private Portlet portlet;

  

  private PortletRequest request

  private PortletResponse response;

  4.4. public class JetspeedPortletContext implements PortletContext, InternalPortletContext

  该类持有ServletContext和MutablePortletApplication,从而和ServletContext建立联系,可以使用任何ServletContext中的上下文组件,如RequestDispatcher和MIME-TYPE;

  5. Invoker相关:

  5.1. public interface PortletInvoker

  5.2. class ServletPortletInvoker implements JetspeedPortletInvoker

  完成跨越Application的Portlet调用(redirect到另一个应用的portlet),通过调用另一个应用的JetSpeedContainerServlet来路由请求;

  它使用一个ServletContext来获取另一个应用的ServletContext,如下:

  ServletContext appContext = jetspeedContext.getContext(portletApplicationName);

  再通过这个Context来获取Portlet;

  PortletInstance portletInstance = portletFactory.getPortletInstance(appContext, portletDefinition);

  它定义了如下方法来完成Invoker:

  protected void invoke(PortletRequest portletRequest, PortletResponse portletResponse, Integer methodID)

  该方法将在获取目地Portlet后在发送的servletRequest中设置如下信息:

  PORTLET;PORTLET_CONFIG;PORTLET_REQUEST;PORTLET_RESPONSE;METHOD_ID;PORTLET_NAME;PORTAL_CONTEXT

  然后使用Dispatcher来转发请求:

  dispatcher.include(servletRequest, servletResponse);

  6. URL相关:

  6.1. public interface PortletURL

  由RenderResponse创建(包含状态/模式/安全信息),使用PortletURL来代表Portlet自身;PortletURL可以包含一些不符合规范的应用数据,它们在portal中统一为正确的格式;它定义了:

  public String toString (); 使用该方法创建用于嵌入在HTML中的URL字符串;

  void setRequest(HttpServletRequest request); 使用该方法来注入用来生成URL的HttpServletRequest ;

  6.2. public interface PortalURL

  由Portal创建的在Portalneib使用的URL形式,定义了:

  NavigationalState getNavigationalState(); 来获取该URL的导航状态

  String createPortletURL(PortletWindow window, PortletMode mode, WindowState state, boolean secure);

  来创建对应该URL的 portletURL;

  6.3. public interface BasePortalURL

  定义了portal基本的URL信息,如下:

  boolean isSecure();

  void setSecure(boolean secure);

  String getServerName();

  void setServerName(String serverName);

  int getServerPort();

  void setServerPort(int serverPort);

  String getServerScheme();

  void setServerScheme(String serverScheme);

  6.4. public abstract class AbstractPortalURL implements PortalURL

  使用一组: protected static String navStateParameter;

  protected NavigationalState navState;

  来保存导航状态,使用navStateParameter来将状态保存在PortalContext中;

  6.5. public class PortletURLImpl implements PortalURL

  6.6. public interface PortletURLFactory

  public PortletURL getPortletURL(PortletWindow portletWindow,

  javax.servlet.http.HttpServletRequest servletRequest,

  javax.servlet.http.HttpServletResponse servletResponse)

  使用该方法从WIndow来创建一个PortletURL

  

  6.7. public interface PortletURLProvider

  6.8. public class PortletURLProviderImpl implements PortletURLProvider

  它包装了PortalURL和WIndow来完成创建PortletURL的任务;

  7. Pipeline相关:

  7.1. interface Pipeline

  管线是j2中所有阀的一个流程,Engine使用管线来完成所有在转发给portlet之前的RequestContext,定义了以下方法:

  void addValve(Valve valve); 增加一个新的阀

  void invoke(RequestContext context) 调用下一个阀处理RequestContext,直到有一个阀终至掉这个流程;

  7.2. class JetspeedPipeline implements Pipeline

  j2中管线的实现,它的invoke方法中使用Invocation来表示一次Valve调用,也使用Invocation来计数管线的调用位置:

  class Invocation implements ValveContext

  {

  private final Valve[] valves;

  private int at = 0;

  public Invocation(Valve[] valves)

  {

  this.valves = valves;

  }

  

  public void invokeNext(RequestContext request) throws PipelineException

  {

  if (at
  {

  Valve next = valves[at];

  at++;

  // 将自己传递给Valve完成Pipeline位置计数

  next.invoke(request, this);

  }

  }

  }

  8. Pipeline相关:

  8.1. interface Valve

  j2中的一个阀用来完成特定的功能,定义了:

  public void invoke(RequestContext request, ValveContext context) 完成处理RequestContext 的功能;

  j2中构建了具有以下功能的Valve来完成基本的任务:

  页面聚合;

  AJAX支持;

  性能;

  容器管理;

  页面修饰;

  布局管理;

  本地化;

  登陆;

  监测;

  安全性;

  8.2. class ActionValveImpl extends AbstractValve implements ActionValve

  它持有一个PortletContainer和PortletWindowAccessor来访问特定的Portlet;

  它用patchResponseCommitted字段标示回应是否已经完成了;

  在它的Invoke方法中,先解析出actionWindow及相应的Request,然后调用:

  container.processPortletAction(

  actionWindow,

  requestForWindow,

  response);

  来使用PortletContainer处理该请求;

  最后标明回应已经完成;

  8.3. class ContainerValve extends AbstractValve

  在它的Invoke方法中,从RequetstContext中解析出PortalURL,从PortalURL中解析出PortletWindow,然后设置该RequetstContext的PortletWindow属性,为调用AcitonValve做准备。

  PortalURL url = request.getPortalURL();

  PortletWindow actionWindow = url.getNavigationalState().getPortletWindowOfAction();

  // set the requested action window request.setActionWindow(actionWindow);

  8.4. class PortalURLValveImpl extends AbstractValve

  将根据RequestCOntext中encoder是否Desktop使用如下两种方式解析Navigation,并设置RequestCOntext的Navigation:

  request.setPortalURL(navComponent.createDesktopURL(request.getRequest(), request.getCharacterEncoding()));

  request.setPortalURL(navComponent.createURL(request.getRequest(), request.getCharacterEncoding()));

  9. NavigationalState相关:

  9.1. interface NavigationalState

  它是一个嵌入在URL中的字符串用来表示当前PortalURL的状态,可以从它获取ActionWindow和PortletMode/WindowState;

  9.2. interface NavigationalStateComponent

  提供一组用于从HttpServletRequest构造PortalURL的方法;


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zl198183/archive/2007/11/22/1897916.aspx

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值