500报错问题

500报错问题

老师好,课程中的代码将

String ua = request.getHeader("User-Agents");的User-Agent修改为User-Agents后会报错500;为什么我这边修改后为什么不会报错,而是返回null


package com.cn.imooc.servlet;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/uas")
public class UserAgentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");;//通知浏览器采用utf-8字符集去显示文本
        String url = request.getHeader("User-Agents");//获取请求头中的数据
        response.getWriter().println("<h1>字符串为:<h1>"+url);
        String out="";
//indexOf(String str): 返回指定字符str在字符串中(方法调用者)第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1
 
        if(url.toLowerCase().indexOf("windows nt")!=-1){
            out="<h1>我是pc端<h1>";
        }else if(url.toLowerCase().indexOf("iphone")!=-1 || url.toLowerCase().indexOf("android")!=-1){
            out="<h1>我是手机端<h1>";
        }/*else {
           out="<h1>没有找到的类型<h1>";
        }*/
        response.getWriter().println(out);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-12-07 11:16:44

同学你好,在同学的代码中,

response.getWriter().println("<h1>字符串为:<h1>" + url);

语句已经将响应进行了发送,后续代码中即使抛出异常,也不会对之前的响应产生影响。并且后续的

response.getWriter().println(out);

语句并没有得到正确的执行,同学可以将内容更换之后尝试一下。

如果想要复现课程中老师演示的效果,需要将

response.getWriter().println("<h1>字符串为:<h1>" + url);

放在if代码块的后面,这样可以在响应发送之前抛出异常,对响应产生影响。

祝学习愉快~

  • 提问者 小白0719 #1

    老师,那打个比方,假设一个servlet中有3个响应要发送,

    1.第一个响应正常发送,后面代码产生了异常,那么网页不会报错,会显示第一次响应内容?

    2.只有在第一个响应前代码产生了异常,网页才会报错?

    3.如果是这样 ,我们如何监控第一个响应后面产生的异常呢?


    2022-12-07 11:44:05
  • 好帮手慕小蓝 回复 提问者 小白0719 #2

    同学你好~

    1.一次请求只能获得一次响应,无法发送三个响应。

    2.响应正常发送之后,后续的异常不会影响之前的响应。

    3.只有在响应之前的异常,才会影响本次响应。

    4.响应之后的异常只能在后端代码中进行监控,无法在前端获取对应的信息。

    祝学习愉快~

    2022-12-07 13:08:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师