`
iluoxuan
  • 浏览: 580359 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩展spring的JstlView

 
阅读更多

:Spring中视图有多种,现在因为WAP网站的原因,需要自定义JstlView可以使得渲染JSP时时候能给html中每个连接加上参数:

1:使用HttpServletResponseWrapper类包装HttpServletReponse

/**
 * 重写包装类
 * @author lijunqing
 */
public class WapResponseWrapper extends HttpServletResponseWrapper {

    private ByteArrayOutputStream buffer;

    private PrintWriter writer;

    private ServletOutputStream out;

    public WapResponseWrapper(HttpServletResponse response) throws UnsupportedEncodingException {
        super(response);
        buffer=new ByteArrayOutputStream();
        out=new WapOutPutStream(buffer);
        writer=new PrintWriter(new OutputStreamWriter(buffer, "UTF-8"));
    }

    // 重载父类获取outputstream的方法
    public ServletOutputStream getOutputStream() throws IOException {
        return out;
    }

    // 重载父类获取writer的方法
    public PrintWriter getWriter() throws UnsupportedEncodingException {
        return writer;
    }

    public void flushBuffer() throws IOException {
        if(out != null) {
            out.flush();
        }
        if(writer != null) {
            writer.flush();
        }
    }

    public String getContent() throws IOException {
        flushBuffer(); //强行flush 不然有可能为空
        return buffer.toString("UTF-8");
    }

    /**
     * 自定义WapOutPutStream 把Reponse的流写到WapOutPutStream中
     * @author lijunqing
     */
    private class WapOutPutStream extends ServletOutputStream {

        ByteArrayOutputStream byteArrayOut;

        public WapOutPutStream(ByteArrayOutputStream out) {
            byteArrayOut=out;
        }
        
        @Override
        public void write(int b) throws IOException {
            byteArrayOut.write(b);
        }
    }

}

 2:定义WapView继承JstlView

 

/**
 * wap视图显示
 * @author lijunqing
 */
public class WapView extends JstlView {
   
    @Override
    public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        WapResponseWrapper wrapper=new WapResponseWrapper(response);
        super.render(model, request, wrapper); // 使得我们可以获得页面内容
        String result=wrapper.getContent();
         // 用正则给每个url加公共参数等 处理逻辑
        PrintWriter w=response.getWriter(); // 这个地方不能用Wrapper的,不然输出页面没内容;
        w.write(result);
        w.flush();
    }
}

 

分享到:
评论

相关推荐

    Spring_MVC_实战教程

    Spring MVC 是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller(MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本实战教程将深入讲解Spring MVC的关键组件和工作流程,帮助开发者更...

    spring mvc深入总结

    3. 强大的扩展性和灵活性,得益于 Spring 框架的整体设计。 然而,Struts2 也有其独特的优点,例如丰富的插件、强大的拦截器机制等,适合不同的项目需求。 总的来说,Spring MVC 的设计简洁明了,易于理解和使用,...

    springMVC入门资料全 含Spring3 0

    而viewResolver则用于根据请求确定应加载的视图资源,这里默认使用JstlView,但可以通过设置prefix和suffix属性来自定义视图的前缀和后缀,增加视图的灵活性。 综上所述,“springMVC入门资料全含Spring3 0”不仅...

    spring_MVC框架

    p:viewClass="org.springframework.web.servlet.view.JstlView"/&gt; ``` - **InternalResourceViewResolver**: 配置视图解析器,设置视图前缀和后缀。 - **context:component-scan**: 扫描指定包下的组件,...

    spring3mvc入门资料

    自定义实现该接口可以扩展Spring MVC的功能。 6. **ViewResolver**:视图解析器接口,如`UrlBasedViewResolver`和`InternalResourceViewResolver`,它们负责将逻辑视图名转换为实际视图。`...

    Spring配置Freemarker视图解析器,配置多个视图解析器

    &lt;property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/&gt; &lt;property name="order" value="1"/&gt; &lt;!-- 设置较低的优先级 --&gt; &lt;!-- 设置Freemarker视图解析器的优先级更高 --&gt; ...

    Spring 2.5 mvc例子

    模型-视图-控制器模式是软件设计中的一个经典架构模式,它将应用程序逻辑分离开来,提高了代码的可维护性和可扩展性。在 Spring MVC 中: - **模型(Model)**:通常包含业务逻辑和数据对象,处理应用程序的数据。 ...

    spring mvc

    同时,Spring MVC更容易编写高性能的应用,并且其灵活性极高,得益于Spring框架的整体扩展性。 Spring MVC的主要组件包括: 1. **DispatcherServlet**:作为前端控制器,它是整个Spring MVC流程的入口点。...

    spring3mvc真正入门资料

    3. **灵活性**:Spring3 MVC 依托于Spring框架的卓越扩展性,提供了无与伦比的灵活性,开发者几乎不会感到框架带来的约束。 ### **核心组件及功能** - **DispatcherServlet**:作为前端控制器,它是Spring MVC的...

    Spring_MVC 3.0整理汇总

    Spring_MVC的核心在于其模块化设计,易于扩展,并且能够与其他Spring组件无缝集成。 二、核心类与接口 1. DispatcherServlet:作为Spring_MVC的前端控制器,它负责接收请求,根据HandlerMapping进行调度。 2. ...

    spring mvc 使用

    2. **模块化**:Spring MVC的组件设计使得开发者可以根据需要选择使用哪些部分,易于扩展和维护。 3. **注解驱动**:Spring 3.0引入了大量注解,如`@RequestMapping`、`@Controller`、`@Service`、`@Autowired`等,...

    Spring3-MVC与Struts2.x比较.pdf

    Spring MVC 以其灵活性、高效性和可扩展性在近年来逐渐受到开发者青睐,尤其是在Spring 3.0版本之后。下面我们将详细探讨Spring MVC的核心组件、工作流程以及与Struts2.x的比较。 1. **Spring MVC 核心组件** - *...

    spring3.0 mvc使用入门,含具体例子

    Spring 3.0 MVC 是一个强大的、基于 Java 的框架,用于构建可维护和可扩展的 web 应用程序。在这个版本中,Spring 引入了 REST(Representational State Transfer)风格的编程,使得开发者可以更方便地使用注解来...

    Spring3-MVC与Struts2.x比较.docx

    - **灵活性**:Spring MVC因其高度的灵活性和可扩展性而受到开发者喜爱,而Struts2的配置相对繁琐。 选择哪个框架取决于项目需求和团队熟悉度。Spring MVC通常被认为更现代,更适合大型企业级应用,而Struts2在中小...

    spring mvc架包.rar

    总结,Spring MVC是Java EE开发Web应用的强大工具,其MVC设计模式、强大的数据绑定和验证、灵活的拦截器机制以及丰富的扩展性,使得开发者能够高效地构建健壮且易于维护的Web应用。在实际开发中,可以结合Spring ...

    spring-mvc-reading:Spring MVC源代码阅读-mvc source code

    通过分析源码,我们可以学习到如何扩展Spring MVC,例如自定义拦截器、异常处理器、视图解析器等,这对于优化性能和实现特定功能非常有用。 此外,`spring-mvc-reading-main`可能是项目的主要源代码目录,其中可能...

    《一头扎进SpringMvc》第四讲 源码

    在实际开发中,了解这些核心概念和组件的工作方式对于优化性能、处理异常、调试和扩展Spring MVC应用至关重要。例如,自定义HandlerMapping或HandlerAdapter可以实现特定的路由规则,而熟悉ModelAndView的使用则可以...

    第四节 Web MVC 核心1

    &lt;property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/&gt; ``` 这里配置了组件扫描,处理器映射器和适配器,以及视图解析器来决定如何查找和渲染视图。 【部署 ...

Global site tag (gtag.js) - Google Analytics