麻烦看一下练习,还有一个关于重定向的问题
来源:2-6 自由编程
weixin_慕勒8187086
2020-02-26 02:30:02
html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> function checkNum(){ var num = document.getElementById("num").value; var flag = true; if(num < 1 || num > 100){ alert("Please input the num between 1 and 100"); flag = false; } return flag; } </script> </head> <body> <form action="/Servlet_JSP_Adv/getsum" method="get" onsubmit="return checkNum()"> <input type="number" id="num" name="num" placeholder="The num between 1 and 100"/> <input type="submit" value="Get the sum"/> </form> </body> </html>
存储总和的servlet
package pers.hy.servlet; 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; /** * Servlet implementation class GetNum */ @WebServlet("/getsum") public class GetSum extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public GetSum() { super(); // TODO Auto-generated constructor stub } /* private int isNumBetween1To100(String str) { int result = -1; String s = str.trim(); if(s.chars().allMatch(Character::isDigit)) { result = Integer.parseInt(s); if(result<1 || result >100) { result = -1; } } return result; } */ /** * Get the sum between 1 to the num * @param num * @return */ private int getSumOfNum(int num) { int sum = 0; for(int i = 1; i <= num; i++) { sum +=i; } return sum; } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int num = Integer.parseInt((request.getParameter("num"))); int sum = getSumOfNum(num); request.setAttribute("sum", sum); request.setAttribute("num", num); request.getRequestDispatcher("/showsum").forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.sendRedirect("/Servlet_JSP_Adv/showsum"); } }
显示数据的servlet
package pers.hy.servlet; 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; /** * Servlet implementation class ShowSum */ @WebServlet("/showsum") public class ShowSum extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ShowSum() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html"); response.getWriter().printf("<h1>The sum between 1 and %d is %d!</h1><br>This is get", request.getAttribute("num"), request.getAttribute("sum")); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // doGet(request, response); // response.getWriter().println(request.getAttribute("sum")); response.getWriter().println("This is the Post"); } }
还有一个关于重定向的问题, 为什么重定向后,就算第一次request用的是post方式,第二次请求还是以get方式发送,而不是以post方式发送?
1回答
好帮手慕小尤
2020-02-26
同学你好,1. 已实现练习,继续加油!
2. 当以post传值,则会使用HttpServletResponse的sendRedirect()进行重定向,而重定向时服务器会在Servlet中设置HTTP状态码为301以及Location标头返回给浏览器,浏览器收到这个标头以后会再一次使用GET方法请求重定向的URL,因此地址栏的URL会发生变化。所以第二次跳转是get方式。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题