java - 在jsp中有一个java类并序列化它

标签 java jsp

我需要在 JSP 中定义一个类 -> 实例化它并通过序列化将其写入文件。 我能够进行实例化部分,但序列化部分失败。 我不确定它是否允许序列化在 jsp 内创建的类,但想询问我是否需要做任何额外的事情 非常感谢任何帮助。 谢谢。

JSP 文件:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<%@page import="java.util.Date"%>
<%@page import="java.util.List"%>
<%@page import="java.util.GregorianCalendar"%>
<%@page import="java.util.Calendar"%>
<%@page import="java.beans.XMLEncoder"%>
<%@page import="java.beans.XMLDecoder"%>
<%@page import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Export File</title>
  </head>
  <body>
        <%!
        public class ClassA implements java.io.Serializable {
            private int i=10;

            public ClassA(){            }           
        }
        %>
        <%!
        public void WriteFolder(String applicationPath) throws FileNotFoundException,IOException{
                ClassA folderToCopy=new ClassA();               
                String filename = applicationPath+"import\\test.txt";
                FileOutputStream fos = new FileOutputStream(filename);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(folderToCopy);
                oos.close();
            }           
        %>
      <%
        String applicationPath=application.getRealPath("/");
        WriteFolder(applicationPath);
      %>

  </body>
</html>

错误:

> > Jan 27, 2015 1:39:46 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE:
> Servlet.service() for servlet [jsp] in context with path [] threw
> exception [An exception occurred processing JSP page
> /html/migrate/ImportTest.jsp at line 30 27:               String filename =
> applicationPath+"import\\test.txt"; 28:               FileOutputStream fos = new
> FileOutputStream(filename); 29:               ObjectOutputStream oos = new
> ObjectOutputStream(fos); 30:              oos.writeObject(folderToCopy); 31:
>               oos.close(); 32:            }            33:        %> Stacktrace:] with root cause java.io.NotSerializableException: org.apache.el.ExpressionFactoryImpl
>   at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
>   at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
>   at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
>   at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
>   at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
>   at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
>   at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
>   at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
>   at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
>   at
> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
>   at
> org.apache.jsp.html.migrate.ImportTest_jsp.WriteFolder(ImportTest_jsp.java:38)
>   at
> org.apache.jsp.html.migrate.ImportTest_jsp._jspService(ImportTest_jsp.java:109)
>   at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
>   at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)     at
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
>   at
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
>   at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
>   at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>   at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>   at
> com.dotcms.repackage.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:404)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>   at com.dotmarketing.filters.CMSFilter.doFilter(CMSFilter.java:113)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>   at
> com.dotmarketing.filters.AutoLoginFilter.doFilter(AutoLoginFilter.java:61)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>   at
> com.dotmarketing.cms.urlmap.filters.URLMapFilter.doFilter(URLMapFilter.java:84)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>   at
> com.dotmarketing.filters.TimeMachineFilter.doFilter(TimeMachineFilter.java:162)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>   at
> com.dotmarketing.filters.CharsetEncodingFilter.doFilter(CharsetEncodingFilter.java:146)
>   at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>   at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>   at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
>   at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
>   at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
>   at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
>   at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>   at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
>   at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>   at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
>   at
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
>   at
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
>   at
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
>   at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>   at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>   at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>   at java.lang.Thread.run(Thread.java:745)

最佳答案

作为一般规则,除非内部类是静态,否则不能序列化内部类。这是因为非静态内部类需要外部类存在(它们有一个隐藏字段,其中包含对外部类的引用)。这意味着要读取内部类,Java 反序列化器首先需要外部类的实例。

关于java - 在jsp中有一个java类并序列化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28165903/

相关文章:

java - Jruby on Rails java 对象序列化

java.net.MalformedURLException : unknown protocol: location

java - 迁移到 Tomcat 7 后 JSTL 不工作

css - 无法在 JSP 页面中加载外部 CSS

java - java 的 session 安全性足够吗?

java - 带有提交按钮的 html 表,用于使用 SQL 数据库中的数据更新每个单独的表行

java - sendRedirect() 未按预期工作

java if语句文本提示不起作用

java - quartz - ClassCastException

java - java中的循环处理