java response 输出到jsp,如何将servlet输出包含到jsp文件中

In my web application I have a main page that contain some information. This page is created by servlet and corresponding jsp file. Almost all other pages in my web application must contain the same information as main page plus some addition information. I don't want dublicate code, so I want to use output of main servlet in other jsp files. Below is a simple example of what I try to accomplish.

This is web.xml file:

servlet1

app.Servlet1

servlet1

/servlet1

servlet2

app.Servlet2

servlet2

/servlet2

This is java files:

servlet1.java

package app;

import java.io.IOException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class Servlet1 extends HttpServlet {

@Override

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

request.setAttribute("servletAttribute", 1);

RequestDispatcher view = request.getRequestDispatcher("/servlet1.jsp");

view.forward(request, response);

}

}

servlet2.java

package app;

import java.io.IOException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class Servlet2 extends HttpServlet {

@Override

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

request.setAttribute("servletAttribute", 2);

RequestDispatcher view = request.getRequestDispatcher("/servlet2.jsp");

view.forward(request, response);

}

}

This is jsp files:

servlet1.jsp

servlet1

Integer servletAttribute = (Integer)request.getAttribute("servletAttribute");

out.print("
servletAttribute:" + servletAttribute);

%>

servlet2.jsp

servlet2

Integer servletAttribute = (Integer)request.getAttribute("servletAttribute");

out.print("
servletAttribute:" + servletAttribute);

%>

So servlet2.jsp must display output of servlet1. It display it, but it doesn/t display addition information from servlet2. And I get this error in Log file:

org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [servlet2] in context with path [/WebApplication3] threw exception [java.lang.IllegalStateException: Exception occurred when flushing data] with root cause

java.io.IOException: Stream closed

As I understant this error appears because when servlet2.jsp call "/servlet1" servlet1 sent response to client and servlet2.jsp doesn't have session anymore.

So my question is - How can I fix my code to accomplish what I want? Is it possible to include output of some servlet to some jsp file? If it's possible, is it a good or bad practice?

解决方案

In servlet2.jsp:

In servlet2.jsp, you have used jsp:include.

It is including the response of the servlet1 response.

But the servlet1, it is going to forward the response to another jsp. So that exception occurs.

To avoid this, in Servlet1 class should use view.include(request,response); instead of view.forward(request, response);.

package app;

import java.io.IOException;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class Servlet1 extends HttpServlet {

@Override

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

request.setAttribute("servletAttribute", 1);

RequestDispatcher view = request.getRequestDispatcher("/servlet1.jsp");

view.include(request, response);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值