无法在jsp页面中调用servlet的doPost()方法[重复]
Posted
技术标签:
【中文标题】无法在jsp页面中调用servlet的doPost()方法[重复]【英文标题】:Can't call doPost() method of servlet in jsp page [duplicate] 【发布时间】:2015-08-24 06:28:40 【问题描述】:在开始时。有一个应用程序结构。 我有 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 中创建的),但它可以工作。我也有包含终端列表(在 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" method="post">
而不是`
你在你的 servlet 上得到了NullPointerException
。修复它。它会工作
Rezerwuj.java 的第 63 行是什么?据我了解,您的代码在任何时候都没有设置变量“liczbaUczestnikow”,因此得到了 NPE
废话。我必须完全重写 Rezerwuj servlet。我必须在这个 servlet 中做什么才能将变量放入 mysql 查询中,然后从 jsp 中的表单中获取这些变量?
我们可以在这里提出疑问,这就是该网站的用途,而不是为您做您的工作;) 谷歌一下,您会发现很多关于如何、小提示、分离事物的信息,首先将数据从表单获取到 servlet。
【参考方案1】:
<form action="Rezerwacja?action=doPost" method="post">
在这一行中,action 是你发送请求的地方,所以它应该是 action="Rezerwacja" 而方法应该是 method="POST"
【讨论】:
这不是答案。写成这样的评论广告【参考方案2】:我认为你在初始化后liczbaUczestnikow
有问题总是0
。结果rs
总是null
,因此抛出异常。
【讨论】:
liczbaUczestnikow = request.getParameter("liczbaUczestnikow") 应该够了吧? 是的,这就足够了,如果你的请求中有这个参数,只需将liczbaUczestnikow
转换为int
。以上是关于无法在jsp页面中调用servlet的doPost()方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 jsp 中的超链接调用 doPost() servlet