解决将数据从一个 servlet 传递到另一个 servlet 的问题
Fixing the problem of passing data from one servlet to another
我写了一个 jsp 页面的代码,两个 servlet 和最后一页。
jsp-页面将数据从表单发送到第一个 servlet(控制器),后者将数据依次发送到第二个(AreaCheck)。
在 /controller 页面上(参见 web.xml)出现错误 405 "HTTP method POST is not supported"。
index.jsp:
<script>
function clickCheckbox(numbid){
var currentCB = document.getElementById(numbid);
if (currentCB.checked === true){
document.getElementById('hidden_x').value = numbid;
}
else{
document.getElementById('hidden_x').value = "";
}
}
</script>
<form action="controller" method="post" id="form" onsubmit="check(); return true;" novalidate>
<label class="instructions" for="hidden_x"> Insert X: </label>
<p><input type="checkbox" class="button" name="button_x" value="-5" id="-5" onclick="clickCheckbox(-5)"> -5 </p>
<input type="hidden" name="hidden_x" id="hidden_x" value=""> <br>
<label for="yCoordinate" class="instructions"> Insert Y: </label>
<input type="text" id="yCoordinate" name="yCoordinate" autocomplete="off">
<label class="instructions" for="radius"> Insert R: </label>
<select id="radius" name="radius">
<option value="1">1</option>
</select>
<br>
<p id="button" class="input_button">
<input type="submit" value="Check the result.">
</p>
</form>
ControllerServlet.java:
public class ControllerServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String X = req.getParameter("hidden_x");
String Y = req.getParameter("yCoordinate");
String R = req.getParameter("radius");
req.setAttribute("XCoordinate", X);
req.setAttribute("YCoordinate", Y);
req.setAttribute("Radius", R);
req.getRequestDispatcher("areaCheck").forward(req, resp);
}}
AreaCheckServlet.java:
public class AreaCheckServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String x = (String) req.getAttribute("XCoordinate");
String y = (String) req.getAttribute("YCordinate");
String r = (String) req.getAttribute("Radius");
//some other logic goes here
req.getRequestDispatcher("result.html").forward(req, resp);
}}
Web.xml:
<!--Controller Servlet-->
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>App.Servlets.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/controller</url-pattern>
</servlet-mapping>
<!--Servlet that checks hitting the area-->
<servlet>
<servlet-name>AreaCheck</servlet-name>
<servlet-class>App.Servlets.AreaCheckServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AreaCheck</servlet-name>
<url-pattern>/areaCheck</url-pattern>
</servlet-mapping>
此处仅显示相关代码。一个程序的逻辑看似奇怪,但不能改变,因为它是任务。
我该如何解决?
AreaCheckServlet 应该支持 POST 方法,以便您将 post 请求转发给它。
同样在 AreaCheckServlet 中实现 doPost
我写了一个 jsp 页面的代码,两个 servlet 和最后一页。 jsp-页面将数据从表单发送到第一个 servlet(控制器),后者将数据依次发送到第二个(AreaCheck)。 在 /controller 页面上(参见 web.xml)出现错误 405 "HTTP method POST is not supported"。
index.jsp:
<script>
function clickCheckbox(numbid){
var currentCB = document.getElementById(numbid);
if (currentCB.checked === true){
document.getElementById('hidden_x').value = numbid;
}
else{
document.getElementById('hidden_x').value = "";
}
}
</script>
<form action="controller" method="post" id="form" onsubmit="check(); return true;" novalidate>
<label class="instructions" for="hidden_x"> Insert X: </label>
<p><input type="checkbox" class="button" name="button_x" value="-5" id="-5" onclick="clickCheckbox(-5)"> -5 </p>
<input type="hidden" name="hidden_x" id="hidden_x" value=""> <br>
<label for="yCoordinate" class="instructions"> Insert Y: </label>
<input type="text" id="yCoordinate" name="yCoordinate" autocomplete="off">
<label class="instructions" for="radius"> Insert R: </label>
<select id="radius" name="radius">
<option value="1">1</option>
</select>
<br>
<p id="button" class="input_button">
<input type="submit" value="Check the result.">
</p>
</form>
ControllerServlet.java:
public class ControllerServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String X = req.getParameter("hidden_x");
String Y = req.getParameter("yCoordinate");
String R = req.getParameter("radius");
req.setAttribute("XCoordinate", X);
req.setAttribute("YCoordinate", Y);
req.setAttribute("Radius", R);
req.getRequestDispatcher("areaCheck").forward(req, resp);
}}
AreaCheckServlet.java:
public class AreaCheckServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String x = (String) req.getAttribute("XCoordinate");
String y = (String) req.getAttribute("YCordinate");
String r = (String) req.getAttribute("Radius");
//some other logic goes here
req.getRequestDispatcher("result.html").forward(req, resp);
}}
Web.xml:
<!--Controller Servlet-->
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>App.Servlets.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/controller</url-pattern>
</servlet-mapping>
<!--Servlet that checks hitting the area-->
<servlet>
<servlet-name>AreaCheck</servlet-name>
<servlet-class>App.Servlets.AreaCheckServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AreaCheck</servlet-name>
<url-pattern>/areaCheck</url-pattern>
</servlet-mapping>
此处仅显示相关代码。一个程序的逻辑看似奇怪,但不能改变,因为它是任务。
我该如何解决?
AreaCheckServlet 应该支持 POST 方法,以便您将 post 请求转发给它。 同样在 AreaCheckServlet 中实现 doPost