day17-Servlet06( 二 )


  • 浏览器地址会发生变化,本质上是两次http请求
  • 不能共享Request域中的数据,本质是两次http请求,因此会产生两个httpServletRequest对象
  • 不能重定向到/WEB-INF下的资源
  • 可以重定向到Web工程之外的资源,比如到 www.baidu.com
  • 重定向有两种方式,推荐使用第一种
    day17-Servlet06

    文章插图
    day17-Servlet06

    文章插图
  • 动态获取到application context(即Tomcat中配置的web应用项目名称)
    day17-Servlet06

    文章插图
    //动态获取到application contextString contextPath = getServletContext().getContextPath();//contextPath =>/servlet_demoresponse.sendRedirect(contextPath+"/downServletNew");
  • 15.3.4练习
    day17-Servlet06

    文章插图
    day17-Servlet06

    文章插图
    1. 编写一个MyPayServlet,能够接收到提交的数据
    2. 编写一个简单的html页面pay.html
    3. 如果支付金额大于100,则重定向到payok.html,否则重定向到原来的pay.ok
    WebUtils:
    package com.li.servlet.response.homework;//编写一个String-->int的方法,并处理可能的异常public class WebUtils {public static int parseString(String str) {int num = 0;try {//try-catch快捷键:ctrl+alt+tnum = Integer.parseInt(str);} catch (NumberFormatException e) {//这个异常不会throw给TomcatSystem.out.println("输入的str格式不正确...");//如果输入的格式不正确,num的值还是0}return num;}}MyPayServlet:
    package com.li.servlet.response.homework;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.*;import java.io.IOException;@WebServlet(urlPatterns = {"/myPayServlet"})public class MyPayServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//得到金额String moneyCount = request.getParameter("moneyCount");//转成int//处理一下异常int i = WebUtils.parseString(moneyCount);if (i > 100) {//重定向到payok.htmlresponse.sendRedirect(getServletContext().getContextPath() + "/payok.html");} else {//重定向到pay.htmlresponse.sendRedirect(getServletContext().getContextPath() + "/pay.html");}}}pay.html:
    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>支付页面</title></head><body><h1>支付页面</h1><!--注意:这里action="/servlet_demo/myPayServlet"的第一个斜杠/被浏览器解析成浏览器当前地址栏的主机--><!--什么时候加上web应用名主要看 / 是服务器还是浏览器来解析如果是浏览器来解析就要加上web工程名如果是服务器来解析,就不需要加(例如请求转发)--><form action="/servlet_demo/myPayServlet" method="post">用户编号:<input type="text" name="userId"/><br/>支付金额:<input type="text" name="moneyCount"/><br/><input type="submit" value="https://www.huyubaike.com/biancheng/点击支付"></form></body></html>payok.html:
    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>支付成功</title></head><body><h1>恭喜你,支付成功~</h1></body></html>
    day17-Servlet06

    文章插图
    【day17-Servlet06】

    推荐阅读