You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2003/02/08 01:59:32 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime PageContextImpl.java
luehe 2003/02/07 16:59:32
Modified: jasper2/src/share/org/apache/jasper/runtime
PageContextImpl.java
Log:
Cleanup:
- Removed unnecessary class casts
- Added localizable error code for attempt to access session scope in page that
does not participate in any session
Revision Changes Path
1.41 +170 -192 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/PageContextImpl.java
Index: PageContextImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/PageContextImpl.java,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- PageContextImpl.java 4 Feb 2003 23:38:46 -0000 1.40
+++ PageContextImpl.java 8 Feb 2003 00:59:31 -0000 1.41
@@ -111,60 +111,92 @@
* @author Hans Bergsten
* @author Pierre Delisle
* @author Mark Roth
+ * @author Jan Luehe
*/
public class PageContextImpl extends PageContext implements VariableResolver {
// Logger
private static Log log = LogFactory.getLog(PageContextImpl.class);
- /**
- * The expression evaluator, for evaluating EL expressions.
- */
- private static ExpressionEvaluatorImpl expressionEvaluator
+ // The expression evaluator, for evaluating EL expressions.
+ private static ExpressionEvaluatorImpl elExprEval
= new ExpressionEvaluatorImpl();
- /**
- * The variable resolver, for evaluating EL expressions.
- */
- private VariableResolverImpl variableResolver
- = new VariableResolverImpl(this);
+ // The variable resolver, for evaluating EL expressions.
+ private VariableResolverImpl variableResolver;
- PageContextImpl(JspFactory factory) {
- this.factory = factory;
- }
+ private BodyContentImpl[] outs;
+ private int depth;
- public void initialize(Servlet servlet, ServletRequest request,
- ServletResponse response, String errorPageURL,
- boolean needsSession, int bufferSize,
- boolean autoFlush)
- throws IOException, IllegalStateException, IllegalArgumentException
- {
- _initialize(servlet, request, response, errorPageURL, needsSession, bufferSize, autoFlush);
- }
+ // per-servlet state
+ private Servlet servlet;
+ private ServletConfig config;
+ private ServletContext context;
+ private JspFactory factory;
+ private boolean needsSession;
+ private String errorPageURL;
+ private boolean autoFlush;
+ private int bufferSize;
+
+ // page-scope attributes
+ private transient Hashtable attributes;
+
+ // per-request state
+ private transient ServletRequest request;
+ private transient ServletResponse response;
+ private transient Object page;
+ private transient HttpSession session;
+ private boolean isIncluded;
- private void _initialize(Servlet servlet, ServletRequest request,
- ServletResponse response, String errorPageURL,
- boolean needsSession, int bufferSize,
- boolean autoFlush)
- throws IOException, IllegalStateException, IllegalArgumentException
- {
+ // initial output stream
+ private transient JspWriter out;
+ private transient JspWriterImpl baseOut;
- // initialize state
+ /*
+ * Constructor.
+ */
+ PageContextImpl(JspFactory factory) {
+ this.factory = factory;
+ this.variableResolver = new VariableResolverImpl(this);
+ this.outs = new BodyContentImpl[0];
+ this.attributes = new Hashtable(16);
+ this.depth = -1;
+ }
+
+ public void initialize(Servlet servlet,
+ ServletRequest request,
+ ServletResponse response,
+ String errorPageURL,
+ boolean needsSession,
+ int bufferSize,
+ boolean autoFlush) throws IOException {
+
+ _initialize(servlet, request, response, errorPageURL, needsSession,
+ bufferSize, autoFlush);
+ }
+
+ private void _initialize(Servlet servlet,
+ ServletRequest request,
+ ServletResponse response,
+ String errorPageURL,
+ boolean needsSession,
+ int bufferSize,
+ boolean autoFlush) throws IOException {
- this.servlet = servlet;
- this.config = servlet.getServletConfig();
- this.context = config.getServletContext();
+ // initialize state
+ this.servlet = servlet;
+ this.config = servlet.getServletConfig();
+ this.context = config.getServletContext();
this.needsSession = needsSession;
this.errorPageURL = errorPageURL;
- this.bufferSize = bufferSize;
- this.autoFlush = autoFlush;
- this.request = request;
- this.response = response;
+ this.bufferSize = bufferSize;
+ this.autoFlush = autoFlush;
+ this.request = request;
+ this.response = response;
- // setup session (if required)
+ // Setup session (if required)
if (request instanceof HttpServletRequest && needsSession)
this.session = ((HttpServletRequest)request).getSession();
-
if (needsSession && session == null)
throw new IllegalStateException
("Page needs a session and none is available");
@@ -182,18 +214,17 @@
throw new IllegalStateException("failed initialize JspWriter");
// register names/values as per spec
-
- setAttribute(OUT, this.out);
- setAttribute(REQUEST, request);
- setAttribute(RESPONSE, response);
+ setAttribute(OUT, this.out);
+ setAttribute(REQUEST, request);
+ setAttribute(RESPONSE, response);
if (session != null)
setAttribute(SESSION, session);
- setAttribute(PAGE, servlet);
- setAttribute(CONFIG, config);
+ setAttribute(PAGE, servlet);
+ setAttribute(CONFIG, config);
setAttribute(PAGECONTEXT, this);
- setAttribute(APPLICATION, context);
+ setAttribute(APPLICATION, context);
isIncluded = request.getAttribute(
"javax.servlet.include.servlet_path") != null;
@@ -217,32 +248,31 @@
log.warn("Internal error flushing the buffer in release()");
}
- servlet = null;
- config = null;
- context = null;
+ servlet = null;
+ config = null;
+ context = null;
needsSession = false;
errorPageURL = null;
- bufferSize = JspWriter.DEFAULT_BUFFER;
- autoFlush = true;
- request = null;
- response = null;
+ bufferSize = JspWriter.DEFAULT_BUFFER;
+ autoFlush = true;
+ request = null;
+ response = null;
depth = -1;
baseOut.recycle();
- session = null;
+ session = null;
attributes.clear();
}
public Object getAttribute(String name) {
-
- if (name == null) throw new NullPointerException("Null name");
+ if (name == null)
+ throw new NullPointerException("Null name");
return attributes.get(name);
}
-
public Object getAttribute(String name, int scope) {
-
- if (name == null) throw new NullPointerException("Null name");
+ if (name == null)
+ throw new NullPointerException("Null name");
switch (scope) {
case PAGE_SCOPE:
@@ -252,11 +282,11 @@
return request.getAttribute(name);
case SESSION_SCOPE:
- if (session == null)
+ if (session == null) {
throw new IllegalArgumentException(
- "can't access SESSION_SCOPE without an HttpSession");
- else
- return session.getAttribute(name);
+ Localizer.getMessage("jsp.error.page.noSession"));
+ }
+ return session.getAttribute(name);
case APPLICATION_SCOPE:
return context.getAttribute(name);
@@ -266,9 +296,7 @@
}
}
-
public void setAttribute(String name, Object attribute) {
-
if (name == null) {
throw new NullPointerException("Null name");
}
@@ -282,7 +310,6 @@
public void setAttribute(String name, Object o, int scope) {
-
if (name == null) {
throw new NullPointerException("Null name");
}
@@ -298,11 +325,11 @@
break;
case SESSION_SCOPE:
- if (session == null)
+ if (session == null) {
throw new IllegalArgumentException(
- "can't access SESSION_SCOPE without an HttpSession");
- else
- session.setAttribute(name, o);
+ Localizer.getMessage("jsp.error.page.noSession"));
+ }
+ session.setAttribute(name, o);
break;
case APPLICATION_SCOPE:
@@ -311,8 +338,7 @@
default:
throw new IllegalArgumentException("Invalid scope");
- } // switch
-
+ }
} else {
removeAttribute(name, scope);
}
@@ -320,36 +346,34 @@
public void removeAttribute(String name, int scope) {
switch (scope) {
- case PAGE_SCOPE:
- attributes.remove(name);
- break;
-
- case REQUEST_SCOPE:
- request.removeAttribute(name);
- break;
-
- case SESSION_SCOPE:
- if (session == null)
- throw new IllegalArgumentException(
- "can't access SESSION_SCOPE without an HttpSession");
- else
- session.removeAttribute(name);
- // was:
- // session.removeValue(name);
- // REVISIT Verify this is correct - akv
- break;
-
- case APPLICATION_SCOPE:
- context.removeAttribute(name);
- break;
-
- default:
- throw new IllegalArgumentException("Invalid scope");
+ case PAGE_SCOPE:
+ attributes.remove(name);
+ break;
+
+ case REQUEST_SCOPE:
+ request.removeAttribute(name);
+ break;
+
+ case SESSION_SCOPE:
+ if (session == null) {
+ throw new IllegalArgumentException(
+ Localizer.getMessage("jsp.error.page.noSession"));
+ }
+ session.removeAttribute(name);
+ break;
+
+ case APPLICATION_SCOPE:
+ context.removeAttribute(name);
+ break;
+
+ default:
+ throw new IllegalArgumentException("Invalid scope");
}
}
public int getAttributesScope(String name) {
- if (attributes.get(name) != null) return PAGE_SCOPE;
+ if (attributes.get(name) != null)
+ return PAGE_SCOPE;
if (request.getAttribute(name) != null)
return REQUEST_SCOPE;
@@ -359,7 +383,8 @@
return SESSION_SCOPE;
}
- if (context.getAttribute(name) != null) return APPLICATION_SCOPE;
+ if (context.getAttribute(name) != null)
+ return APPLICATION_SCOPE;
return 0;
}
@@ -385,24 +410,24 @@
public Enumeration getAttributeNamesInScope(int scope) {
switch (scope) {
- case PAGE_SCOPE:
- return attributes.keys();
-
- case REQUEST_SCOPE:
- return request.getAttributeNames();
+ case PAGE_SCOPE:
+ return attributes.keys();
+
+ case REQUEST_SCOPE:
+ return request.getAttributeNames();
+
+ case SESSION_SCOPE:
+ if (session == null) {
+ throw new IllegalArgumentException(
+ Localizer.getMessage("jsp.error.page.noSession"));
+ }
+ return session.getAttributeNames();
- case SESSION_SCOPE:
- if (session != null) {
- return session.getAttributeNames();
- } else
- throw new IllegalArgumentException(
- "can't access SESSION_SCOPE without an HttpSession");
+ case APPLICATION_SCOPE:
+ return context.getAttributeNames();
- case APPLICATION_SCOPE:
- return context.getAttributeNames();
-
- default:
- throw new IllegalArgumentException("Invalid scope");
+ default:
+ throw new IllegalArgumentException("Invalid scope");
}
}
@@ -440,7 +465,8 @@
String path = relativeUrlPath;
if (!path.startsWith("/")) {
- String uri = (String) request.getAttribute("javax.servlet.include.servlet_path");
+ String uri = (String)
+ request.getAttribute("javax.servlet.include.servlet_path");
if (uri == null)
uri = ((HttpServletRequest) request).getServletPath();
String baseURI = uri.substring(0, uri.lastIndexOf('/'));
@@ -451,22 +477,14 @@
}
public void include(String relativeUrlPath)
- throws ServletException, IOException {
-
- JspRuntimeLibrary.include((HttpServletRequest) request,
- (HttpServletResponse) response,
- relativeUrlPath,
- out,
+ throws ServletException, IOException {
+ JspRuntimeLibrary.include(request, response, relativeUrlPath, out,
true);
}
public void include(String relativeUrlPath, boolean flush)
- throws ServletException, IOException {
-
- JspRuntimeLibrary.include((HttpServletRequest) request,
- (HttpServletResponse) response,
- relativeUrlPath,
- out,
+ throws ServletException, IOException {
+ JspRuntimeLibrary.include(request, response, relativeUrlPath, out,
flush);
}
@@ -504,9 +522,6 @@
}
}
- private BodyContentImpl[] outs = new BodyContentImpl[0];
- private int depth = -1;
-
public BodyContent pushBody() {
return (BodyContent) pushBody(null);
}
@@ -553,7 +568,7 @@
* ExpressionEvaluator that can parse EL expressions.
*/
public ExpressionEvaluator getExpressionEvaluator() {
- return expressionEvaluator;
+ return elExprEval;
}
public void handlePageException(Exception ex)
@@ -567,18 +582,20 @@
public void handlePageException(Throwable t)
throws IOException, ServletException
{
- if (t == null) throw new NullPointerException("null Throwable");
+ if (t == null)
+ throw new NullPointerException("null Throwable");
if (errorPageURL != null && !errorPageURL.equals("")) {
- // Set request attributes.
- // Do not set the javax.servlet.error.exception attribute here
- // (instead, set in the generated servlet code for the error page)
- // in order to prevent the ErrorReportValve, which is invoked as
- // part of forwarding the request to the error page, from
- // throwing it if the response has not been committed (the response
- // will have been committed if the error page is a JSP page).
-
+ /*
+ * Set request attributes.
+ * Do not set the javax.servlet.error.exception attribute here
+ * (instead, set in the generated servlet code for the error page)
+ * in order to prevent the ErrorReportValve, which is invoked as
+ * part of forwarding the request to the error page, from
+ * throwing it if the response has not been committed (the response
+ * will have been committed if the error page is a JSP page).
+ */
request.setAttribute("javax.servlet.jsp.jspException", t);
request.setAttribute("javax.servlet.error.status_code",
new Integer(HttpServletResponse.SC_INTERNAL_SERVER_ERROR));
@@ -594,7 +611,7 @@
// The error page could be inside an include.
- Object newException=request.getAttribute("javax.servlet.error.exception");
+ Object newException = request.getAttribute("javax.servlet.error.exception");
// t==null means the attribute was not set.
if( (newException!= null) && (newException==t) ) {
@@ -683,11 +700,11 @@
new PrivilegedExceptionAction(){
public Object run() throws Exception{
- return expressionEvaluator.evaluate(expression,
- expectedType,
- pageContext.getVariableResolver(),
- functionMap,
- defaultPrefix);
+ return elExprEval.evaluate(expression,
+ expectedType,
+ pageContext.getVariableResolver(),
+ functionMap,
+ defaultPrefix);
}
});
} catch( PrivilegedActionException ex ) {
@@ -695,11 +712,11 @@
throw new ELException( e );
}
} else {
- retValue = expressionEvaluator.evaluate(expression,
- expectedType,
- pageContext.getVariableResolver(),
- functionMap,
- defaultPrefix);
+ retValue = elExprEval.evaluate(expression,
+ expectedType,
+ pageContext.getVariableResolver(),
+ functionMap,
+ defaultPrefix);
}
if (escape) {
retValue = XmlEscape(retValue.toString());
@@ -709,7 +726,7 @@
}
private JspWriterImpl _createOut(int bufferSize, boolean autoFlush)
- throws IOException, IllegalArgumentException {
+ throws IOException {
try {
return new JspWriterImpl(response, bufferSize, autoFlush);
} catch( Throwable t ) {
@@ -717,43 +734,4 @@
return null;
}
}
-
- /*
- * fields
- */
-
- // per Servlet state
-
- private Servlet servlet;
- private ServletConfig config;
- private ServletContext context;
-
- private JspFactory factory;
-
- private boolean needsSession;
-
- private String errorPageURL;
-
- private boolean autoFlush;
- private int bufferSize;
-
- // page scope attributes
-
- private transient Hashtable attributes = new Hashtable(16);
-
- // per request state
-
- private transient ServletRequest request;
- private transient ServletResponse response;
- private transient Object page;
-
- private transient HttpSession session;
-
- private boolean isIncluded;
-
- // initial output stream
-
- private transient JspWriter out;
- private transient JspWriterImpl baseOut;
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org