Servlet学习记录

Servlet介绍

Servlet是Server与Applet的缩写,是服务端小程序的意思。使用Java语言编写的服务器端程序,可以生成动态的Web页,Servlet主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准来开发的类。是Sun公司提供的一门用于开发动态Web资源的技术。(白话文:要实现web开发,需要实现Servlet标准)
Servlet本质上也是Java类,但是要遵循Servlet规范进行编写,没有main()方法,它的创建、使用和销毁都由Servlet容器进行管理。
提供了Servlet功能的服务器,叫做Servlet容器,常见的容器譬如:Tomcat、Jetty、WebLogic Server、WebSphere、JBoss等。

实现Servlet


/**
*实现Servlet
*1.创建普通的Java类(无需main方法)
*2.继承HttpServlet类(或GenericServlet类、Servlet接口)
*3.重写service()方法,用来处理请求。(doGet\doPost)
*4.设置@WebServlet()注解,指定访问路径。("/url")
*/

Servlet生命周期

Servlet生命周期指的是,Servlet容器何时创建Servlet实例、何时调用其方法进行请求的处理、何时销毁其实例的过程。

1.实例和初始化(系统自动调用,只执行一次)
当请求到达容器时,容器查找该servlet对象是否存在,如果不存在,则会创建实例并且进行初始化。

init();//初始化方法

2.就绪/调用/服务阶段
有请求到达Servlet容器,它会调用servlet对象的service()方法处理请求。该方法在整个生命周期中可呗多次调用。并且HttpServlet的service()方法,会根据请求方式来调用doGet()或者doPost()方法。这俩个个方法默认情况下都会抛出异常,需要子类去override。

service();//处理请求方法
doGet();
doPost();

3.销毁(系统自动调用,只执行一次)
当servlet容器关闭时(应用程序停止),会将程序中的servlet实例进行销毁。

destory();//销毁方法

简单总结

1.Web Client向Servlet容器(Tomcat)发出Http请求
2.Servlet容器接收 Web Client 的请求
3.Servlet容器创建一个HttpServletRequest对象,将Web Client请求的信息封装到这个对象中
4.Servlet容器创建一个HttpServletResponse对象
5.Servlet容器调用HttpServlet对象service方法,把Request与Response作为参数,传给HttpServlet
6.HttpServlet调用HttpServletRequest对象的有关方法,获取Http请求信息

HttpServeltRequest对象

介绍

该对象主要用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等属于客户端发来的信息,service()方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要用在HTTP协议上,该对象是由Servlet容器封装好传递过来的。
该对象直接在service()方法中由容器传入过来。

常用方法

在这里插入图片描述
idea中演示
在这里插入图片描述
在这里插入图片描述

获取请求参数的方法

在这里插入图片描述
数组或者数列等在取值前,最好有判空操作。

请求乱码问题

法一:
在这里插入图片描述

法二:
在这里插入图片描述
详细记录:
在这里插入图片描述

请求转发

//url:需要转发到的html\servlet\jsp,request及response在一次请求中始终如一的同一对象。
request.getRequestDispatcher(url).forward(request,response);

在这里插入图片描述

特点:
1.服务器行为
2.地址栏不发生改变
3.只有一个请求从始至终
4.request数据可共享

request作用域

作用范围:在一次请求中有效,即服务器跳转有效。
在web中共有三大作用域:
1.HttpRequest 	(请求域)
2.HttpSession		(会话域)
3.ServletContext 	(全局域)
JSP中也有一个:
PageContext  			(页面域)

对应的三个方法

//设置域对象内容
request.setAttribute(String name,Object vulue);
//获取与对象内容
request.getAttribute(String name);
//删除域对象内容
request.removeAttribute(String name);

HttpServletResponse对象

介绍

在收到客户端的http请求,服务器会针对每一次请求,创建一个请求对象和一个响应对象。(成对的存在)

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

获取客户端数据,通过request对象;
向客户端输出数据,通过response对象;

响应数据

响应时需要获取输出流,有以下俩种形式:
getWriter() 获取字符流【只能响应回字符】
getOutputStream() 获取字节流【能响应一切数据】
响应回的数据到客户端被浏览器解析。
需要注意的是:俩者不能同时使用。


// 获取字符输出流
PrintWriter writer = response.getWriter();
//输出数据
writer.writer("Hm");

//获取字节输出流
ServletOutputStream out = response.getOutputStream();
//输出数据
out.write("Gz".getBytes());

响应乱码问题

在响应中,如果外面响应的内容中含有中文,就可能出现乱码。这是因为服务器响应的数据夜壶经过网络传输,服务器端有一种编码方式,而客户端也存在一种编码方式。当俩端使用的编码方式不同则出现乱码。

指定编码的方式有三种:
1.指定客户端
2.指定服务端
3.同时指定俩端(推荐用这个)

//设置服务端编码格式
response.setCharacterEncoding("utf-8");
//设置客户端编码格式及响应的MIME类型
response.setHeader("content-type","text/html;charset=utf-8");
//同时设置客户端和服务端的编码格式
response.setContentType("text/html;charset=utf-8");

重定向

//url:可以是servlet/jsp
response.sendRedirect(url);

在这里插入图片描述
特点:
1.服务器引导,客户端行为
2.地址栏发生改变
3.存在俩个请求
4.request数据不可共享

请求转发与重定向区别

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值