麻烦看一下练习,还有一个关于重定向的问题

来源: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方式发送?

http://img.mukewang.com/climg/5e55671908b60bd806590197.jpg

http://img.mukewang.com/climg/5e556719082ec4f507420361.jpg


写回答

1回答

好帮手慕小尤

2020-02-26

同学你好,1. 已实现练习,继续加油!

2. 当以post传值,则会使用HttpServletResponse的sendRedirect()进行重定向,而重定向时服务器会在Servlet中设置HTTP状态码为301以及Location标头返回给浏览器,浏览器收到这个标头以后会再一次使用GET方法请求重定向的URL,因此地址栏的URL会发生变化。所以第二次跳转是get方式。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

0

0 学习 · 9666 问题

查看课程

相似问题