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 @   -她的梦-  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
  1. 1 碧天伴走 MyGO!!!!!
  2. 2 影色舞 MyGO!!!!!
  3. 3 詩超絆 MyGO!!!!!
  4. 4 迷路日々 MyGO!!!!!
  5. 5 歌いましょう鳴らしましょう MyGO!!!!!
  6. 6 壱雫空 MyGO!!!!!
碧天伴走 - MyGO!!!!!
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 藤原優樹

作曲 : 木下龍平

编曲 : 木下龍平

人知れず

肩落としてる君がいるのに

碧すぎてる空ばかりが眩しい

僕はどんな言葉を君に

言えばいいのか

君に何を

脆くやわい こころで生きる

僕らは 傷つく生き物で

なのに 今日だって

頑張ってる 十分 君はもう

躓いて 転んだって

立ち上がり来たんだ

頑張ってる いつでも

ここに立ってるだけで

必死なんだから

ジタバタで ラクじゃないけれど

迷っても 君と進んでみたいよ

いいかな

誰かには

ちっぽけなものだったとしても

君にとっては

なにより大事なこと

壊さないで 失わないで

守りたいから

となりにいる

「僕なんか」言うのは やめるよ

君にも 言ってほしくないから

だから顔上げて (伝える)

頑張ったよ 昨日の 君だって

思うようにいかない

そんな毎日だって

頑張ったと 知ってる

僕は知ってる だから

こころを隠さないでほしい

らしさなんて

まだわからないままだけど

ぶつかるたび痛んで

でも浮かびあがる輪郭

ああ 見つける

頑張っても ダメだと 思う日も

この手をつなぐから

ぎゅっと 力込めて

頑張ってる ひたすら 息してる

当たり前に過ぎる

一秒なんかないよ

頑張ってる いつでも

ここに立ってるだけで

たたかってるよ

逃げてもいい 道が見えなくても

迷っても 君と走っていたいんだよ

一緒に

点击右上角即可分享
微信分享提示