Servelet学习-24.9.3


前言

九月,加油


一、Servelet概述

Servelet: server applet

 servelet就是一个接口,定义了Java类被浏览器访问到的规则,内部一共包含了五个抽象方法:

  • destory():当服务器正常关闭时,销毁Servlet对象调用一次,仅调用一次
  • getServeletConfig():获取ServletConfig对象(Servlet的配置对象)
  • getServeletInfo():获取Servlet的一些信息,版本,作者等等
  • init(ServeletConfig config) :在Servlet创建时调用一次,仅调用一次
  • service(ServeletRequest req,ServeletResponse res):每次请求服务都会调用一次,调用多次

1.1 简单入门:

  1.创建项目
  2.定义一个类,实现Servelet接口
  3.实现接口中的抽象方法
  4.配置Servlet(即在xml文件中,配置实现类全面名到名称的映射,以及该名称带url路径的映射)
在这里插入图片描述

例如:http://localhost:8080/pro1/demo1

  • localhost:8080 ip地址+端口号
  • /pro1 项目的对外访问路径
  • /demo1 被访问类的对外访问路径

大致的一个过程是这样的:浏览器首先通过localhost访问到对应的主机,然后尝试请求连接该主机的8080端口以获取在该端口上运行的服务器服务(tomcat服务器会默认占用8080端口),tomcat会根据项目路径进行检索,找到部署在服务器上的对应的项目。然后根据具体的资源路径,到项目中的xml文件中检索是否存在url-pattern的值为/demo1,如果存在,获取到这个资源路径所对应的< servelet-name >标签体内容,然后再根据查询到的servlet-name检索该name对应的类文件的权限名。tomcat根据得到的全限名加载相应的字节码文件到内存中。然后创建一个类的实例(也就是一个Servlet对象),当处理请求到达时,服务器会将请求转交给类的实例调用类中实现的service方法(Servlet接口所规定的方法)来进行处理。

2.2 生命周期

  • 1.被创建:执行init方法,只执行一次
  • Servlet默认情况下在第一次被访问时创建,如果需要也可以通过配置来更改Servlet创建的时机
  • 由于init方法只会执行执行一次,说明Servlet在内存中只存在一个对象,即单例的。所以在多个用户同时访问时可能会存在安全问题。所以尽量不要在Servlet中定义成员变量,及时定义了成员变量也尽可能不对其进行修改操作。
  • 2.提供服务:执行service方法,每次请求服务都会执行一次
  • 3.被销毁:执行destory方法,当服务器正常关闭,销毁Servlet对象时会执行一次

tips:基础概念回顾

  • 软件架构

C/S : 客户端/服务器模式

B/S : 浏览器/服务器模式

  • 资源分类

静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以 直接被浏览器所解析。如:html,css,JavaScript
动态资源:每个用户访问相同的资源后,得到的结果可能是不一样的,称为动态资源。动态资源在访问时,需要先转换为静态资源,然后再返回给浏览器解析。如:servlet/jsp,php,asp…

二、HttpServletRequest对象

主要用来接收客户端发送过来的请求信息,例如请求方法,请求协议版本,请求参数等等,这些信息都会被Tomcat封装到request对象中进行传递,后端所需要做的就是从中取出数据,然后进行分析处理。

2.1 常用方法

在这里插入图片描述

http://localhost:8080/sr02/s01?uname=admin&upwd=123456&hobby=sing&hobby=dance

/*常用方法 */
//获取请求时的完整路径(从http开始,到"?"前面结束)
String url = request.getRequestURL()+ "";
System.out.println("获取请求时的完整路径:+url);	//http://localhost:8080/sr02/s01

//获取请求时的部分路径(从项目的站点名开始,到"?"前面结束)
String uri =request.getRequestURI();
System.out.println("获取请求时的部分路径:"+uri);	///sr02/s01

//获取请求时的参数字符串 (从"?”后面开始,到最后的字符串)
String queryString=request.getQueryString();
System.out.println("获取请求时的参数字符串:"+ queryString);	//uname=admin

//获取请求方式(主要是GET和POST)
String method = request.getMethod();
System.out.println("获取请求方式:+ method);

//获取当前协议版本
String prototol = request.getProtocol();
System.out.println("获取当前协议版本:"+ prototol);

//获取项目的站点名(项目对外访问路径)
String webapp =request.getcontextPath();	
System.out.println("获取项目的站点名’+webapp);	///sr02

//重点:获取指定名称的参数值,返回字符串
String name = request.getParameter("uname");	//名称即请求中的参数名称,要保持一致,admin
String upwd = request.getParameter("upwd");	//123456

//重点:获取指定名称的参数的所有参数值,返回字符串数组(用于复选框传值)
String hobbys[] = request.getParameterValues("hobby");
//判断数组是否为空
if(hobbys != null && hobbys.length() > 0){
	for(String s:hobbys){
		sout(s);	//sing 
					//dance
	}
}

三、HttpServeletResponse对象

HttpServeletResponse的主要功能用于服务器对客户端的请求进行响应,将Web服务器处理后的结果返回给客户端。service()方法中形参接收的是HttpServeletResponse接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头、发送状态码的方法。

接收到客户端请求后,可以通过HttpServeletResponse对象直接进行响应,响应时需要获取输出流。有两种形式:

  • getWriter() 获取字符流(只能响应回字符)
PrintWriter writer = response.getWriter();
writer.write("Hello");
  • getOutputStream() 获取字节流(能响应一切数据)
ServletOutputStream out = response.getOutputStream();
out.write("Hello".getBytes());

响应回的数据到客户端被解析。但是两者不能同时使用,因为response对象只有一个。

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值