How to pass JSP implicit objects like (request, response) in Java.
I want to access JSP Implicit Objects in Java code.
Please suggest how to achieve this?
My Java code is:
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";
}
}
Here when I am trying to set or get anything in request and response, I get NUllPointerException
.
You can pass objects to the bean using <jsp:setProperty
and EL expressions. You have to modify the bean for getter and setter methods.
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";
}
}
then use in the 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}"/>
IMO I don't think it is possible to pass implicit objects directly to java class so but one thing you can do is pass session and request object from servlet to a java class either in some method or in constructor of java class.
Also see this question
You would be able to use some servlet class.
for instance :
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);
}
}
you must add into the web.xml following:
<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>
"/Action" is your url.
I gave a simple example, I didn't take account the either GET or POST method there.
Also I would advise to use JSTL. Using some scriplets in the "view" is bad style of codding:)
However, it's better to use MVC pattern(Spring/Struts).