Web01Servlet

Web01

1.Web

JavaWeb即为浏览器可以访问的java程序

基于请求和响应

请求 Request:客户端--->服务器

响应 Response:服务器--->客户端

成对出现

web资源

  • 静态资源:html,css,js

  • 动态资源:jsp,servlet

常用服务器:

Tomcat,Jboss,GlassFish,Resin,WebLogic

 

2.Tomcat

Servlet/JSP容器

下载 解压

文件目录

bin 专门用来存放 Tomcat 服务器的可执行程序

conf 专门用来存放 Tocmat 服务器的配置文件

lib 专门用来存放 Tomcat 服务器的 jar 包

logs 专门用来存放 Tomcat 服务器运行时输出的日记信息

temp 专门用来存放 Tomcdat 运行时产生的临时数据

webapps 专门用来存放部署的 Web 工程。

work Tomcat 工作时的目录,用来存放 Tomcat 运行时 jsp 翻译为 Servlet 的源码,和 Session 钝化的目录。

启动

bin 目录下的 startup.bat 文件,双击,就可以启动 Tomcat 服务器

http://localhost:8080

关闭

1、点击 tomcat 服务器窗口的 x 关闭按钮

2、把 Tomcat 服务器窗口置为当前窗口,然后按快捷键 Ctrl+C

3、找到 Tomcat 的 bin 目录下的 shutdown.bat 双击,就可以停止 Tomcat 服务器

修改端口号

Tomcat 默认的端口号是:8080

HTTP 协议默认的端口号是:80

找到 Tomcat 目录下的 conf 目录,找到 server.xml 配置文件

部署web工程

1.把 web 工程的目录拷贝到 Tomcat 的 webapps 目录下

访问地址格式如下:http://ip:port/工程名/目录下/文件名

2.Tomcat 下的 conf 目录\Catalina\localhost\ 下,创建如下的xml配置文件

配置文件内容如下:

<Context path="/abc" docBase="E:\book" />

Context 表示一个工程上下文

path 表示工程的访问路径:/abc

docBase 表示你的工程目录在哪里

Web工程目录

 

 

 

3.Servlet

3.1 基本操作

1.何为Servlet

  1. Servlet 是 JavaEE 规范之一。规范就是接口

  2. Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器

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

2.手动实现Servlet

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

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

  3. 到 web.xml 中去配置 servlet 程序的访问地址,让浏览器发出的请求知道到达哪个servlet

    即使用此url则会调用对应的servlet

<!-- servlet 标签给 Tomcat 配置 Servlet 程序 --> 
<servlet>
   <!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
   <servlet-name>HelloServlet</servlet-name>
   <!--servlet-class 是 Servlet 程序的全类名-->
   <servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping 标签给 servlet 程序配置访问地址-->
<servlet-mapping>
   <!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个 Servlet 程序使用--> <servlet-name>HelloServlet</servlet-name>
   <!--url-pattern 标签配置访问地址
/ 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径
/ hello 表示地址为:http://ip:port/工程路径/hello -->  
   <url-pattern>/hello</url-pattern>
</servlet-mapping>

3.Servlet生命周期

首次访问创建Servlet程序时调用:(只执行一次)

  • 执行 Servlet 构造器方法

  • 执行 init 初始化方法

每次访问都调用:(每次都执行)

  • 执行 service 方法

web 工程停止的时候调用:(只执行一次)

  • 执行 destroy 销毁方法

4.请求的分发处理

//在service方法中,获取请求方式
// 类型转换(因为它有 getMethod()方法)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取请求的方式,分别处理
String method = httpServletRequest.getMethod();

5.继承 HttpServlet

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

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

2、根据业务需要重写 doGet 或 doPost 方法

3、到 web.xml 中的配置 Servlet 程序的访问地址(同上)

 

6.Servlet类继承

 

 

 

3.2 ServletConfig类

Servlet 程序的配置信息类,每个servlet程序对应自己的配置

Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用

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

作用:

1、可以获取 Servlet 程序的别名 servlet-name 的值 servletConfig.getServletName()

2、获取初始化参数 init-param(需配置) servletConfig.getInitParameter(参数名)

3、获取 ServletContext 对象 servletConfig.getServletContext()

配置web.xml

<!-- servlet 标签里配置 --> 
<servlet>  
<!--init-param 初始化参数 1-->
<init-param>
       <!--参数名-->
       <param-name>username</param-name>
<!--参数值-->
<param-value>root</param-value>
</init-param>
<!--init-param 初始化参数 2-->
   <init-param>
<!--参数名-->
<param-name>url</param-name>
<!--参数值-->
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>

 

3.3 ServletContext类

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

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

ServletContext 对象是一个域对象(像 Map 一样存取数据的对象)

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

 

作用:先获取ServletContext对象

ServletContext context = getServletConfig().getServletContext();

  1. 获取 web.xml 中配置的上下文参数 context-param context.getInitParameter(属性名)

  2. 获取当前的工程路径,格式: /工程路径 context.getContextPath()

  3. 获取工程部署后在服务器硬盘上的绝对路径 context.getRealPath(相对路径)

  4. 像 Map 一样存取数据 context.getAttribute("key1") context.setAttribute("key1", "value1");

web.xml 中的配置

<!--context-param 上下文参数 1(属于整个 web 工程)--> 
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<!--context-param 上下文参数 2(属于整个 web 工程)-->
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>

 

3.4 HTTP协议

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

HTTP 协议中的数据又叫报文

#1.请求

客户端给服务器发送数据

1.GET请求:

  • 请求行:

    • 请求方式 GET

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

    • 请求的协议的版本号

  • 请求头:键值对,提供给服务器的信息

    • Accept:客户端接收的数据类型

    • Accept-Language:客户端接收的语言

    • User-Agent:浏览器信息

    • Accept-Encoding:客户端可接收的编码

    • Host:请求服务器的IP和端口号

    • Connection:请求连接处理

      • Keep-Alive:回传数据保持一会连接

      • Closed:马上关闭

2.POST请求:

  • 请求行:

    • 请求的方式 POST

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

    • 请求的协议的版本号

  • 请求头:键值对 大致同GET

  • 请求体:action=xxxxxx 发给服务器的数据

3.常用

GET 请求:

  • form 标签 method=get

  • a 标签

  • link 标签引入 css

  • Script 标签引入 js 文件

  • img 标签引入图片

  • iframe 引入 html 页面

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

POST 请求:

  • form 标签 method=post

#2.响应

1.响应行

  • 响应的协议和版本号

  • 响应状态码

    • 200 表示请求成功

    • 302 表示请求重定向

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

    • 500 表示服务器已经收到请求,但是服务器内部错误(代码错误)

  • 响应状态描述符

2.响应头: key : value

  • Server:服务器信息

  • Content-Type:响应体数据类型

  • Content-Length:响应体的长度

  • Date:请求响应时间

3.响应体:回传给客户端的数据

#3.MIME类型

HTTP协议数据类型

"Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务

常见的 MIME 类型:

文件MIME 类型
超文本标记语言文本 .html , .htm text/html
普通文本 .txt text/plain
RTF 文本 .rtf application/rtf
GIF 图形 .gif image/gif
JPEG 图形 .jpeg,.jpg image/jpeg
au 声音文件 .au audio/basic
MIDI 音乐文件 mid,.midi audio/midi,audio/x-mid
RealAudio 音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG 文件 .mpg,.mpeg video/mpeg
AVI 文件 .avi video/x-msvideo
GZIP 文件 .gz application/x-gzip
TAR 文件 .tar application/x-tar

3.5 HttpServletRequest 类

每次请求进入 Tomcat 服务器,Tomcat 服务器就把请求的 HTTP 协议信息解析封装到 Request 对象中。然后传递到 service 方法(doGet 和 doPost)使用。通过 HttpServletRequest 对象,获取到所有请求的信息。

常用方法

  • getRequestURI() 获取请求的资源路径

  • getRequestURL() 获取请求的统一资源定位符(绝对路径)

  • getRemoteHost() 获取客户端的 ip 地址

  • getHeader() 获取请求头

  • getParameter() 获取请求的参数

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

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

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

  • getAttribute(key); 获取域数据

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

中文乱码

//GET中 先以 iso8859-1 进行编码,再以 utf-8 进行解码

username = new String(username.getBytes("iso-8859-1"), "UTF-8");

// 设置请求体的字符集为 UTF-8,从而解决 post 请求的中文乱码问题

req.setCharacterEncoding("UTF-8");

请求转发

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

 

 

// 请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ , 映射到 IDEA 代码的 web 目录

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

requestDispatcher.forward(req,resp);

Base标签

base 标签设置页面相对路径工作时参照的地址

<base href="http://localhost:8080/07_servlet/a/b/">

路径

在实际开发中,路径都使用绝对路径,而不简单的使用相对路径

相对路径是:

  • . 表示当前目录

  • .. 表示上一级目录

  • 资源名 表示当前目录/资源名

绝对路径:

http://ip:port/工程路径/资源路径

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

 

3.6 HttpServletResponse 类

每次请求进来,Tomcat 服务器都会创建一个 Response 对象传递给 Servlet 程序去使用

通过 HttpServletResponse 对象来进行设置置返回给客户端的信息

输出流

同时只能使用一个

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

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

回传数据

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

乱码

同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头

此方法一定要在获取流对象之前调用才有效

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

请求重定向

客户端给服务器发请求,服务器给出新地址访问

 

 

请求重定向1:

  • 设置响应状态码 302 ,表示重定向 resp.setStatus(302);

  • 设置响应头,说明新地址resp.setHeader("Location", "http://localhost:8080");

请求重定向2(推荐):

 

4.Java EE项目架构

 

 

分层的目的是为了解耦。解耦就是为了降低代码的耦合度。方便项目后期的维护和升级。

  • web 层 : com.xxx.web/servlet/controller

  • service 层:

    • com.xxx.service Service 接口包

    • com.xxx.service.impl Service 接口实现类

  • dao 持久层 :

    • com.xxx.dao Dao 接口包

    • com.xxx.dao.impl Dao 接口实现类

  • 实体 bean 对象 :

    • com.xxx.pojo/entity/domain/bean JavaBean 类

  • 测试包 : com.xxx.test/junit

  • 工具类: com.xxx.utils

posted @ 2021-05-05 21:43  FremontUltimate  阅读(88)  评论(0)    收藏  举报