JavaWeb(3)

1.重定向

response是专门给客户端相应数据的响应对象.
Http协议规定:响应数据也要分成三部分:
响应行,响应头,响应体

功能:
public void setStatus(int sc);
    //200:请求成功
    //302:请求重定向
    //404:访问的资源不存在
    //500:服务器内部错误
public void setHeader(String name,String value);
    //设置响应头信息,name表示属性名,value表示属性值.
    //响应重定向的路径
    //response.setHeader("location","http://www.itcast.cn");
重定向的原理步骤:

1.1浏览器访问Servlet1,但是该请求Servlet实现不了,想交给别的Servlet对象来实现.
1.2在Servlet1中完成设置
A:设置状态码302,通知浏览器找其他资源.
response.setStatus(302);
B:设置响应头,高数浏览器访问新资源的路径.
response.setHeader("location","/项目名/servlet名");
1.3浏览器识别服务器返回的状态码.
马上准备访问新资源
1.4浏览器向新资源(新的Servlet对象)发出请求.
1.5新的Servlet对象响应浏览器的请求.

重定向的实现
    方式一:  分解式
        //1) 响应状态码.
        response.setStatus(302);
        //2) 响应重定向的路径
        response.setHeader("location","http://www.itcast.cn");

    方式二: 合并式
        response.sendRedirect("http://www.itcast.cn");
重定向和请求转发的区别:

2.1相对于浏览器而言,是几次请求几次响应?
重定向:n次请求,n次响应
请求转发:一次请求,一次响应

2.2浏览器地址和窗体内容是否一致?
重定向:一致
请求转发:不一致

2.3页面跳转是在服务器内部,还是在服务器外部?
重定向:可以在服务器内部,也可以在服务器外部
请求转发:只能在服务器内部

2.4关于是否可以跳转项目外部的路径
重定向:可以. response.sendRedirect("/项目名/servlet名");项目名没有规定死,所以可以访问外部路径
请求转发:不可以,request.getRequestDispatcher("/servlet名").forward(request,response);
浏览器已经自动定位到项目名了,所以只能访问内部路径了

2.5如果要将request当做容器,谁更合适?
重定向: 不合适
请求转发: 更合适

页面定时刷新到新网页

应用场景:
您访问的资源不存在,5s后跳转到首页.
支付成功,3s后跳转到首页

实现方式:
通过设置refresh响应头信息来完成这个功能.

格式:
        response.setHeader("refresh","秒数;url=网址");
        
    例如:
        response.setHeader("refresh","5;url=http://www.itcast.cn");
向浏览器输出中文

应用场景:
浏览器现实的内容,下载文件等.

response: //以流的形式, 将内容输出给浏览器.
        response.getWriter();       //获取响应体的字符输出流.
        response.getOutputStream(); //获取响应体的字节输出流.

    注意:
        1) 字符流和字节流不能同时使用.
        2) 复制文件建议用: 字节流.  
           手动生成响应内容建议用: 字符流.
        3) 不需要关流, tomcat会自动调用close(),flush()方法.

//方式一: 字符流, 合并式     //推荐使用
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("你们真的很棒!");

//方式二: 
        response.getOutputStream().write("你们真的很棒!".getBytes("gbk"));
EL表达式:

EL:Expression Language(表达语言的意思),是为了使JSP写起来更加简单.

作用:
快速获取域容器中的数据(request容器,context容器).

格式:
${域对象.类名.属性名}

eg: ${requestScope.product.name}

登录案例
准备:
        创建index.jsp,login.jsp
        分层建包,web层,service层,dao层,domain包,utils包
        导jar包,引入jdbcUtils工具类
        创建User实体类
实现:
        在web层创建LoginServlet
        1.设置编码
            request.setCharacterEncoding("utf-8");
       
        2.接收参数
            request.getParameter("");
            也可以使用request.getParameterMap();接收

        3.new一个User对象

        4.使用BeanUtils将接收到的map值封装为User对象
              BeanUtils.populater(user,map);

        5.将User对象传递到service层
              UserService us = new UserService();
              boolean flag = us.isLogin(user);
            (这里返回值为布尔类型,如果返回true,就证明登录成功)

        (service层)
        6.将User对象传递到dao层
            UserDao ud = new UserDao();
            User us = ud.islog(user);
            (这里返回值为User对象,所以要返回web层就需判断User对象是否为空)
            return us != null;
            (应为返回值类型为布尔类型,所以如果us为空,null != null 是false,
            如果us不为空,us != null 是true)

        (dao层)
        7.使用jdbcUtils工具类获取连接池
        QueryRunner qr = new QueryRunner (jdbcUtils.getDateSource());
        创建SQL语句
        String sql = "select * from users where username =? and password = ?;";
        使用BeanHandler将查询到的数据封装为User对象 并返回
        return qr.query(sql, new BeanHandler<>(User.class),user.getUsername,user.getPassword);

        8.dao层的返回值将一层一层返回到web层
            现在判断web层的flag
            if(flag){
                如果flag为true,页面重定向到index.jsp页面
            }else{
                如果flag为false,页面请求转发到login.jsp页面
            }
登录案例分析.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,635评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,543评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,083评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,640评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,640评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,262评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,833评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,736评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,280评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,369评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,503评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,870评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,340评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,460评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,909评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,512评论 2 359

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,699评论 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,435评论 1 92
  • Web应用程序 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。Inte...
    陈先森mansplain阅读 2,374评论 1 4
  • Servlet:Sun公司制订的一种用来扩展Web服务器功能的组件规范。当浏览器将请求发送给Web服务器(比如:a...
    南山伐木阅读 587评论 0 4
  • 课前音乐 非常重要的王朝 关注哪个朝代,视频中对王朝评价 生列举 师,两位皇帝 文,和 请生找哪些史实证明文帝的功...
    雅客坤坤阅读 311评论 0 0