session 为什么错误

lilinew 2009-09-22 11:12:04
在一个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>
...全文
653 22 打赏 收藏 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
createWang 2009-09-23
  • 打赏
  • 举报
回复
在servlet里面request.getSession

在jsp直接session
三界五行外 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 liyihongcug 的回复:]
在jsp文件究竟该如何才能得到action 的java代码的  session值

action代码 里 request.getSession().setAttribute("personbean",pb);

jsp  (目前是失败的)
里  out.println(request.getSession().getAttribute("personbean"));

我直接用方法编译不能过 out.println(request.getSession().getAttribute("personbean")).getUserName();


很困惑???
[/Quote]
out.println(request.getSession().getAttribute("personbean")).getUserName();
把这句话改成下面这样
out.println((addressbook.model.PersonBean)(request.getSession().getAttribute("personbean")).getUserName());

session.getAttribute方法返回的Object对象,需要强制转换后才能使用。
String类的toString方法返回的就是对象代表的字符串,所以可以直接通过out.println打印出来。普通类是不可以的
lxxzhy 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liyihongcug 的回复:]
out.println(session.getAttribute("personbean"));
取到的值为  null---------质疑原因 如何解决?


<logic:present name="personbean" scope="request">
<h2>
<bean:write name="personbean" property="userName"/>!! <p>
</h2>
</logic:present>  得到了正确的值

[/Quote]
scope为request能得到正确的值,在session里面是null很正常.
lilinew 2009-09-22
  • 打赏
  • 举报
回复
out.println(session.getAttribute("personbean"));
取到的值为 null---------质疑原因 如何解决?


<logic:present name="personbean" scope="request">
<h2>
<bean:write name="personbean" property="userName"/>!! <p>
</h2>
</logic:present> 得到了正确的值
lilinew 2009-09-22
  • 打赏
  • 举报
回复
out.println(request.getSession("personbean"))
不可以 (质疑为社么?)

out.println(session.getAttribute("personbean"));成功
长公子冰 2009-09-22
  • 打赏
  • 举报
回复
楼上说的对呀! 楼主你不知道session在JSP里是隐藏属性么?直接用哦!汗。。。
三界五行外 2009-09-22
  • 打赏
  • 举报
回复
jsp页面中可以直接使用session的,
即直接使用session.getAttribute()都没问题。

你用了下面这个与jsp隐式对象session发生重复定义错误了
HttpSession session = pageContext.getSession();
lilinew 2009-09-22
  • 打赏
  • 举报
回复
VERE: Servlet.service() for servlet jsp threw exception
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)
Seven_23 2009-09-22
  • 打赏
  • 举报
回复
信息不全,你应该把报什么错误写明白
秦π 2009-09-22
  • 打赏
  • 举报
回复
request.getsession
lilinew 2009-09-22
  • 打赏
  • 举报
回复
基本解决 传递的是string是ok的 如果是类不可以的

在jsp定义1个类
在类接受这个类, 在类。方法取值
lilinew 2009-09-22
  • 打赏
  • 举报
回复
在jsp文件究竟该如何才能得到action 的java代码的 session值

action代码 里 request.getSession().setAttribute("personbean",pb);

jsp (目前是失败的)
里 out.println(request.getSession().getAttribute("personbean"));

我直接用方法编译不能过 out.println(request.getSession().getAttribute("personbean")).getUserName();


很困惑???
三界五行外 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liyihongcug 的回复:]
action代码 里 request.getSession().setAttribute("personbean",pb);
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"));

为什么会得到不合适的值

[/Quote]

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页面回显示空或报错(具体我也忘了)。
plplum 2009-09-22
  • 打赏
  • 举报
回复

改为: out.println(request.getSession().getAttribute("personbean"))就可以了
其实直接用第二句就可以啊


[Quote=引用 6 楼 liyihongcug 的回复:]
out.println(request.getSession("personbean"))
不可以  (质疑为社么?)

out.println(session.getAttribute("personbean"));成功
[/Quote]
三界五行外 2009-09-22
  • 打赏
  • 举报
回复
这是个set方法,不需要也不能放在 = 右边。
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是隐式对象,不需要声明就能使用,如果声明回出错。


lilinew 2009-09-22
  • 打赏
  • 举报
回复
action代码 里 request.getSession().setAttribute("personbean",pb);
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"));

为什么会得到不合适的值
lilinew 2009-09-22
  • 打赏
  • 举报
回复
提示session can't be resolved to a type
session session = request.getSession().setAttribute("k5456456y",pb);

session 编译通不过
三界五行外 2009-09-22
  • 打赏
  • 举报
回复
你在action中对session加对象了吗
request.getSession().setAttribute("personbean",对象名);
lilinew 2009-09-22
  • 打赏
  • 举报
回复
jsp下面用了
request.getSession().getAttribute("personbean");

发现还是为空???
三界五行外 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 liyihongcug 的回复:]
lxxzhy

请问该用什么语句解决这个问题
out.println(request.getSession("personbean")) 是失败拉拉!!
[/Quote]

request.getSession().getAttribute("personbean");

request对象没有getSession(String)方法
加载更多回复(2)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧