Javaweb-Servlet

什么是Servlet

  1. javaee规范之一,规范就是接口

  1. Servlet是javaweb三大组件之一,分别是:Servlet程序,Filter过滤器,Listener监听器

  1. Servlet是运行在服务器上的一个java小程序,可以接受客户端发送过来的请求,并响应数据给客户端

手动实现Servlet接口

  1. 编写一个类去实现Servlet接口

  1. 实现service方法,处理请求响应数据

  1. 到web.xml中配置servlet程序的访问地址

  1. servlet标签给tomcat配置servlet程序

  1. servlet-name标签:给Servlet标签起个别名

  1. servlet-class:Servlet程序的全类名

  1. servlet-mapping:给servlet程序配置访问地址

  1. servlet-name:告诉服务器当前配置的地址给哪个servlet程序使用,基本就和前面的name相同

  1. url-pattern:配置访问地址

  1. /(斜杠)在服务器解析的时候,表示为http://ip:port/工程路径

  1. /hello表示:http://ip:port/工程路径/hello

service方法是专门同来处理请求和响应的。

常见错误:
  • url-pattern中路径没有以斜杠打头

url地址如何定位到Servlet程序去访问

Servlet生命周期

  1. 执行Servlet构造器方法

  1. 执行init初始化方法

第一、二步,是在第一次访问的时候创建servlet程序会调用

  1. 执行service方法

第三步,每次访问都会调用

  1. 执行destory销毁方法

第四步,在web工程停止的时候调用

GET和POST请求的分发处理

@Override

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

System.out.println("service被访问了");

HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;

String method = httpServletRequest.getMethod();

if (method.equals("GET")) {

doGET();

} else if (method.equals("POST")) {

doPOST();

}

}

通过继承HttpServlet实现Servlet程序

一般在实际项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序

  1. 编写一个类去继承HttpServlet类

  1. 根据业务需要重写方法

  1. 到web.xml中的配置servlet程序的访问地址

使用IDEA创建Servlet程序

Servelt类的继承体系

ServletConfig类

从类名上来看,就知道是Servlet程序的配置信息类

Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig

每个Servlet的ServletConfig都是独立的

三大作用
  1. 可以获取Servlet程序的别名servlet-name的值

  1. 获取初始化参数init-param

  1. 获取ServletContext对象

web.xml配置

<init-param>

<param-name>username</param-name>

<param-value>root</param-value>

</init-param>

方法:

System.out.println("HelloServlet的别名是" + servletConfig.getServletName());

System.out.println("初始化参数username的值" + servletConfig.getInitParameter("username"));

System.out.println("初始化参数url的值" + servletConfig.getInitParameter("url"));

System.out.println(servletConfig.getServletContext());

ServletContext类

  1. ServletContext是一个接口,它表示Servlet上下文对象

  1. 一个web工程只有一个ServletContext对象实例

  1. ServletContext对象是一个域对象

  1. ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁

什么是域对象?

域对象,是可以像Map一样存取数据的对象,叫做域对象。

这里的域是存取数据的操作范围(整个web工程)。

存数据

取数据

删除数据

Map

put()

get()

remove()

域对象

setAttribute()

getAttribute()

removeAttribute()

ServletContext类的四个作用
  1. 获取web.xml配置中的上下文参数context-param

ServletContext context = getServletConfig().getServletContext();

String username = context.getInitParameter("username");

System.out.println("contextParam的值是" + username);

System.out.println("password的值是"+context.getInitParameter("password"));

  1. contextparam属于整个web工程

  1. init-param只能是servlet-context对象获取的

  1. 获取当前的工程路径,格式:/工程路径

System.out.println("工程路径:" + context.getContextPath());

  1. 获取工程部署后在服务器盘上的绝对路径

System.out.println("工程部署的路径:"+context.getRealPath("/"));

  1. 为什么是"/"?

  1. 因为服务器解析地址是http://ip:port/工程名/

4.像Map一样存储数据

ServletContext context = getServletContext();

context.setAttribute("key1", "value1");

System.out.println("key:" + context.getAttribute("key1"));

什么是HTTP协议?
什么是HTTP协议?

就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫HTTP协议。

HTTP协议中的数据又叫报文。

请求的HTTP协议格式
  1. GET

  1. 请求行

  1. 请求的方式

  1. 请求的资源路径[+?+请求参数]

  1. 请求的协议和版本号(HTTP/1.1)

  1. 请求头

  1. key:value

  1. 常见请求头:

  1. Accept:告诉服务器客户端可以接受的类型

  1. Accept-Language:告诉服务器客户端可以接受的语言类型

  1. zh_CN,en_US

  1. User-Agent:用户代理

  1. Accept-Encoding:客户端可以接受的数据

  1. Host:请求的服务器ip和端口号

  1. Connection:表示当前连接如何处理

  1. Keep-Alive:告诉服务器传回数据不要马上关闭,保持一小段连接

  1. Closed

  1. POST

  1. 请求行

  1. 同上

  1. 请求头

  1. key:value

  1. 空行

  1. 请求体--->就是发送给服务器的数据

  1. Accept:告诉服务器客户端可以接受的类型

  1. Accept-Language:告诉服务器客户端可以接受的语言类型

  1. zh_CN,en_US

  1. Referer:表示请求发起时,浏览器地址栏中的地址

  1. User-Agent:用户代理

  1. Content-Type:表示发送数据的类型

  1. Content-Length:表示发送的数据的长度

  1. Cache-Control:表示如何控制缓存 no-cache不缓存

哪些时GET哪些是POST
  • GET请求

  • from标签 method=get

  • a标签

  • link标签引入css

  • Script标签引入js文件

  • img标签引入图片

  • iframe引入html页面

  • 在浏览器地址栏中输入地址然后回车

  • POST请求

  • form标签 method=post

响应的HTTP协议格式
  1. 响应行

  1. 响应的协议和版本号 HTTP/1.1

  1. 响应状态码

  1. 响应状态描述符

  1. 响应头

  1. key:value 不同的响应头有其不同的涵义

<空行>

  1. 响应体----->回传给客户端是数据

常见的响应码
  • 200

  • 请求成功

  • 302

  • 表示请求重定向

  • 404

  • 表示请求服务器已经收到了,但是数据不存在(请求地址错误)

  • 500

  • 表示服务器已经收到请求,但是服务器代码错误

MIME类型说明

HTTP中的协议数据类型

HttpServletRequest类

有什么用?

每次只要有请求进入Tomcat服务器,Tomcat就会把请求过来的HTPP协议解析好封装到Request对象中。然后传递到service方法(doGET和doPOST中)。可以通过HttpServletRequest类获取请求的信息。

常用方法
  • getRequestURI() 获取请求的资源路径

  • getRequestURL() 统一资源定位符(绝对路径)

  • getRemoteHost() 客户端ip地址

  • getHeader() 请求头

  • getParameter() 请求的参数

  • getParameterValues() 请求的参数(多个值的时候使用)

  • getMethod() 请求的方式GET或POST

  • setAttribute(key,value) 设置域数据

  • getAttribute(key) 获取域数据

  • getRequestDispatcher() 获取请求转发对象

请求的转发

请求的转发是指,服务器收到请求后,从一次资源跳转到另一个资源

主要实现:

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet2");

requestDispatcher.forward(request, response);

特点:

  1. 浏览器地址栏没有变化

  1. 他们是一次请求

  1. 他们共享Request中的域数据

  1. 可以转发到WEB-INF目录下

  1. 不能出工程

Base标签的作用

一般base标签写在title下面

可以设置页面相对路径工作参照的地址

href就是地址

Web中的相对路径和绝对路径

  • 相对路径

  • 绝对路径

web中/斜杠的不同意义

在web中/斜杠是一种绝对路径

/斜杠 如果被浏览器解析,得到的地址是:http://ip:port/

<a href="/">斜杠</a>

/斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径

1、<url-pattern>/servlet1</url-pattern>

2、servletContext.getRealPath("/")

3、request.getRequestDispatcher("/")

特殊情况:response.sendRediect("/"); 把斜杠发送给浏览器解析。得到http://ip:port/

HttpServletResponse类的作用

和HttpServletRequest类一样,每次请求进来,tomcat都会创建一个Response对象传递给Serlvet去使用。

两个输出流的说明

字节流 getOutputStream(); 常用于下载(传递二进制数据)

字符流 getWriter() ; 常用于回传字符串(常用)

两个流同时只能使用一个。否则会报错

乱码解决

设置服务器编码:response.setCharacterEncoding("utf-8");

设置请求头:response.setHeader("Content-Type","text/html;charset=UTF8");

设置浏览器编码:response.setContentType("text/html; charset=utf-8");

请求重定向

//有义务告诉客户端响应码302

response.setStatus(302);

response.setHeader("Location", "http://localhost:8080/Servlet_07/response2");

特点:
  1. 浏览器地址栏会发生变化

  1. 两次请求

  1. 不共享Request域中数据(因为不是一个请求)

  1. 不能访问WEB-INF下的资源

  1. 可以访问工程外的资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只桃子z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值