java - 无法在jsp页面中调用servlet的doPost()方法

标签 java jquery mysql jsp servlets

一开始。有一个应用程序结构。 我有 3 个 MySQL 表(Obiekt、Termin、Rezerwacja)。在项目中我有jsp页面(这里是代码):

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="test.Obiekt"%>
<%@ page import="test.ListaObiektow"%>
<%@ page import="test.Termin"%>
<%@ page import="test.ListaTerminow"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>menu główne</title>

<meta name="viewport" content="initial-scale=1, maximum-scale=1">


<meta name="android-mobile-web-app-capable" content="yes">
<meta name="android-mobile-web-app-status-bar-style" content="black">
<link href="css/ratchet.css" rel="stylesheet">
<link href="css/ratchet-theme-android.css" rel="stylesheet">


<script src="js/ratchet.js"></script>
<script type="text/javascript">
function Refresh(idObiekt){
    location.href="pilkaNozna.jsp?idObiekt=" + idObiekt; 
    }
</script>
</head>
<body>
    </br>
    </br>
    </br>
    <header class="bar bar-nav">
        <a class="icon icon-left-nav pull-left" href="wyszukaj.jsp"></a>
        <h1 class="title">Wybierz obiekt</h1>
    </header>

    <div id="content">
        <div class="tabelawybor">

            <b>Wybierz obiekt:</b>
            <%
                ArrayList<Obiekt> list = new ListaObiektow().getObiekty();
            %>
            <form>
                <select name="obiekt" onChange="Refresh(this.value)">
                    <option value="0" selected>Wybierz Obiekt</option>
                    <%
                    String selectedObiekt = request.getParameter("idObiekt");
                    int counter=0;
                    for (Obiekt obiekt : list) {
                        if(selectedObiekt == null && counter==0)
                        {
                            selectedObiekt = Integer.toString(obiekt.idObiekt);
                        }

                %>
                    <option value="<%=obiekt.idObiekt%>"
                        <%= ((Integer.toString(obiekt.idObiekt)).equals(selectedObiekt))?"selected":""%>><%=obiekt.nazwa%>
                        <%=obiekt.adres%></option>

                    <%
                    }

                %>

                </select>
            </form>
        </div>

        <div class="tabelawybor">
            <td><b>Wpisz liczbę uczestników:</b><input type="text"
                name="uczest" /></td>
                <% String liczbaUczestnikow = request.getParameter("liczbaUczestnikow"); %>
        </div>

        <div class="tabelawybor">
        <form action="Rezerwacja?action=doPost" method="post">
            <table class="center">

                <tr>
                    <td>Nazwa obiektu:</td>
                    <td>Data:</td>
                    <td>Godzina</br> rozpoczęcia:
                    </td>
                    <td>Godzina</br> zakończenia:
                    </td>
                    <td></td>
                </tr>
                <%
                ListaTerminow listaterminow = new ListaTerminow(); 
                listaterminow.setId(selectedObiekt);
                ArrayList<Termin> lista =listaterminow.getTerminy();
                String idTermin = request.getParameter("idTermin");
                    for (Termin termin : lista) {
                %>
                <tr>
                    <td><%=termin.nazwaObiektu%> <%=termin.adresObiektu%></td>
                    <td><%=termin.dzien%></td>
                    <td><%=termin.odKtorej%></td>
                    <td><%=termin.doKtorej%></td>
                    <td>
                            <button class="btn btn-primary">Zarezerwuj</button>
                        </td>
                </tr>
                <%
                    }
                %>
            </table>
            </form>
        </div>
    </div>


</body>
</html>

在此 jsp 页面中,我选择了包含 Obiekt 列表的表单(此列表是在 ListaObiektow.java 中创建的),但它有效。我还有包含 Termin 列表(在 ListaTerminow.java 中创建)的表格。它也有效。但是,在这个表格中有一个按钮可以制作Rezerwacja。

我制作了 Rezerwuj servlet。这是代码:

package test;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

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 test.ConnectionClass;
import test.Rezerwacja;
import test.Termin;/**
 * Servlet implementation class Rezerwuj
 */
@WebServlet("/Rezerwacja")
public class Rezerwuj extends HttpServlet {
    private static final long serialVersionUID = 1L;
    Connection conn;
    private int idTermin;
    private int liczbaUczestnikow;
    public Rezerwuj() {
        super();

    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        conn = ConnectionClass.Polacz();
        ArrayList<Rezerwacja> rezerwacje = new ArrayList<Rezerwacja>();

        PreparedStatement st = null;

        ResultSet rs = null;
        String sql = "INSERT INTO rezerwacje (liczbaUczestnikow,idTermin) values ('" + liczbaUczestnikow + "','" + idTermin + "')"
         + "UPDATE termin SET termin.czyZajety=true WHERE termin.idTermin = '"+ idTermin +"'";              

        try
        {
            st = conn.prepareStatement(sql);

            if(liczbaUczestnikow > 0 && liczbaUczestnikow < 20)
            {
                rs = st.executeQuery();

            }

            while(rs.next())
            {
                Rezerwacja rezerwacja = new Rezerwacja();
                rezerwacja.setLiczbaUczestnikow(rs.getInt(1));
                rezerwacja.setIdTermin(rs.getInt(2));
                rezerwacje.add(rezerwacja);
            }
        }
        catch(SQLException e)
        {
            System.out.println(e);
        }
    }

    public void setIdTermin(String id)
    {
        idTermin = Integer.parseInt(id);
    }
    public void setliczbaUczestnikow(String liczba)
    {
        liczbaUczestnikow = Integer.parseInt(liczba);
    }

}

当我点击按钮时,它返回如下错误:

type Exception report

message

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
    test.Rezerwuj.doPost(Rezerwuj.java:63)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我想要什么: 我在选择表单中选择一个选项,然后在文本输入中键入值 (0-20),然后单击按钮并在 MySQL 表 Rezerwacja 中创建一条记录。有什么建议吗?

最佳答案

 <form action="Rezerwacja?action=doPost" method="post"> 

在这一行中,操作是您发送请求的位置,因此应该是 action="Rezerwacja",方法应该是 method="POST"

关于java - 无法在jsp页面中调用servlet的doPost()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732022/

相关文章:

mysql - 如何使结果集中的每一行返回多次?

java - 在具有表格的 excel(xlsx) 工作表中写入数据

java - 如何使用 spring mvc void Controller 方法?

java - Hibernate - 访问新数据字段时无法解决属性错误

java - 以 '/' 字符作为 JSON 键的 Jackson ObjectMapper

javascript - 鼠标悬停时无限 move 对象

javascript - jquery:检测属于某个类的任何元素的变化

Jquery 自动完成导致页面不必要地滚动

mysql - 多对多关系SELECT问题

mysql - 有效地组合和查询多个表(STI 与 MTI)