如何使servlet通过ServletContext属性机制接收其他servlet可用的属性?

时间:2015-03-12 00:34:09

标签: java jsp servlets

我必须使用表单从servlet中获取信息,然后通过ServletContext的属性方法将信息(字符串)提供给其他servlet?我丝毫不明白这一点,并且非常欣赏一步一步的细分。这是我的代码。一个servlet采用整数和浮点数,另一个采用名称和姓氏。

First Servlet

package myServlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;


public class FirstServlet extends GenericServlet {

    public String firstName;
    public String surname;

    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException{


        PrintWriter out = res.getWriter();
        out.println("<HTML><HEAD><TITLE>");
        out.println("ServletResponse");
        out.println("</TITLE></HEAD>");
        out.println("<BODY>");
        out.println("<H1>First name: " + req.getServletContext().getAttribute("firstName") + "</H1><br>");
        out.println("<H1>Surname: " + req.getServletContext().getAttribute("surname") + "</H1><br>");
        out.println("<H1>Integer: " + req.getServletContext().getAttribute("integer") + "</H1><br>");
        out.println("<H1>Floating Point:  " + req.getServletContext().getAttribute("float") + "</H1><br>");
        out.println("<br><br><br><a href=\"index.html\">Back to the forms! </a>");
        out.println("</BODY>");
        out.println("</HTML>");
    }
}

我的第二个小礼物

package myServlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;

public class SecondServlet extends GenericServlet {
    public String noInteger;
    public String noFloat;


    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException{


        PrintWriter out = res.getWriter();
        out.println("<HTML><HEAD><TITLE>");
        out.println("ServletResponse");
        out.println("</TITLE></HEAD>");
        out.println("<BODY>");
        out.println("<H1>First name: " + req.getServletContext().getAttribute("firstName") + "</H1><br>");
        out.println("<H1>Surname: " + req.getServletContext().getAttribute("surname") + "</H1><br>");
        out.println("<H1>Integer: " + req.getServletContext().getAttribute("integer") + "</H1><br>");
        out.println("<H1>Floating Point:  " + req.getServletContext().getAttribute("float") + "</H1><br>");
        out.println("<br><br><br><a href=\"index.html\">Back to the forms! </a>");
        out.println("</BODY>");
        out.println("</HTML>");
    }
}

我的Index.html文件

 <html>
    <head> 
        <title>Lab One</title> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
            First Name: <input type="text" name="firstName"> 
        <br>
            Surname: <input type="text" name="surname"> 
        <br>
        <form action="FirstServlet" method="POST"> 
            <input type ="submit" name="Submit"> </form>
        <br>
            Integer: <input type="text" name="integer"> 
        <br>
            Float: <input type="text" name="float">
        <br>

        <form action="SecondServlet" method="POST"> 
            <input type ="submit" name="Submit2"> </form>

    </body> 
</html>

1 个答案:

答案 0 :(得分:1)

为什么不将其添加为会话属性

HttpSession session = request.getSession();
String firstName= (String)request.getAttribute("firstName");
session.setAttribute("firstName", firstName);

然后另一个servlet / jsp可以将值读取为

session.getAttribute ("firstName");

为简单起见,您还可以将整个用户类(??)设置为会话属性

编辑,因为您正在使用ServletRequest而不是HttpServletRequest尝试使用以下方法获取servletContext

http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getServletContext()