我预先建立一个WEB项目Hiservlet3,作为主项目。下面再建立一个Web Fragment项目作为主项目的从属:
建立Servlet,Filter,Listener等,没有什么区别。
使用Web Fragment,较为麻烦的是页面文件的存放,其它到没有多大区别。但有以下两个方法解决:
1.
使用ANT编写 build.xml
文件,自动打成JAR包,假如有HTML文件的话,可以把HTML等页面文件部署到主项目的部署设定目录下
比如,我们设置转向到oneuser.html文件:
request.getRequestDispatcher("/oneuser.html").forward(request,
response);
就需要在发布时把oneuser.html文件放在主项目的部署根目录下,其它路径,以此类推。
建议编写ANT脚本搞定。
2.
把页面文件也打进JAR包,使用Freemarker硬编码实现页面渲染。这种方式有些硬,另一方面移植性好,一个JAR包直接包含了Servlet
和页面文件,但会带来修改页面文件的麻烦。
下面为演示如何使用Freemarker实现硬编码:
/**
* 这次,我们把模板文件放在JAR文件包中
*
* @author xiaomin
*
*/
@WebServlet("/some/")
public class ViewSomethingAction extends HttpServlet {
private static final long serialVersionUID = 65464645L;
private static final String DEFAULT_ENCODING = "UTF-8";
private static final String TEMPLATE_NAME = "some";
private String templateString;
private Configuration configuration;
public void init() throws ServletException {
configuration = new Configuration();
configuration.setDefaultEncoding(DEFAULT_ENCODING);
configuration.setEncoding(Locale.CHINA, DEFAULT_ENCODING);
// 初始化模板
templateString = getTemplateString("pages/something.html");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 构造要传递到模板的属性值
Map<String, Object> map = new HashMap<String, Object>();
map.put("userName", "小敏");
response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
printResponsesString(response, map);
}
/**
* 输出请求内容
* @param response
* @param map
* @throws IOException
*/
private void printResponsesString(HttpServletResponse response,
Map<String, Object> map) throws IOException {
Template template = new Template(TEMPLATE_NAME, new StringReader(
templateString), configuration, DEFAULT_ENCODING);
Writer out = response.getWriter();
try {
template.process(map, out);
} catch (TemplateException e) {
e.printStackTrace();
} finally {
out.flush();
template = null;
}
}
/**
* 获取JAR包内的HTML模板文件内容
* @param jarHtmlPath eg: pages/something.html
* @return
*/
private String getTemplateString(String jarHtmlPath) {
ClassLoader myCL = this.getClass().getClassLoader();
InputStream is = myCL.getResourceAsStream(jarHtmlPath);
if (is == null) {
return null;
} else {
try {
return templateString = IOUtils.toString(is, DEFAULT_ENCODING);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
}
运行效果如图:
注意在Eclipse下,可在Web Fragment项目上点击运行,即可正常运行主项目,见下图:
当然也可以在主项目上点击运行,依然可以运行。
关于多个Web Fragment之间顺序加载问题,可以参阅如下文章:
http://blogs.sun.com/swchan/entry/servlet_3_0_web_fragment
获得更多认知。
小结一下Servlet Web Fragment 可能在以下情况下很受用:
1. 作为用户拦截、日志记录,实现项目之间的解耦。
2. 提供RSS订阅模块
3. 后台管理
4. 项目检测等
5. 不需要页面的模块
......
最后附加上一个JAR文件,里面包含了源代码和要发布的文件:
本次项目演示,依赖JAR:
commons-io-1.4.jar
freemarker-2.3.13.jar
commons-lang-2.3.jar
本次项目JAR文件:
下载
下次写些什么呢,不如实现更加友好的URL,也来一把REST,让URL简单一些。
分享到:
相关推荐
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
这个"Servlet-API-3.0.zip"压缩包包含的是Servlet 3.0规范的API jar文件,该文件是开发和运行基于Java的Web应用程序所必需的库。以下是对Servlet API 3.0的详细讲解: 1. **Servlet 3.0引入的新特性**: - **注解...
在Servlet 3.0规范中,引入了许多新特性,旨在提高开发效率、简化编程模型以及增强可扩展性。下面将详细阐述Servlet 3.0的主要知识点。 1. **注解驱动的配置**:Servlet 3.0引入了注解(Annotation)来替代XML配置...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
在本文中,我们将深入探讨Servlet API 3.0的主要特性,以及如何利用它们来提升Web应用的性能和可维护性。 1. **依赖注入 (Dependency Injection, DI)** Servlet 3.0引入了对JSR 330(依赖注入)的支持,允许开发者...
Servlet-api-3.0.jar是Java Servlet API的第三版实现,它是开发Web应用程序的重要组成部分,特别是在基于Java的服务器端编程中。这个库包含了用于创建和管理HTTP服务端点的接口和类,允许开发者构建动态、交互式的...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Servlet 3.0是Java Servlet规范的一个重要版本,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。...在实际项目中,使用"javax.servlet-api-3.0.1.jar"可以享受到这些改进带来的益处。
Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。这份"Servlet3.0参考手册"无疑为开发者提供了全面的API参考和实用指南。 首先,Servlet3.0...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Servlet 3.0是Java EE 6规范的一部分,它带来了许多增强的功能,使得Web应用程序的开发更为便捷和灵活。在这个名为“servlet3.0-demo...通过学习这个示例,开发者可以更好地理解和利用Servlet 3.0在实际项目中的优势。
Servlet3.0是Java Servlet API的一个重要版本更新,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。以下将详细讲解Servlet3.0的关键特性。 1. **注解驱动的配置**: 在Servlet3.0之前,...
servlet-api-3.0-7.0.0pre1-sources.jar
- **注解驱动的配置**:在Servlet 3.0中,可以通过在类或方法上使用注解(如`@WebServlet`,`@WebFilter`,`@WebListener`)来代替XML配置文件,简化部署描述符(web.xml)。 - **异步处理**:Servlet 3.0引入了...
Servlet 3.0 API是Java Web开发中的一个重要组成部分,它为服务器端的动态网页...Apache Tomcat 7.0.41提供的这个API文档是一个很好的起点,可以帮助开发者理解Servlet 3.0规范的细节,并在实际项目中应用这些知识。
Servlet 3.0是Java服务器页面(JSP)和Servlet技术的一个重要版本,它在2009年由Java Community Process(JCP)发布,作为Java EE 6的一部分。...在实际项目中,结合这些文档和实践,将有助于提高开发效率和代码质量。
在Servlet3.0中,我们可以使用注解(@WebServlet、@WebFilter、@WebListener)来替代web.xml中的XML配置,使得部署更简洁。例如,`@WebServlet("/example")`可以直接在Servlet类上声明URL映射。 2. **异步处理**:...
Servlet 3.0 版本是 Java EE 6 的一部分,它在原有基础上增加了一些重要的新特性,旨在进一步简化 Web 应用的开发和部署过程。本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性...
而在Servlet3.0中,我们可以通过`@WebFilter`注解来直接定义过滤器,指定其过滤的URL模式、DispatcherType等。这样,过滤器的配置就更加灵活和直观。 下面是一个使用注解声明的过滤器示例: ```java @WebFilter...