麻烦看一下练习,还有一个关于重定向的问题
来源: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方式。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题