首页 > 解决方案 > 过滤器中的请求和响应是否与 servlet 中的相同?

问题描述

我正面临这个抛出的错误

“警告:StandardWrapperValve [AddServlet]:Servlet.service() for servlet > AddServlet 抛出异常 java.lang.NullPointerException”

我不确定这是否是由于 ServletRequest 的会话与 HttpServletRequest 的会话不同导致“正在检索结果”时导致 null 异常。

有什么建议可以解决这个问题吗?我正在考虑添加数字并使用过滤器检查结果是否超过 10

以下是我编写并运行的代码:

索引.html

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <form action="AddServlet" method="post">    
            Enter 1st number: <input type="text" name="num1"><br>
            Enter 2nd number: <input type="text" name="num2"><br>
            <input type="submit">
        </form>
    </body>
</html>

AddServlet.java

@WebServlet(urlPatterns = {"/AddServlet"})
public class AddServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();

        //retrieve from HTML
        int i = Integer.parseInt(request.getParameter("num1"));
        int j = Integer.parseInt(request.getParameter("num2"));
        int k = i+j;
        System.out.println(k);
        HttpSession session = request.getSession();
        session.setAttribute("result", k);

        out.print(k);
    }
}

结果过滤器.java

@WebFilter(filterName = "ResultsFilter", urlPatterns = {"/AddServlet"})
public class ResultsFilter implements Filter {

    public ResultsFilter() {
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpSession session = req.getSession();
        int ans = (int) session.getAttribute("result");      <-- error from here
        System.out.println(ans);

        if (ans <= 10) {
            PrintWriter out = response.getWriter();
            out.print("Result must be more than 10!");
        } else {
            chain.doFilter(request, response);
        }
    }
}

标签: javajspservletsservlet-filters

解决方案


推荐阅读