servlet

本文详细介绍Servlet的基本概念、创建过程及核心API使用方法,并对比请求转发与重定向的区别。

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

1).Servlet简介
2).Servlet框架
3).编写Servlet的第一杯咖啡
4).掌握Servlet的生命周期
5).掌握HttpServletRequest和HttpServletResponse的用法
6).掌握Servlet中两种跳转方式q22
7).掌握Servlet读取初始化参数
8).掌握Servlet读取上下文参数
9).掌握Servlet常见API的使用
1、Servlet简介
1).Servlet(Server Applet):是java编写的服务器端程序(服务器端的应用小程序);
2).通过Web容器(Container)的  加载、实例化、初始化,受到容器管理的才得以成为一个Servlet。
3).Servlet的生命是由  服务器  决定的。
4).了解Servlet优点
   直接和服务器交互,在多个程序间共享数据
5)作用:可以做页面,可以处理请求
2、Servlet框架--查阅API
3、
1).创建Servlet
步骤:
(1).创建Dynamic Web Project项目
(2).在src下new Servlet
       1).指定servlet所在的包,存放所有的servlet(com.dre.controller/action)
       2).指定setvlet的名字  (HelloAction)
       3).指定servlet的url mappings    (/hello.action)-命名时和servlet名相似
       4).finish后会在servlet中出现@WebServlet("/hello.action")或
   在web.xml中手动加上配置
    <servlet>
           <servlet-name>hello</servlet-name>
           <servlet-class>com.dre.servlet.HelloAction</servlet-class>
             </servlet>
             <servlet-mapping>
          <servlet-name>hello</servlet-name>
          <url-pattern>/hello.action</url-pattern>
             </servlet-mapping>
(3).在HelloAction类的doGet()方法或doPost()方法中编写代码。
       (servlet可以做页面,可以处理请求)
(4).将web project部署至tomcat服务器中【查看服务器中的项目】
(5).运行tomcat服务器,确保运行无误
(6).在浏览器上访问http://localhost:8080/项目名/hello.action
      最终在浏览器上出现Hello Servlet.   
      这就完成了请求和响应的流程,这属于一次请求。
注意:修改了servlet中的内容,必须把服务器进行重新启动。
               servlet中的内容才会生效。
(7)
<!--若在.java中不用注解  @WebServlet("/hello.action"),就要在web.xml中进行如下的配置 -->
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.dre.controller.HelloAction</servlet-class>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello.action</url-pattern>
  </servlet-mapping>
(8)
      1、   //解决中文乱码
      protected void doPost(){
 request.setCharacterEncoding("utf-8");
 response.setCharacterEncoding("utf-8");
          response.setContentType("text/html;charset=utf-8");
      }
     2、//在写用户名时出现的乱码问题
      protected void doPost(){
             String name=request.getParameter("username");
             name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
             String psw = request.getParameter("password");
             System.out.println("姓名:"+name+"\t"+"密码:"+psw);
      }
4、Servlet的生命周期【重点掌握,面试题】
第一步: 服务器加载和实例化
第二步: 初始化(一般不需要写)
第三步: 调用Servlet方法,处理请求
第四步: 当服务器关闭的时候,Servlet生命结束
注意:第一步,第二步只会执行一次
面试题:HttpServletRequest和HttpServletResponse对象是由 服务器  创建的。
        只要是对象,都是由服务器创建
5、HttpServletRequest和HttpServletResponse的用法
1).HttpServletRequest   request对象
(1).获得表单提交的参数值
  例如获得用户名和密码:
  String name=request.getParameter("username"); //获得用户名   
  name=new String(name.getBytes("ISO-8859-1"),"UTF-8");//处理用户名中文乱码
  String psw = request.getParameter("password");//获得密码
(2).设置请求的编码格式(处理整个页面的中文乱码)
例如:下面的第一句,但是三句通常会一起写
     request.setCharacterEncoding("utf-8");
     response.setCharacterEncoding("utf-8");
     response.setContentType("text/html;charset=utf-8");
(3).往请求域中添加值(页面跳转())
请求转发:
    注意:请求页面跳转:因为发生在服务器端,所以不管传不传值,都能接收到username
  一:跳转加传值:
     request.getRequestDispatcher("success.action?username="+name).forward(request, response);
    接收:
     out.println("<h1>"+request.getParameter("username")+",登陆成功!"+"</h1>");
  二:
    只跳转
     request.getRequestDispatcher("success.action").forward(request, response);
    接收1:
    out.println("<h1>"+request.getParameter("username")+",登陆成功!"+"</h1>");、
    或2:String name=request.getParameter("username");
        name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
        out.println(name);
  三:传值:
    request.setAttribute("name", name);
    接收:
    request.getAttribute("name");
重定向:
    一:
     只跳转:response.sendRedirect("success.action")
   二:
     传值的时候只能用?传值:response.sendRedirect("success.action?username="+name);
                接收:request.getParameter("username")
(4).得到请求域中的值(即可以在某个页面中显示“**,登陆成功!”)
         
    即上面中的两种方法的步骤(2)都是得到请求域中的值(用户名),即在最终页面上显示(用户名,登陆成功)

注意: 上面(3)和(4):请求域中的值只在一次请求中有效。
2).HttpServletResponse response对象
(1).给客户端响应一个页面
(2).设置响应时的编码格式
(3).处理中文乱码
       浏览器页面编码格式设置utf-8
          response.setContentType("text/html;charset=utf-8");
(4)实现页面跳转(重定向)
在LoginAction页面中:response.sendRedirect("success.action");
   这是实现跳转到页面SuccessAction 中
总结:处理中文乱码
1).浏览器页面编码格式设置utf-8
     response.setContentType("text/html;charset=utf-8");
2).request请求过程中出现乱码
     request.setCharacterEncoding("utf-8");
3).response响应过程中出现乱码
     response.setCharacterEncoding("utf-8");
4)若是某个参数如用户名出现乱码
      String sname = request.getParameter("name") ;  
      String name = new String(sname.getBytes("ISO8859_1"),"UTF-8") ;  
6、Servlet中两种跳转方式的区别(请求转发(forward)和重定向(redirect)的区别)【面试题】
 例如有三个界面:顺序是:Login.html,LoginAction(login.action),SuccessAction(success.action)
1). 浏览器地址栏的变化
       redirect:?地址栏会显示转向后的地址,显示的是 success.action
       forward:?地址栏不会显示转向后的地址 显示的是login.action
2).安全性
       redirect:安全较低
       forward: 更安全
3). 实际发生的位置不一样
       redirect:发生在浏览器端
       forward:发生在服务器端
4).发送的请求数
      redirect: 两个请求
      forward:一个请求
5).效率
      redirect:效率较低
      forward:效率高
6). 能够去URL 范围不一样(用的环境)
       redirect:可以跳转到其他的项目
       forward:只能在本项目中跳转
7、Servlet读取初始化参数-ServletConfig
 <servlet>
    <init-param>
   <param-name>username</param-name>
   <param-value>admin</param-value>
     </init-param>
  </servlet>
  通过servlet的  config.getInitParameter()  得到参数值
8、Servlet读取上下文参数-ServletContext
       <context-param>
     <param-name>password</param-name>
     <param-value>888</param-value>
       </context-param>
      通过servlet的?获取ServletContext对象,
      然后通过该对象的?得到参数值。
 9、Servlet常见API
 HttpServletRequest request
  getRequestURI():获得发出请求字符串的客户端地址,不包括请求的参数
  getMethod(): 获得客户端向服务器端传送数据的方法,如get,post
 getRequestURL():获得发出请求字符串的客户端地址
 getRealPath(): 返回当前请求文件的绝对路径
 getServletPath(): 
 getRemoteAddr():获取客户端的IP地址
 getRemoteHost():?
 getServerName():?
 getServerPort():?
 request.getCookies():获取客户端保存的Cookie数据
内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值