Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Struts2 Java类内部编写HTML_Java_Jsp_Struts2 - Fatal编程技术网

从Struts2 Java类内部编写HTML

从Struts2 Java类内部编写HTML,java,jsp,struts2,Java,Jsp,Struts2,我试图编写一个HTML代码,可以通过调用某个类的成员函数来打印,但我总是遇到以下错误 HTTP Status 500 - java.lang.NullPointerException -------------------------------------------------------------------------------- type Exception report message java.lang.NullPointerException descript

我试图编写一个HTML代码,可以通过调用某个类的成员函数来打印,但我总是遇到以下错误

    HTTP Status 500 - java.lang.NullPointerException

--------------------------------------------------------------------------------

type Exception report

message java.lang.NullPointerException

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: java.lang.NullPointerException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:96)


root cause 

java.lang.NullPointerException
    com.ly.bogha.oneworld.Pagemarkup.eBirth(Pagemarkup.java:59)
    org.apache.jsp.eHealth_jsp._jspService(eHealth_jsp.java:107)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:96)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs.
我的班级在这里

package com.ly.bogha.oneworld;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.opensymphony.xwork2.ActionSupport;

public class Pagemarkup extends ActionSupport implements ServletResponseAware, ServletRequestAware  {

    protected HttpServletResponse mServletResponse;  
    protected HttpServletRequest mServletRequest;  

    public Pagemarkup() {
    }

    public void setHeader() throws IOException {

    }

    public void setBody() {

    }
    public void setFooter() {

    }
    @Override
    public void setServletRequest(HttpServletRequest servletRequest) {
        this.mServletRequest = servletRequest; 

    }

    @Override
    public void setServletResponse(HttpServletResponse servletResponse) {
        this.mServletResponse = servletResponse;  

    }
    public void eBirth() throws IOException{
        mServletResponse.setContentType("text/html");
        PrintWriter out = mServletResponse.getWriter();
        out.print("<table><tr><td>ebirth</td></tr></table>");

    }   

}

我无法清楚地理解你的问题,也就是说,你是如何在struts2中使用动作类的

但我认为,当您在jsp中创建类的实例Pagemarkup时,以及当您调用函数ebith时,mServletResponse将为空,因为在调用操作后设置了servlet响应。您正在创建一个实例。并不是执行您必须在xml映射中定义的操作

您应该参考这一点,它可能会有帮助,并帮助您理解这一点:

在执行操作类execute或您的映射方法后返回响应。 或
如果您想这样做,您可以从eBirth方法返回html。您可以得到您想要的结果,但这与struts2框架的使用方式无关。如有疑问,请务必回复。

纸条不好。;)你为什么用它们?你想做什么?这是我在Struts2中的第一个项目,我试图根据单击的链接在页面和显示表单之间移动。你检查过使用scriptlet时mServletResponse是否有响应吗?因为根据错误消息,mServletResponse.setContentType显然正在引发NullPointerException。但正如Aleksandr所说,使用scriplets不是一个好主意,我确信同样的方法可以通过不同的方式实现,特别是使用Struts2。
<%@page import="com.ly.bogha.oneworld.Pagemarkup"%>
<%@ page language="java" contentType="text/html; charset=windows-1256"
    pageEncoding="windows-1256"%>
<!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=windows-1256">
<title>Insert title here</title>
</head>
<body>
    <jsp:include page="header.html"></jsp:include>
    <%
        Cookie[] cookies = request.getCookies();
        int ii = 0;
        boolean found = false;
        String[] error = { "Authirization required to Access the Page, Please login." };
        for (int i = 0; i < cookies.length; i++) {
            if (cookies[i].getName().equals("nid")) {
                found = true;
                ii = i;

            }
        }

        if (found == true) {
    %>
    <jsp:include page="ehealth.html"></jsp:include>
    <%

            if (request.getParameter("s") != null) {
                Pagemarkup ebirth = new Pagemarkup();
                int submenu = Integer.parseInt(request.getParameter("s"));
                switch (submenu) {
                case 1:
                    ebirth.eBirth();
                    break;
                case 2:

                    break;
                case 3:

                    break;
                }

            }
        } else {
            response.sendRedirect("login.jsp?msg=" + error[0]);
        }
    %>
</body>
ebirth.eBirth();