如何将参数从一个 servlet 传递到另一个?

How to pass parameter from on servlet to another?

我可以从 html 文件中获取参数;但我无法将这些参数发送到其他 Servlet..

我真正想要做的是,在一个 servlet 中获取用户名和密码,然后将这些值发送到另一个 servlet 进行身份验证,然后相应地重定向....

而且我是新手,我盲目地尝试了很多东西,但无法完成工作....

这是我的第一个 Servlet:

public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
response.setContentType("text/html");
String uname=request.getParameter("uname");
String pass=request.getParameter("pass");
PrintWriter out=response.getWriter();
if(uname!=null && pass!=null){
    ServletContext sc=getServletContext();
    RequestDispatcher r=sc.getRequestDispatcher("/Authentication");
    response.sendRedirect("Authentication");
} else {
    out.println("Error");
}

这是我的第二个 Servlet:

public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
        String uname=(String)request.getAttribute("uname");
        String pass=(String)request.getAttribute("pass");
        int p=pass.hashCode();
        try{
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/aed","root","passwordmysql");
        Statement st=con.createStatement();
        ResultSet rs;
        rs=st.executeQuery("select * from logids where userName='" + uname + "' and pass='" + p +"'");
        if(rs.next()){
            response.sendRedirect("home.html"); 
        }else{
            response.sendRedirect("Error.html");
        }
        }
        catch(SQLException i){
            i.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

我是新手,我很确定我犯了错误......

从表单获取参数后,您需要在会话级别设置属性以供其他 servlet 使用。所以在以下声明之后:

String uname=request.getParameter("uname");
String pass=request.getParameter("pass");

添加以下内容:

 request.getSession().setAttribute("uname", uname);
 request.getSession().setAttribute("pass", pass);

然后在 servlet2 中,像这样访问它:

String uname= (String)request.getSession().getAttribute("uname");
String pass= (String)request.getSession().getAttribute("pass");

参考文档:link

forwarding servlet lets you to forward the current servlet context objects(their parameters are forwarded username , password)

public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
    response.setContentType("text/html");
    String uname=request.getParameter("uname");
    String pass=request.getParameter("pass");
    PrintWriter out=response.getWriter();
    if(uname!=null && pass!=null){
        ServletContext sc=getServletContext();
        RequestDispatcher r=sc.getRequestDispatcher("/Authentication");
        response.forward("Authentication");
    } else {
        out.println("Error");
    }

第二个 servlet

public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
        String uname=(String)request.getParameter("uname");
        String pass=(String)request.getParameter("pass");
        int p=pass.hashCode();
        try{
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/aed","root","passwordmysql");
        Statement st=con.createStatement();
        ResultSet rs;
        rs=st.executeQuery("select * from logids where userName='" + uname + "' and pass='" + p +"'");
        if(rs.next()){
            response.sendRedirect("home.html"); 
        }else{
            response.sendRedirect("Error.html");
        }
        }
        catch(SQLException i){
            i.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

NOTE : place your data access codes seperately