ไม่สามารถส่งผ่านค่าจากเซิร์ฟเล็ตไปยัง JSP

โค้ดอัปเดตด้วยการกำหนดค่า web.xml และ Servlet

ฉันกำลังพยายามส่งต่อค่าบางอย่างจากเซิร์ฟเล็ตของฉันไปยัง JSP แต่เมื่อฉันพยายามเข้าถึงค่านั้นไปยัง JSP จะไม่มีเอาต์พุต

นี่คือแบบฟอร์มของฉัน:

<HTML>
<BODY>
<FORM METHOD=POST ACTION="servlet/NewServlet">
Enter Name: <Input type="text" name="name"/><br>
<P><INPUT TYPE=SUBMIT>
</FORM>

นี่คือ Bean ของฉันที่ฉันใช้สำหรับวิธี setter และ getter:

package user;

    public class CompileClass {
    public String name;

    public void setName(String n){
            name=n;
        }

    public String getName(){
            return name;
        }
    }

นี่คือเซิร์ฟเล็ตของฉัน:

import java.io.*;
import javax.servlet.*;  
import javax.servlet.http.*;

import user.CompileClass;

public class NewServlet extends HttpServlet{

    public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
String name1;

CompileClass c=new CompileClass();
name1=c.getName();
request.getSession().setAttribute("name1", name1);

request.getRequestDispatcher("../Result.jsp").forward(request, response);

    }
    }

และสุดท้ายนี่คือหน้า JSP ของฉัน:

<%@ page import="java.net.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="java.util.ArrayList"%>

<jsp:useBean id="user" scope="request" class="user.CompileClass" />
<jsp:setProperty property="*" name="user"/>
<html>

  <body>

Name:
<br/>

<% request.getSession().getAttribute("name1");%>


  </body>
</html>

นี่คือ web.xml ของฉัน:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>NewServlet</servlet-name>
    <servlet-class>NewServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>NewServlet</servlet-name>
    <url-pattern>/servlet/NewServlet</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

ทุกอย่างดูเหมือนดีสำหรับฉัน แต่ฉันก็ยังไม่ได้รับผลลัพธ์ใด ๆ บนหน้า JSP ของฉัน ช่วย?


person Anurag    schedule 26.03.2011    source แหล่งที่มา


คำตอบ (3)


ค่าจากแบบฟอร์มเข้าสู่ Bean ของคุณเป็นอย่างไร? คุณกำลังทำ:

CompileClass c=new CompileClass();      //creates a new, empty instance
name1=c.getName();                      //gets the name from the empty 
                                        //instance (will be null)
request.setAttribute("name1", name1);   //sets 'name1' to null in the request

คุณอาจมีโชคดีกว่าถ้าคุณทำ:

CompileClass c=new CompileClass();      //creates a new, empty instance
c.setName(request.getParameter("name"));//get the param and set it in the bean
name1=c.getName();                      //gets the name from the bean
request.setAttribute("name1", name1);   //sets 'name1' in the request

แม้ว่าจากโครงสร้างของโค้ดของคุณ ดูเหมือนว่าคุณอาจใช้เฟรมเวิร์กเว็บบางอย่างที่คุณคาดว่าจะเติมข้อมูล Bean ให้กับคุณโดยอัตโนมัติด้วยข้อมูลจากคำขอ หากเป็นเช่นนั้น คุณอาจต้องศึกษาเอกสารการกำหนดค่าและการใช้งานสำหรับเฟรมเวิร์กของคุณเพื่อให้แน่ใจว่าคุณได้ตั้งค่าอย่างถูกต้องและใช้งานอย่างถูกต้อง

แก้ไข:

นอกจากนี้ โปรดอย่าทำสิ่งต่างๆ เช่น:

<% request.getSession().getAttribute("name1");%>

ใช้สิ่งนี้แทน:

${name1}

แก้ไข 2:

คุณไม่ได้ปรับใช้เซิร์ฟเล็ตของคุณใน web.xml คุณต้องกำหนดค่าโดยเพิ่มสิ่งที่ต้องการ:

<servlet>
  <servlet-name>newServlet</servlet-name>
  <servlet-class>user.NewServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>newServlet</servlet-name>
  <url-pattern>/name/*</url-pattern>
</servlet-mapping>

จากนั้นคุณต้องอัปเดตฟอร์ม HTML ของคุณเพื่อให้ฟอร์มโพสต์ไปที่เซิร์ฟเล็ตแทนที่จะโพสต์โดยตรงไปยัง JSP ดังนั้นบางอย่างเช่น:

<FORM METHOD=POST ACTION="name/submit">

person aroth    schedule 26.03.2011
comment
ฉันลองใช้รหัสที่แก้ไขแล้วของคุณไม่ได้ผล ฉันยังลบคอนสตรัคเตอร์ออกแล้วลอง แต่ก็ไม่ได้ผลเช่นกัน นี่ไม่ใช่กรอบงานเว็บ เพียงแต่ว่าเค้าร่างทั่วไปของเว็บแอปของเราที่เราได้ออกแบบและพยายามยึดติดกับโครงสร้างนี้ - person Anurag; 26.03.2011
comment
@Anurag - ถ้าอย่างนั้นคุณสามารถโพสต์ไฟล์ web.xml ของคุณได้ไหม? สมมติว่าทุกอย่างเชื่อมต่ออย่างถูกต้อง โค้ดด้านบนควรจะใช้งานได้ - person aroth; 26.03.2011
comment
@Anurag - นั่นอธิบายได้ว่าคุณยังไม่ได้ปรับใช้เซิร์ฟเล็ตของคุณ คุณต้องเพิ่มส่วนการกำหนดค่าสำหรับเซิร์ฟเล็ตของคุณ เช่น: <servlet> <servlet-name>nameServlet</servlet-name> <servlet-class>user.NewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>nameServlet</servlet-name> <url-pattern>/name/*</url-pattern> </servlet-mapping> จากนั้นตั้งค่า action บนของคุณเป็นบางอย่างเช่น ACTION="name/submit" จากนั้นคุณก็ควรจะไปได้ดี - person aroth; 26.03.2011
comment
@aroth ฉันอัปเดต web.xml และเพิ่มการกำหนดค่าที่เหมาะสม ฉันได้อัปเดต web.xml ที่นี่ด้วย นอกจากนี้ใน index.jsp ฉันได้แก้ไขแล้ว: <FORM METHOD=POST ACTION="servlet/NewServlet"> แต่ยังคงอยู่ในหน้า Result.jsp ไม่มีผลลัพธ์ :| ตอนนี้ฉันผิดตรงไหน? - person Anurag; 26.03.2011
comment
@Anurag - ยากที่จะพูด คุณได้ลองเพิ่มการเรียก System.out.println() ในเซิร์ฟเล็ตของคุณเพื่อตรวจสอบว่ากำลังถูกเรียกหรือไม่ หากเป็นเช่นนั้น อาจลองใช้ request.getRequestDispatcher("../Result.jsp").include(request, response); และดูว่ามีความแตกต่างหรือไม่ - person aroth; 27.03.2011
comment
@aroth ฉันลบ bean และหน้า result.jsp และรับพารามิเตอร์โดยตรงจาก index.php และประมวลผลและพิมพ์จาก servlet ตอนนี้มันกำลังทำงานอยู่ ขอบคุณสำหรับความช่วยเหลือ - person Anurag; 27.03.2011

ดูเหมือนมีปัญหากับขอบเขต วิธีแก้ไขที่ง่ายที่สุดคือแทนที่

request.setAttribute("name1", name1);

to

request.getSession().setAttribute("name1", name1);
person Stan Kurilin    schedule 26.03.2011
comment
ฉันพยายามเปลี่ยนการร้องขอการโทรด้วยเซสชัน แต่ไม่ได้ผล - person Anurag; 26.03.2011
comment
ฉันลองทั้งหมดที่ถูกชี้ไปที่นี่ แต่กลับไม่มีเอาท์พุต นอกจากนี้ฉันได้อัปเดตโค้ดที่นี่แล้ว - person Anurag; 26.03.2011
comment
@Anurag - ลองรวมแทนการส่งต่อ - person Stan Kurilin; 27.03.2011
comment
@stas ฉันลบ bean และหน้า result.jsp และรับพารามิเตอร์โดยตรงจาก index.php และประมวลผลและพิมพ์จาก servlet ตอนนี้มันกำลังทำงานอยู่ ขอบคุณสำหรับความช่วยเหลืออย่างไรก็ตาม - person Anurag; 27.03.2011
comment
@Stas index.jsp แย่ของฉัน :| ฉันหมายถึงแบบฟอร์ม JSP เริ่มต้น - person Anurag; 27.03.2011

ใช้คลาส RequestDispatcher...

person Mazhar    schedule 20.03.2014
comment
อ่านคำถามนั่นคือสิ่งที่เขาทำ: request.getRequestDispatcher("../Result.jsp").forward(request, response); - person Erwin Bolwidt; 20.03.2014
comment
พร้อมกับผู้ส่งคำขอ เราสามารถส่งค่าไปยังหน้าถัดไปได้ นั่นคือสิ่งที่เขาต้องการ .. - person Mazhar; 21.03.2014
comment
หากคุณเชื่อว่าเป็นเช่นนั้น ทำไมคุณไม่อธิบายสิ่งนั้นในคำตอบของคุณ? - person Erwin Bolwidt; 21.03.2014