包括脚本
使用以下结构来包含脚本/apps/test.jsp
在 servlet 内部并向其传递一些值(绑定):
@Reference
private ServletResolver servletResolver;
public void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
Servlet servlet = servletResolver.resolveServlet(request.getResource(), "/apps/test.jsp");
request.setAttribute("sampleBinding", "bindingValue");
servlet.service(request, response);
}
脚本本身可能如下所示:
<%@page session="false" contentType="text/html; charset=utf-8"
%><%@include file="/libs/foundation/global.jsp"%>
Binding value: ${sampleBinding}
使用模型
您还可以考虑第二种方法 - 不要为每个组件创建 servlet,而是坚持使用 JSP 并在每个脚本的开头创建一个model目的。示例脚本:
<%@page session="false" contentType="text/html; charset=utf-8"
%><%@include file="/libs/foundation/global.jsp"%><%
pageContext.setAttribute("model", new MyModel(slingRequest, slingResponse));
%>
Value from model: ${model.value}
以及样本模型:
public class MyModel {
private final SlingHttpServletRequest request;
private final SlingHttpServletResponse response;
public MyModel(SlingHttpServletRequest request, SlingHttpServletResponse response) {
this.request = request;
this.response = response;
}
public String getValue() {
// you may use request & response objects here
return "sample value";
}
}
如果您喜欢这种方法,您可以使用一个框架来更轻松地编写此类模型。两个有趣的解决方案是:
- 吊带型号 http://sling.apache.org/documentation/bundles/models.html
- Slice http://www.cognifide.com/blogs/cq/make-your-cq-life-easier-with-slice/