在一个Input。jsp里定义
HttpSession session = pageContext.getSession();
out.println(session.getAttribute(Constants.PERSON_KEY));
为什么会错误? (这里 java的form里定义session。setattribute(。。))<%@ include file="taglibs.jsp" %>
<%@ page import javax.servlet.http.HttpServletResponse %>
<%@ page import javax.servlet.http.HttpSession %>
<%@ page import addressbook.Constants %>
<html:errors/>
<logic:present name="personbean" scope="request">
<h2>
<bean:write name="personbean" property="userName"/>!!<p>
</h2>
</logic:present>
<html:form action="/hello2" focus="userName">
<% out.println("43545534454");
HttpSession session = pageContext.getSession();
out.println(session.getAttribute(Constants.PERSON_KEY));
//Constants.PERSON_KEY,
%><html:text property="userName" size="16" maxlength="16" ></html:text>"/><br>
<html:submit property="submit" value="Submit" /></html:form>
HttpSession session = pageContext.getSession();
out.println(session.getAttribute(Constants.PERSON_KEY));
为什么会错误? (这里 java的form里定义session。setattribute(。。))<%@ include file="taglibs.jsp" %>
<%@ page import javax.servlet.http.HttpServletResponse %>
<%@ page import javax.servlet.http.HttpSession %>
<%@ page import addressbook.Constants %>
<html:errors/>
<logic:present name="personbean" scope="request">
<h2>
<bean:write name="personbean" property="userName"/>!!<p>
</h2>
</logic:present>
<html:form action="/hello2" focus="userName">
<% out.println("43545534454");
HttpSession session = pageContext.getSession();
out.println(session.getAttribute(Constants.PERSON_KEY));
//Constants.PERSON_KEY,
%><html:text property="userName" size="16" maxlength="16" ></html:text>"/><br>
<html:submit property="submit" value="Submit" /></html:form>
org.apache.jasper.JasperException: /hello.jsp(13,66) attribute for %>" is not properly terminated
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:132)
at org.apache.jasper.compiler.Parser.parseAttributeValue(Parser.java:247)
at org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:212)
at org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:155)
at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1252)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1675)
at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1022)
at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1290)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1467)
at org.apache.jasper.compiler.Parser.parse(Parser.java:138)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:216)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:154)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
load hello form class
Sep 22, 2009 11:29:27 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /hello.jsp(2,16) equal symbol expected
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
at org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:200)
at org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:155)
at org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:167)
at org.apache.jasper.compiler.ParserController.getPageEncodingForJspSyntax(ParserController.java:451)
at org.apache.jasper.compiler.ParserController.determineSyntaxAndEncoding(ParserController.java:392)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:173)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:154)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
即直接使用session.getAttribute()都没问题。你用了下面这个与jsp隐式对象session发生重复定义错误了
HttpSession session = pageContext.getSession();
不可以 (质疑为社么?)out.println(session.getAttribute("personbean"));成功
取到的值为 null---------质疑原因 如何解决?
<logic:present name="personbean" scope="request">
<h2>
<bean:write name="personbean" property="userName"/>!! <p>
</h2>
</logic:present> 得到了正确的值
out.println(request.getSession("personbean")) 是失败拉拉!!
request.getSession().getAttribute("personbean");request对象没有getSession(String)方法
request.getSession().getAttribute("personbean");发现还是为空???
request.getSession().setAttribute("personbean",对象名);
session session = request.getSession().setAttribute("k5456456y",pb);session 编译通不过
jsp 里 out.println(request.getSession().getAttribute("personbean"));编译运行通过
现有新问题
这个网页上得到文字是 addressbook.model.PersonBean@951a0很奇怪 不是我输入的文字 我输入的是bb
<logic:present name="personbean" scope="request">
<h2>
<bean:write name="personbean" property="userName"/>!! <p>
</h2>
</logic:present> 得到了正确的值 很奇怪
jsp 里 out.println(request.getSession().getAttribute("personbean"));为什么会得到不合适的值
Action中:public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
request.getSession().setAttribute("k5456456y",pb);
}jsp页面中:
<%
out.println(session.getAttribute("k5456456y"));
out.println(request.getSession().getAttribute("k5456456y"));
//二者是一样的效果
%>
注意,action中没有隐式对象,request是execute方法接到的参数。
jsp页面中request和session是隐式对象,不需要声明就能使用,如果声明回出错。
改为: out.println(request.getSession().getAttribute("personbean"))就可以了
其实直接用第二句就可以啊
out.println(objcct)方法,如果object是基本类型或者String类,回打印原信息,如果是其他类,回打印object.toString()方法返回的字符串。
addressbook.model.PersonBean@951a0就是request.getSession().setAttribute("personbean",pb);这里的pb对象的toString()方法的而返回值,即pb.toString()=addressbook.model.PersonBean@951a0<bean:write name="personbean" property="userName"/>解析后等同于
(addressbook.model.PersonBean)(pageContext.getAttribute("personbean")).getUserName();
其中类型是addressbook.model.PersonBean自动找到的,如果pageContext.getAttribute("personbean")是null则依次寻找request.getAttribute("personbean")、session.getAttribute("personbean")、application.getAttribute("personbean"),找到后就停止寻找,如果找不到jsp页面回显示空或报错(具体我也忘了)。
(
jsp (目前是失败的)
里 out.println(request.getSession().getAttribute("personbean"));
)
我直接用方法编译不能过 out.println(request.getSession().getAttribute("personbean")).getUserName();
很困惑???
在类接受这个类, 在类。方法取值
把这句话改成下面这样
out.println((addressbook.model.PersonBean)(request.getSession().getAttribute("personbean")).getUserName());session.getAttribute方法返回的Object对象,需要强制转换后才能使用。
String类的toString方法返回的就是对象代表的字符串,所以可以直接通过out.println打印出来。普通类是不可以的