繁体   English   中英

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

[英]How to make a servlet's received attributes available to other servlets via the ServletContext's attribute mechanism?

我必须使用表单从servlet中获取信息,然后通过ServletContext的attribute方法使信息(字符串)可用于其他servlet? 我丝毫不了解这一点,并且非常感谢您逐步进行分解。 这是我的代码。 一个servlet接受一个整数和一个浮点数,另一个接受一个名字和姓氏。

第一个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>");
    }
}

我的第二个Servlet

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>

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

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()

暂无
暂无

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

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