2012-08-16 61 views
1

如何在Java中传递JSP隐式对象(请求,响应)。 我想访问Java代码中的JSP隐式对象。 请建议如何做到这一点?如何在Java中访问JSP隐式对象(请求,响应)

我的Java代码是:

package test.here; 
import java.sql.*; 
import java.util.*; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import com.ibm.commerce.server.WcsApp; 
import com.ibm.commerce.server.JSPHelper; 

public class SomeBean { 
    String punchOutRes = null; 
    HttpServletResponse response; 
    HttpServletRequest request; 

    public String getPunchOutRes() {   
    response.setContentType("text/xml"); 
    return "testing";  
    } 
} 

这里的时候,我试图设置或请求和响应得到任何东西,我得到NUllPointerException

+1

使用为什么ü想进入到Java bean的这些对象,反正你已经可以访问隐含对象在Servlet中。您可以在java bean中编写业务逻辑并在servlet中访问该bean。 – 2012-08-16 09:35:55

+0

但我不想在Servlet中访问。取而代之的是一个普通的java类。 – user1602657 2012-08-16 09:37:15

+1

如果要访问JSP的隐式对象,可以通过servlet访问,并将其作为参数传递给普通的java方法。但是我不会建议这种方法,因为你正在将更大的物体传递给小的东西。 – Kalpak 2012-08-16 11:59:30

回答

0

国际海事组织我不认为有可能将隐式对象直接传递给java类,但有一件事你可以做的是将会话和请求对象从servlet传递给java类,无论是在某些方法或在java类的构造函数。

另见this question

+0

我在JAVA下面写的代码如下: – user1602657 2012-08-16 09:43:32

+0

@ user1602657:哪个代码? – 2012-08-16 09:45:17

0

您将能够使用一些servlet类。 例如:

public class ActionServlet extends HttpServlet 
{ 

public ActionServlet() 
{ 
    super(); 
} 

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException 
{ 
    request.setCharacterEncoding("UTF-8");  
    String action = request.getParameter("action");   

    //do smth. with "action" you are able to use your class "SomeBean" 

    response.setContentType("text/plain"); 
    response.setCharacterEncoding("UTF-8"); 
    response.sendRedirect(someUrl);     

} 
} 

必须添加到web.xml中如下:

<servlet> 
    <description></description> 
    <display-name>ActionServlet</display-name> 
    <servlet-name>ActionServlet</servlet-name> 
    <servlet-class>com.your_package.servlet.ActionServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ActionServlet</servlet-name> 
    <url-pattern>/Action</url-pattern> 
</servlet-mapping> 

“/行动” 是您的网址。

我举了一个简单的例子,我没有考虑GET或POST方法。 另外我会建议使用JSTL。在“视图”中使用一些脚本是不好的编码风格:)

但是,最好使用MVC模式(Spring/Struts)。

1

您可以使用<jsp:setProperty和EL表达式将对象传递给bean。你必须修改getter和setter方法的bean。

public class SomeBean { 
    String punchOutRes = null; 
    HttpServletResponse response; 
    HttpServletRequest request; 

    public HttpServletResponse getResponse() { 
    return response; 
    } 

    public void setResponse(HttpServletResponse response) { 
    this.response = response; 
    try { 
     response.getWriter().println("Some Output"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

    public HttpServletRequest getRequest() { 
    return request; 
    } 

    public void setRequest(HttpServletRequest request) { 
    this.request = request; 
    } 

    public String getPunchOutRes() { 
    response.setContentType("text/xml"); 
    return "testing"; 
    } 
} 

然后在JSP

<jsp:useBean id="someBean" class="beans.SomeBean" scope="request"/> 
<jsp:setProperty name="someBean" property="request" value="${pageContext.request}"/> 
<jsp:setProperty name="someBean" property="response" value="${pageContext.response}"/> 
相关问题