Servlet+jsp复习

Servlet

Servlet是Java EE十三项规范之一,是一个接口。javaweb的三大组件为Servlet、Filter、Listener。

Servlet是一个运行在web服务器的java程序,可以用来接收客户端发来的数据和响应回传数据给客户端。

通过查询API文档可以得知,Servlet接口中有以下五个抽象方法

 

 init()方法是在工程创建的时候调用的,请求和响应都在Service(req,res)方法中处理。关闭服务器的时候调用destroy方法。其他两个不常用就不介绍了。

当我们启动Tomcat服务器的时候,可以通过两种方式来访问Servlet程序

第一种方式:早期是把Servlet程序的一个信息写在web.xml文件中来访问,具体写法如下:

 

 为了简化 Servlet 的配置,Servlet 3.0 中增加了注解支持,例如:@WebServlet、@WebInitParm 、@WebFilter 和 @WebLitener 等,这使得 web.xml 从 Servlet 3.0 开始不再是必选项了。下面我们对 @WebServlet 进行介绍。

第二种方式:使用注解来实现

 

其次再来介绍以下Servlet的继承体系,GenericServlet这个类实现了Servlet接口,做了很多空实现,并不能满足我们的需求,我们建立的web工程遵守Http协议,接着HttpServlet类继承了

GenericServlet类,对service()方法进行了实现,并对Get和Post请求进行了分发处理。

深入浅出,我们要想使用Servlet,就只需要创建一个类继承HttpServlet类,并且重新doGet和doPost方法即可。

细心可以发现,在init方法中有一个形参,是ServletConfig的实现接口类型的(ServletConfig是一个标准化接口),这个类是Servlet程序的配置信息类,

可以获取初始化参数、别名和ServletContext对象  注:Servlet程序的默认第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig对象(一个servlet类对应一个ServletConfig对象)

 

 

 接着,ServletContext类,首先来进行介绍

1、ServletContext 是一个接口,它表示 Servlet 上下文对象 2、一个 web 工程,只有一个 ServletContext 对象实例。

3、ServletContext 对象是一个域对象。 4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

ServletContext类的四个作用:

1、获取 web.xml 中配置的上下文参数 context-param 2、获取当前的工程路径,格式: /工程路径 3、获取工程部署后在服务器硬盘上的绝对路径 4、像 Map 一样存取数据

 

运行结果如下:

 

 第一行是空行是因为我的Tomcat路径设置的问题,放下面了

 

 

 接下来是Get和Post请求在Http协议中的不同点                    get请求分为请求行和请求头,没有请求体。post请求分为请求行、请求头和请求体

get请求:

请求行:

1) 请求的方式 GET (2) 请求的资源路径[+?+请求参数] (3) 请求的协议的版本号 HTTP/1.1

请求头:存放键值对信息

 

post请求的get请求的区别就在于,把请求参数放到了请求体中。

关于响应行的请求形式如下:

1、响应行 (1) 响应的协议和版本号 (2) 响应状态码 (3) 响应状态描述符 2、响应头 (1) key : value 不同的响应头,有其不同含义 空行 3、响应体 ---->>> 就是回传给客户端的数据

响应状态码:200 表示请求成功 302 表示请求重定向   404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误) 500 表示服务器已经收到请求,但是服务器内部错误(代码错误)

请求转发:RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");   requestDispatcher.forward(req,resp);转发只能在自己的工程范围内进行,不能访问外面的网站,比如百度、b站。转发是一次请求,request域还可以用,浏览器栏的地址不会改变

请求重定向:1、resp.setStatus(302); // 设置响应头,说明 新的地址在哪里 resp.setHeader("Location", "http://localhost:8080");

2、resp.sendRedirect("http://localhost:8080"),重定向是两次请求,地址改变了,相当于重新输入一遍新地址再访问。

dopost响应乱码解决方法:

resp.setContentType("text/html; charset=UTF-8");

 HttpServletresponce类的使用:

 

 

 PrintWriter writer = resp.getWriter(); writer.write("response's content!!!");

获取标准输出流
PrintWriter out = resp.getWriter();
向标准输出流中写入数据,那么客户端浏览器就会直接看到这写数据
out.write()是字节输出流的方法 
    输出数字,显示的是其ASCII对应字符
    out.write(97);  输出a
out.print()是字符输出流的方法 
    out.print(97); 输出97
一、区别 
1. print方法是子类JspWriter,write是Writer类中定义的方法; 
2. 重载的print方法可将各种类型的数据转换成字符串的形式输出,而重载的write方法只能输出字符、
 字符数组和字符串等与字符相关的数据; 
3. JspWriter类型的out对象使用print方法和write方法都可以输出字符串,但是,如果字符串对象的值
 为null时,print方法将输出内容为“null”的字符串,而write方法则是抛出NullPointerException异常

但是print()方法的底层实现也是write()只不过把所有类型都转成了String类型。

posted @ 2022-12-10 11:43  -她的梦-  阅读(33)  评论(0编辑  收藏  举报