简体   繁体   English

到JSP的Servlet会导致进入jsp页面,但不执行Java代码(仅html)

[英]Servlet to JSP forward leads to jsp page but does not execute java code (only html)

I'm using a system which includes Jersey (1.18.1) for REST web services + custom servlets to treat client requests and call web services. 我使用的系统包括用于REST Web服务的Jersey(1.18.1)+自定义Servlet,以处理客户端请求和调用Web服务。 I'm also using FORM method authentication. 我也在使用FORM方法身份验证。

The problem is that after web service has been called, the servlet forward s then to index.jsp. 问题在于,在调用Web服务之后,servlet s 转发给index.jsp。 In that JSP the html/javascript code is well displayed but the java code is not executed. 在该JSP中,很好地显示了html / javascript代码,但未执行Java代码。 I have to refresh the page (F5) to get the java code to be executed 9but then loose the request/response informations). 我必须刷新页面(F5)以获取要执行的Java代码9,然后松开请求/响应信息)。 What could be the cause for this behaviour...? 可能是这种行为的原因...?

Here is what my web.xml looks like: 这是我的web.xml的样子:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:http="http://cxf.apache.org/transports/http/configuration"
xmlns:sec="http://cxf.apache.org/configuration/security"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


<display-name>AdminModule</display-name>
<!-- JERSEY 1.18.1 -->    
<servlet>
    <servlet-name>JerseySpringServlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>my.package.restapi</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>MainController</servlet-name>
    <servlet-class>my.package.controller.MainController</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>Logout</display-name>
    <servlet-name>Logout</servlet-name>
    <servlet-class>my.package.controller.Logout</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>DefaultAction</display-name>
    <servlet-name>DefaultAction</servlet-name>
    <servlet-class>my.package.controller.DefaultAction</servlet-class>
</servlet>
<servlet>
    <description>
    </description>
    <display-name>CreateRole</display-name>
    <servlet-name>CreateRole</servlet-name>
    <servlet-class>my.package.controller.CreateRole</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>JerseySpringServlet</servlet-name>
    <url-pattern>/restapi/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>MainController</servlet-name>
    <url-pattern>/CMQAdmin</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Logout</servlet-name>
    <url-pattern>/Logout</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>DefaultAction</servlet-name>
    <url-pattern>/DefaultAction</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CreateRole</servlet-name>
    <url-pattern>/CreateRole</url-pattern>
</servlet-mapping>


<security-constraint>
    <web-resource-collection>
        <web-resource-name>Admin security manager</web-resource-name>
        <url-pattern>/index.jsp</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>role1</role-name>
        <role-name>role2</role-name>
        <role-name>role3</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Admin security manager</web-resource-name>
        <url-pattern>/DefaultAction</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>role1</role-name>
        <role-name>role2</role-name>
        <role-name>role3</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Admin security manager</web-resource-name>
        <url-pattern>/CMQAdmin</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>role1</role-name>
        <role-name>role2</role-name>
        <role-name>role3</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>


<!-- Define the Login Configuration for this Application -->
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

<!-- Security roles referenced by this web application -->
<security-role>
    <role-name>role1</role-name>
</security-role>
<security-role>
    <role-name>role2</role-name>
</security-role>
<security-role>
    <role-name>role3</role-name>
</security-role>

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

<welcome-file-list>
    <welcome-file>CMQAdmin</welcome-file>
</welcome-file-list>

</web-app>

The code in the jsp. jsp中的代码。 No java code is executed at all when the page dispays after the servlet forwards : 当servlet转发后页面还清时,根本不执行任何Java代码:

<%@ page import="org.json.*"%>
<%@ page import="java.io.*,java.util.*" %>

<html>

    <b>Cookies: ${cookie.username.value} </b>
<head>
<meta charset="utf-8">

<title>Admin</title>

<link rel="stylesheet" href="${pageContext.request.contextPath}/css/jquery.mobile-1.4.2.css" />
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" />
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/component.css" />
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
<script src="${pageContext.request.contextPath}/js/cbpFWTabs.js"></script>


<script type="text/javascript">

$(document).ready(function() {

    <%
        if(!request.isUserInRole("1") && !request.isUserInRole("2") && !request.isUserInRole("3")) {
    %>
            <p>some html code AAA</p>       
    <%
        }
        else if(request.isUserInRole("1"))
        {
    %>
            <p>some html code BBB</p>
    <%  
        }
        else if(request.isUserInRole("2"))
        {
    %>  
            <p>some html code CCC</p>
    <%
        }
        else if(request.isUserInRole("3"))
        {
    %>  
            <p>some html code DDD</p>
    <%
        }
    %>

});

</script>
</head>
<body>

<div id="logo" class="logo">&nbsp;</div>
<div id="utils" class="utils">
    <div id="logout" class="logout">
        <form action="${pageContext.request.contextPath}/CMQAdmin" method="POST">
            <input type="hidden" name="action" value="logoutaction">
            <input type="submit" value="Logout" />
        </form>
    </div>
</div>
<div id="mainDiv" class="main">
    <div id="title" class="title">Admin Module</div>
    <div id="tabs" class="tabs">
        <nav>
            <ul>
                <%
                    if(request.isUserInRole("2") || request.isUserInRole("1")) {
                %>
                    <li><a href="#section-3" id="section-3-tab" class="icon-patients"><span>a</span></a></li>
                    <li><a href="#section-1" id="section-1-tab" class="icon-cfgclinics"><span>b</span></a></li>
                    <li><a href="#section-2" id="section-2-tab" class="icon-users"><span>c</span></a></li>
                    <li><a href="#section-4" id="section-4-tab" class="icon-patients"><span>d</span></a></li>
                    <li><a href="#section-5" id="section-5-tab" class="icon-cfgclinics"><span>e</span></a></li>
                <%
                    }
                    else if(request.isUserInRole("3")) {
                %>
                    <li><a href="#section-5" id="section-5-tab" class="icon-cfgclinics"><span>b</span></a></li>
                    <li><a href="#section-3" id="section-3-tab" class="icon-patients"><span>a</span></a></li>
                    <li><a href="#section-1" id="section-1-tab" class="icon-cfgclinics"><span>c</span></a></li>
                    <li><a href="#section-2" id="section-2-tab" class="icon-users"><span>d</span></a></li>
                    <li><a href="#section-4" id="section-4-tab" class="icon-patients"><span>e</span></a></li>
                <%
                    }
                %>


            </ul>
        </nav>
        <div id="menu" class="menu">
            <%
                if(request.isUserInRole("2")) {
            %>
                <section id="section-3">
                    <div id="getPatientInfos" class="button">
                        <a id="lnkGetPatientInfos"
                            class="ui-btn ui-icon-plus ui-btn-icon-left ui-corner-all ui-shadow">Get infos</a>
                    </div>
                    <div id="creditTokens" class="button">
                        <a id="lnkCreditTokens"
                            class="ui-btn ui-icon-plus ui-btn-icon-left ui-corner-all ui-shadow">Post info</a>
                    </div>
                    <div id="createPatient" class="button">
                        <a id="lnkCreatePatient"
                            class="ui-btn ui-icon-plus ui-btn-icon-left ui-corner-all ui-shadow">put info</a>
                    </div>
                    <div id="registerPatient" class="button">
                        <a id="lnkRegisterPatient"
                            class="ui-btn ui-icon-plus ui-btn-icon-left ui-corner-all ui-shadow">delete info</a>
                    </div>
                </section>
            <%
                }
                else if(request.isUserInRole("3")) {
            %>
                <section id="section-5">
                    <div id="IndiActivation" class="button">
                        <a id="lnkIndiActivation"
                            class="ui-btn ui-icon-plus ui-btn-icon-left ui-corner-all ui-shadow">get info</a>
                    </div>
                </section>
            <%
                }
                else if(request.isUserInRole("1")) {
            %>
                    <section id="section-3">
                    ...
                    </section>
            <%
                }
            %>
        </div>
        <!-- /menu -->
    </div>
    <!-- /tabs -->
    <div id="content" class="content">Click on any button on the
        left to load content in here.</div>
    <!-- /content -->
    <div id="info" class="info">&nbsp;</div>
</div>
<!-- /mainDiv -->
<script>
    new CBPFWTabs(document.getElementById('tabs'));
</script>
</body>
</html>

The servlet that makes the call to a webservice (call is ok) and then forwards back to index.jsp: 调用Web服务的servlet(调用可以),然后转发回index.jsp:

public class CreateRole extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Autowired
    private RoleFacade roleFacade;

    /**
     * Logger...
     */
    private static final Logger logger = Logger.getLogger(CreateRole.class.getName());

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        logger.info("CreateRole::processRequest");

        String createRole = "AdminModule/SaveOrUpdateRole";

        logger.info("CreateRole::rolename+description: " + rolename + " + " + description);

        // get user roles from web service
        String baseURL = https://localhost/AdminModule/restapi;

        Form form = new Form();
        form.add("rolename", rolename); 
        form.add("description", description);

        JerseyClient client = new JerseyClient(form, baseURL+createRole);
        ClientResponse clientResponse = client.post_Form(form);

        if(clientResponse.getStatus() == 200 || clientResponse.getStatus() == 201) {
            logger.info("ROLE [" + clientResponse.getEntity(String.class) + "] has been successfully created");

            // do whatever with response
            client.close();

            request.setAttribute("", request.getParameter("action"));

            this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
            return;
        }
        else {
            request.setAttribute("error", true);
            request.setAttribute("wrErrorMessage", "Could not create new role");
            RequestDispatcher r = this.getServletContext().getRequestDispatcher("/index.jsp");
            r.forward(request, response);
            return;
        }
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

}

I think you may be missing a closing } for the javascript bit just above /script 我认为您可能缺少/ script上方的javascript结束符}

script type="text/javascript">

. . .

        <p>some html code DDD</p>
<%
    }
%>


/script>

BTW Scriptlets are deprecated. 不建议使用BTW脚本。 I tend to use the Java Standard Tag Library (JSTL) and beans. 我倾向于使用Java标准标记库(JSTL)和bean。

http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM