requestWebStageDay10

本文详细介绍了Servlet技术中的request对象及其使用方法,包括获取请求参数、处理请求转发和重定向等核心功能,并探讨了JSP技术的特点及其实现机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点: request对象:

    分析: eg: http://localhost/day101/row?username=xiaoming&password=123&hobby=smoking&hobby=drink

1.请求行:
    格式:
        请求方式 资源路径?参数名=参数值&参数名=参数值(get请求) 协议/版本
    例子: 
        GET /test?username=xiaoming&password=123&hobby=smoking&hobby=drink HTTP/1.1

        1)获取资源路径 (有用)
            request.getRequestURI();
        2)获取get请求的请求参数 并且字符串返回(无用)
            request.getQueryString();//例子 返回username=xiaoming&password=123&hobby=smoking&hobby=drink
        3)获取协议/版本 (基本无用)
            request.getProtcol()//返回 HTTP/1.1
        4)获取请求类型
            request.getMethod();//
        5)获取项目路径
            request.getContextPath()//一级重要
            只要是在代码中用到了项目地址 一定要使用该方法动态获取 不要自定义
        6)获取远程请求ip地址
            request.getRemoteAddr()//

2.请求头: 
    key/value的形式        
    String 请求头值=getHeader("请求的名字");//获取请求头-->重要
                了解:
            int getIntHeader("请求的名字");//int值
            long getDateHeader("请求的名字");//日期类型值

    Enumeration(集合) request.getHeaders();//获取多值的

    Enumeration(集合) request.getHeaderNames();//获取所有请求头的名字


    User-Agent:告知服务器 来访问的客户端是哪个牌子的浏览器
    referer:请求来源

3.请求体(post):请求头结束后隔一行就是请求体
    post请求体 放置请求参数
    http://localhost/day101/param?username=xiaoming&password=123&hobby=smoking&hobby=drink
    String 参数值 = getParameter("参数名")//返回请求参数值 返回单值参数
    String[] 多值参数 = getParameterValues("参数名")//返回请求参数值 返回多值参数
    Map<string,string[]> 所有参数=getParameterMap();

4.请求参数乱码问题:
    post请求参数乱码          
    因为浏览器在发送数据的时候,它会将中文进行utf-8编码
    但是服务器
        请求行资源路径(也就是get请求) 解码采用utf-8编码
        请求体中(post请求)采用iso-8859-1解码的 

        解决方案:告知服务器对post请求体中的数据用utf-8解码

        request.setCharacterEncoding("utf-8")//告知服务器对post请求体中数据采用utf-8 解码
    5.请求转发技术:
    dispatcher对象=request.getRequestDispatcher("/要找的servlet资源");
    dispatcher对象方法:
    forward(request,response);

    //request的属性操作
    getAttribute()
    setAttribute()
    removeAttribute()
    注意事项:
    有关属性的操作不可用在重定向中
    原因: request生命周期:
        1.每当请求 来的时候创建的
        2.请求结束 响应内容完了也就结束
6.jsp技术:
    java server pages 服务器页面
    特点:
    允许开发人员在jsp页面上 既可以写html代码 也可以写java代码
    怎么创建jsp:使用idea新建一个JSP
    发生了什么事:
    当访问一个jsp文件时候,服务器交给了jspservlet帮它处理,
    它首先去项目中找对应jsp文件,执行翻译过程,拼接字符串-->拼成了一段java代码
    执行编译 把java代码编译成class文件 调用它的方法 输出给浏览器内容

    jsp本质就是一个servlet

7.请求转发和重定向的区别:      
    1)请求次数:
        请求转发:1次
        重定向:2次 一次手动 一次自动

    2)地址栏问题:
        请求转发:不会变
        重定向:会变  变到最后一个位置

    3)谁的方法:
        请求转发:request.getrequestDispather("/").forward(request,response)
        重定向:response.sendRedirect("路径")
    4)路径:
        请求转发:request.getrequestDispather("/内部路径").forward(request,response)
        重定向:response.sendRedirect("路径")  可以走向任何地址
    5)属性操作:
        请求转发:可以使用
        重定向:不要用
  • 1.重定向的地址栏会发生变化,转发的地址栏不变.
  • 2.重定向两次请求两次响应,转发一次请求一次响应.
  • 3.重定向路径需要加工程名,转发的路径不需要加工程名.
  • 4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.

案例一: 完成注册流程:
需求:
访问服务器 访问注册页面 注册表单 让用户可以输入用户信息
点击提交 把信息提交到服务器 将信息变成数据 插入至用户表

步骤分析:
1.数据库 创建表
2.创建工程
1)导入jar包 (一定要把jar包拷贝一份到新建的项目中)
2)配置文件 (要用到c3p0-config.xml 放到src下面)
3)工具类(DataSourceUtil 创建QueryRunner对象时用到 DataSourceUtil.getDataSource())
4)三层结构(web,service,dao 各司其职)
3.逻辑部分:
1)前端页面
这里写图片描述
2)后端部分:
设置请求和响应的字符编码:
request.setCharacterEncoding(“utf-8”);//只对post有效
response.setContentType(“text/html;charset=utf-8”);
获取请求数据:遍历得到key&values
这里写图片描述
注意:(封装对象)
参数数量大于四个 封装对象(beanUtils封装 反射原理)
重定向到登录页面:
request.getRequestDispatcher(“/login.htm”).forward(request,response);

4.工具介绍:
    beanUtils 是apache提供的

beanUtils.populate(javaBean,map集合)

案例二 查询所有用户
需求:
访问某个servlet 查询数据库中所有用户
并且要求以table表格形式展示给用户

问题:
    返回数据 如果是个页面  拼接字符串比较麻烦 使用jsp

实现分析:
1.servlet部分:
调用service类中的findAll方法 查询所有用户 返回的是一个list集合 存放的是users
List users = service.findAll();
拿到users就要给用户显示table表格,但是需要用字符串拼接,麻烦 (用到请求转发 jsp技术)
使用request对象设置Attribute属性 key/value的形式 以便于后面获取时使用 getAttribute(“user”)
request.setAttribute(“users”,users);
将拿到的数据转发给jsp(底层也是一个servlet),帮忙拼接
request.getRequestDispatcher(“/xxx.jsp”).forward(request,response);
2.service调用dao层的方法findAll(),dao层负责与数据库交互查询用户请求的数据
3.jsp页面可以写html和java代码
用html语言构建一张表格
用java代码填充表格:
循环遍历拿到集合中的数据获取每一个user的属性值填充至表格

编程思路:数据准备跟数据展示相分离

    各司其职:
    servlet只负责接受请求,调用service 完成数据准备工作
    接下来servlet将请求转发给jsp,jsp负责展示数据

总结:
1.思维:
request是什么?
request是服务器创建的请求对象
request生命周期:
1)每当请求 来的时候创建的
2)请求结束 响应内容完了生命周期结束

请求转发技术是怎样和jsp结合的?
    在servlet中绑定请求转发路径:
    request.getRequestDispatcher("/xxx.jsp").forward(request,response);

2.代码:
    案例敲一遍
    重要:getContextPath()//动态获取项目路径
    请求转发:
        request.getrequestDispather("/").forward(request,response)
        request提供了一组xxxAttribute()方法
        //request的属性操作
        getAttribute()
        setAttribute()
        removeAttribute()
内容概要:本文档是关于基于Tecnomatix的废旧智能手机拆解产线建模与虚拟调试的毕业设计任务书。研究内容主要包括:分析废旧智能手机拆解工艺流程;学习并使用Tecnomatix软件搭建拆解产线的三维模型,包括设备、输送装置等;进行虚拟调试以模拟各种故障情况,并对结果进行分析提出优化建议。研究周期为16周,涵盖了文献调研、拆解实验、软件学习、建模、调试和论文撰写等阶段。文中还提供了Python代码来模拟部分关键流程,如拆解顺序分析、产线布局设计、虚拟调试过程、故障模拟与分析等,并实现了结果的可视化展示。 适合人群:本任务书适用于机械工程、工业自动化及相关专业的本科毕业生,尤其是那些对智能制造、生产线优化及虚拟调试感兴趣的学生。 使用场景及目标:①帮助学生掌握Tecnomatix软件的应用技能;②通过实际项目锻炼学生的系统建模和虚拟调试能力;③培养学生解决复杂工程问题的能力,提高其对废旧电子产品回收再利用的认识和技术水平;④为后续的研究或工作打下坚实的基础,比如从事智能工厂规划、生产线设计与优化等工作。 其他说明:虽然文中提供了部分Python代码用于模拟关键流程,但完整的产线建模仍需借助Tecnomatix商业软件完成。此外,为了更好地理解和应用这些内容,建议学生具备一定的编程基础(如Python),并熟悉相关领域的基础知识。
内容概要:本文档《Kotlin语言教程&案例之基础入门与核心应用》深入介绍了Kotlin这一现代编程语言的关键概念、核心技巧、应用场景及未来发展趋势。文档首先解析了Kotlin的核心概念,如空安全机制、扩展函数、数据类和协程等,强调了其简洁性、安全性和与Java的无缝交互。其次,通过类型推断和lambda表达式的实战讲解,展示了提升编程效率的方法。文档还列举了Kotlin在Android开发、后端服务、桌面应用和跨平台开发中的具体应用实例,特别是通过用户信息管理系统的代码案例,详细分析了数据类定义、扩展函数实现、协程处理异步查询以及密封类与when表达式的使用。最后展望了Kotlin的未来发展,包括多平台开发、与AI工具的集成以及在数据科学领域的潜力。; 适合人群:对编程有一定了解,尤其是对Java有基础,希望转向或深入了解Kotlin的开发者,以及对跨平台开发感兴趣的程序员。; 使用场景及目标:①学习Kotlin的核心概念,如空安全、扩展函数、数据类和协程等;②掌握提高编程效率的技巧,如类型推断和lambda表达式的使用;③理解Kotlin在不同应用场景下的实战案例,如Android开发、后端服务等;④探索Kotlin的未来发展方向,如多平台开发和与AI工具的集成。; 阅读建议:此资源不仅涵盖了Kotlin的基础理论,还包括大量实战案例,因此在学习过程中应结合实际代码进行练习,特别关注代码中的注释和逻辑,以便更好地理解和掌握Kotlin的特性和优势。
内容概要:该论文提出了一种针对超密集无线网络中移动性管理问题的非平稳在线学习方法,旨在解决传统优化方法在时变环境中无法实现长期最优性能的问题。文中主要介绍了MMBD/MMBSW算法,通过学习变化的吞吐量分布来解决频繁切换问题。理论分析和仿真结果显示,这些算法不仅在有限时间范围内能达到次线性遗憾性能,在无限时间范围内也有严格的遗憾界,并且优于3GPP协议,对实际超密集无线网络中常见的系统动态变化具有更强的鲁棒性。此外,文章还提供了详细的Python代码实现,包括算法的核心逻辑、仿真环境设置和主仿真函数,以及针对频繁切换、乒乓效应和切换失败问题的具体解决方案。 适用人群:通信工程领域的研究人员、无线网络优化工程师、机器学习爱好者以及对非平稳在线学习算法感兴趣的学者。 使用场景及目标:①研究和开发适用于超密集无线网络的高效移动性管理算法;②评估不同算法在处理频繁切换、乒乓效应和切换失败问题上的表现;③探索如何将移动性管理建模为在线学习问题,提高网络性能和用户体验。 其他说明:本文不仅提供了详细的算法实现和仿真代码,还深入分析了传统移动性管理协议的局限性以及在线学习方法的优势。对于希望深入了解非平稳在线学习在移动性管理中应用创新点的读者,本文提供了丰富的理论依据和技术细节。此外,文章还讨论了实际部署时需要考虑的因素,如计算复杂度、参数配置建议和与现有协议的集成方法。
内容概要:该论文针对电容型数字隔离器在高速传输下的可靠性和功耗问题,基于TSMC 180nm BCD工艺设计了一种全差分数字隔离器编解码电路。发送端采用施密特触发器滤波和三级电流匮乏型环形振荡器产生载波信号,通过D触发器实现输入信号与载波的同步混频。接收端设置前置放大器、偏置钳位电路和电平转换模块,解码电路通过RC时间常数将频率转换为电压进行解码。仿真结果表明,该设计在3.3-5V供电下可实现25Mbps传输速率,典型时延11ns,1Mbps和25Mbps下的动态功耗分别为2.1mA和2.8mA,具有较高的传输可靠性。此外,该设计通过创新的钳位电路和系统级优化,在工业级隔离芯片领域实现了突破性平衡,特别适合智能电表、工业PLC等需要长期可靠运行的场景。 适合人群:具备一定模拟电路和数字电路基础的研究人员、工程师,尤其是从事电力电子、工业自动化等领域工作的专业人员。 使用场景及目标:①研究电容型数字隔离器的编解码电路设计;②探索在不同工艺节点下的电路优化方案;③应用于智能电网、工业控制等领域的隔离通信系统设计;④评估并改进现有隔离器产品的性能和可靠性。 其他说明:该设计不仅在功耗、速度和可靠性方面取得了良好平衡,还通过创新的电路架构和严谨的仿真验证,为国产隔离芯片的发展提供了有价值的参考方案。论文还详细分析了与市场现有方案的对比,提出了潜在的改进方向和技术演进路线,旨在推动相关技术的进步和应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值