当前位置: 首页 > 知识库问答 >
问题:

无法从servlet转发到jsp

皇甫逸清
2023-03-14

我正在做一个简单的表单验证。我无法转发到jsp页面。请参阅下面的代码。行B和行C工作正常,但行A产生错误

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

@WebServlet("/client")
public class client extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public client() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String username = null;
        String password = null;

        username = request.getParameter("username");
        password = request.getParameter("password");

        SessionFactory sf1 = new Configuration().configure().buildSessionFactory();
        Session s1 = sf1.openSession();
        s1.beginTransaction();
        Query q = s1.createQuery("from userdb where username = ?");
        userdb u2 = (userdb) q.setString(0, username).uniqueResult();
        if (u2 != null) {
            if (u2.password.equals(password)) {
/*Line - A*/    request.getRequestDispatcher("home.jsp").include(request, response);
            } else {
                request.setAttribute("error", "Invalid username/password, please try again");
/*Line - B*/    request.getRequestDispatcher("Clientlog.jsp").include(request, response);
            }
            s1.getTransaction().commit();
            s1.close();
        }

        userdb u1 = new userdb();
        u1.setUsername(username);
        u1.setPassword(password);
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session s = sf.openSession();
        s.beginTransaction();
        s.save(u1);
        s.getTransaction().commit();
        s.close();

/*Line - C*/    request.getRequestDispatcher("home.jsp").include(request, response);    
    }
}

行B和行C成功地转到请求的页面,但行A产生此错误

共有1个答案

白腾
2023-03-14

克服这一问题的一种方法是(因为a行和C行是相同的),如果我使用flag=0来检查它是否进入包含a行的块中,并将该标志标记为1,然后将执行移到C行,它就可以工作了

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

@WebServlet("/client")
public class client extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public client() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        int flag = 0;
        String username = null;
        String password = null;

        username = request.getParameter("username");
        password = request.getParameter("password");

        SessionFactory sf1 = new Configuration().configure().buildSessionFactory();
        Session s1 = sf1.openSession();
        s1.beginTransaction();
        Query q = s1.createQuery("from userdb where username = ?");
        userdb u2 = (userdb) q.setString(0, username).uniqueResult();
        if (u2 != null) {
            if (u2.password.equals(password)) {
                flag = 1;
 /*Line - A*/   // request.getRequestDispatcher("home.jsp").include(request, response);
            } else {
                request.setAttribute("error", "Invalid username/password, please try again");
/*Line - B*/    request.getRequestDispatcher("Clientlog.jsp").include(request, response);
            }
            s1.getTransaction().commit();
            s1.close();
        }

        if(flag == 0){
            userdb u1 = new userdb();
            u1.setUsername(username);
            u1.setPassword(password);
            SessionFactory sf = new Configuration().configure().buildSessionFactory();
            Session s = sf.openSession();
            s.beginTransaction();
            s.save(u1);
            s.getTransaction().commit();
            s.close();
        }

/*Line - C*/    request.getRequestDispatcher("home.jsp").include(request, response);    
    }
}
 类似资料:
  • viewServlet.java: 我的目标是将'viewservlet.java'中的html代码编写为'result.jsp'中的纯html代码。 我所期望的是,如果我用jsp编写纯html代码,那么所有的记录都将从“MySQL”中检索,将显示在viewservlet.java中。如果我想要编辑,那么删除将发生在“viewservlet.java”中 我尝试了Request.GetAttrib

  • 我有一个小应用程序(HTML表单、servlet作为控制器和jsp文件),我试图弄清楚为什么我不能将请求从servlet转发到jsp文件。 问题是从html提交后,显示“HTTP状态404” null 谢谢! 项目层次结构:http://s23.postimg.org/kgt7r7lwb/capture.jpg main.html: 更新:问题可能出在Controller.java。当我尝试下面的

  • 问题内容: 我有两个Web应用程序,分别是web1和web2。我想将请求从web1 / servlet1转发到web2 / servlet2。可能吗?请帮忙! 问题答案: 这是一个两步过程: 掌握代表 获得从对应 因此,从内部开始是这样的: 所有这些都有一个很大的警告- 容器可能未配置为允许跨上下文转发,因为这存在潜在的安全风险。如果是这种情况,将返回。

  • 问题内容: 我想从一个请求转发 的Servlet 来 操作 这样使用这样的 没用 我该如何解决这个问题? 问题答案: 为此,您可能还需要将过滤器设置为在FORWARD上运行(并在代码中显示INCLUDE,尽管您声明要使用FORWARD):

  • 我已经声明了数组列表,并在servlet中填充了它,我已经在servlet中打印了它,它运行得很好,但是当我转发到JSP时,我得到了下一个空指针异常: java.lang.NullPointerException: 无法调用 “java.util.ArrayList.iterator()” 因为 “miArray2” 为 null -Servlet代码: 索引.jsp代码:

  • 主要内容:请求转发,request 域对象,示例Web 应用在处理客户端的请求时,经常需要多个 Web 资源共同协作才能生成响应结果。但由于 Serlvet 对象无法直接调用其他 Servlet 的 service() 方法,所以 Servlet 规范提供了 2 种解决方案: 请求转发 请求包含(了解即可) 下面我们主要对请求转发进行介绍。 请求转发 请求转发属于服务器行为。容器接收请求后,Servlet 会先对请求做一些预处理,然后将请求传递