Servlet

1. Web开发概述

学习web开发,需要先安装一台web服务器,将开发好的web项目部署在web服务器中供外界访问.
Web服务器是指驻留于因特网上某种类型计算机的程序.
可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;
它是一个容器,是一个连接用户与程序之间的中间件。
WEB服务器有很多,流行的WEB服务器有Tomcat,WebSphere,WebLogic,Jboss等

● 在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器:
Apache 的Tomcat,该服务器支持全部JSP以及Servlet规范.
● Apache软件基金会(也就是Apache Software Foundation,),是专门为
运作一个开源软件项目的 Apache 的团体提供支持的非盈利性组织。

2. Web开发环境搭建

● Tomcat官方站点:http://tomcat.apache.org
● 获取Tomcat安装程序包
● tar.gz文件是Linux操作系统下的安装版本
● zip文件是Windows系统下的压缩版本

  1. 安装JDK

    • 设置JAVA_HOME环境变量
    • 设置PATH环境变量
  2. 安装Tomcat

    • 解压Tomcat压缩文件

3. JavaEE开发准备工作

需要把开发好的程序部署在服务器上,
首先需要知道并了解什么是服务器?

    广义上的服务器=计算机的硬件+计算机软件
    狭义上的服务器=计算机软件,是一款能放置文件,并且可以对外提供服务的软件
    可以把一些文件部署到服务器上,通过地址访问,服务器就会做出响应
现在需要运行Java程序,那么需要安装一个支持Java程序运行的服务器,
apache的tomcat服务器就是一个支持Java程序的服务器,而且是免费的

  • web服务器是指驻留于因特网上的某种类型的计算机程序
  • 可以向浏览器等Web客户端提供文档,也可以放置网站数据,让全世界浏览;它是一个容器,是一个连接用户和程序之间的中间件
  • Web服务器有很多,流行的Web服务器有Tomcat,WebSpere,WebLogic,Jboss等

如何安装服务器?

Tomcat是支持Java程序运行的,所以他的运行许哟啊jdk的支持
前提:安装jdk,配置环境变量path JAVA_HOME,Tomcat可以通过此变量找到jdk
JAVA_HOME=jdk的根路径
下载tomcat后,启动服务器双击bin目录下的startup.bat,启动tomcat服务器

如何将项目部署在服务器上?

开发一个Java后端程序,并部署Java程序
在IDEA中创建一个Java项目,并把他修改为一个JavaEE项目,在IDEA中集成Tomcat,将项目部署到服务器中。

以前JavaSE代码是本机运行,别人访问不到
JavaEE(Java后端)将Java程序部署到一个服务器软件中,可以做到远程访问

4. Servlet概述

  1. Servlet是Server Applet的简称,意思为用Java编写的服务器端程序。
  2. 它运行在Web服务器中,Web服务器负责Servlet和客户的通信以及调用Servlet方法
    • 接收用户发送的请求数据
    • 调用其他的Java程序来处理请求
    • 根据处理结果,将结果反映给客户端

上面都是复制的书面内容,这里来深入了解一下Servlet:
下面的总结来自于这个网站

为什么需要Servlet?
       首先,浏览器发起Http请求,在早期只会请求一些静态的资源,这时候,需要一个服务器来处理Http请求,并将相应的资源返回。
       但是,随着互联网的发展,交互变得十分重要,单纯的静态文件满足不了要求,业务变得复杂,我们需要编写代码实现各种业务。需要根据Http请求调用不同的业务逻辑来响应,但是业务代码不能和HTTP服务器耦合起来。总不能在Http服务器的具体实现来做判断需要调用哪个服务类,不能将业务和非业务相关联,所以需要一层抽象,将Http的解析和具体业务隔离。
       本质上是根据HTTP请求找到响应的业务实现类然后执行逻辑再返回。业务千千万,所以需要规定一个接口,所有的所有的业务类都实现这个接口才好对接。这个接口就是Servlet,就像JDBC,各大数据库厂家连接数据库的方式肯定不一致,但是Java中规定了连接数据库的相关接口,由各大数据库厂家进行实现,而程序员无需关心各大数据库厂家如何实现,只需学习Java中规定的接口和方法。而在JavaWeb这里,所有实现类的接口就是Servlet。
Servlet其实就是Server Applet,全程Java Servlet,指的是用Java编写的服务器端程序。这里指的就是实现了Servlet接口的那些业务类。这就是Servlet的由来。
Servlet容器?
Servlet容器就是管理和加载这些Servlet类的,拿到HTTP请求之后找到对应的Sevlet类就是Servlet容器要做的事情。看到这里我们可以把Servlet容器和具体业务实现分开,这里把请求和Servlet对应关系抽象出来了,就是web.xmll,咱们在配置里面告诉Servlet容器对应关系即可。

5. Servlet的创建和使用

  1. 创建一个类继承javax.servlet.http包下的HttpServlet
  2. 再web.xml文件中配置Servlet
  3. 运行Servlet程序
    通过浏览器访问http://localhost:8080/项目名/配置的url

由于客户端时通过URL地址访问web服务器中的资源,所以servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。

<servlet>元素用于注册Servlet,它包含两个主要子元素:
<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。

<servlet-mapping>元素用于映射一个已经注册的Srevlet的一个对外访问路径,它包含有两个子元素:<servlet-name>元素<url-pattern>元素,分别用于指定Servlet的注册名称和Servlet的对外访问路径。

url-pattern配置模式:"/"代表当前web应用的根目录
精确匹配:例如/test 访问http://localhost/项目名/test

6.Servlet声明周期

实例化- - >构造方法:只被调用一次,只有第一次访问Servlet时或服务器启动时创建Servlet实例
初始化- - >Init():只被调用一次,在Servlet实例创建好之后立即执行,用于执行一些初始化Serlvet的操作。
服务 - - > service方法:多次调用,每次请求都调用service方法,根据请求方式调用doGet()或doPost()方法。
消亡- - >只被调用一次,在服务器关闭时调用,执行一些操作

7. Http协议

7.1 什么是HTTP?

● 超文本传输协议 (HyperText Transfer Protocol)服务器传输超文本到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。
● HTTP是一个基于TCP/IP通信协议来传递数据.
● HTTP是一个属于应用层的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统

7.2 请求方式

GET方式:
● 超链接访问,默认是GET方式
● form提交,不指定method,默认为GET方式

POST方式:
● form提交,指定method=“POST”

Get方式与post方式的区别
● Get方式主要是从服务器获取信息;post主要是想服务器提交信息
● Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据
放置在请求体中提交。
● GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而
POST则没有此限制

7.3 HTTP请求

● http请求?
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。
请求包括:请求行,请求头,请求体。
请求行:包含http请求方式,请求地址,请求的状态

请求头包含主机地址,以及客户端的一些环境信息,以键值对的形式传递. Host: 127.0.0.1:8088 请求的主机地址
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
浏览器能够处理的内容类型
Accept-Encoding: gzip, deflate, br 浏览器能够处理的压缩编码
Accept-Language: zh-CN,zh;q=0.9 浏览器当前设置的语言
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/69.0.3497.100 Safari/537.36 使用的浏览器和操作平台信息
Connection: keep-alive 浏览器与服务器之间连接的类型

请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以
键值形式传递,多个用&链接,服务器接收到后再解析. username=admin&userpwd=12

请求和响应是Web交互最基本的模式,在Servlet中,用HttpServletRequest
来表示请求。
HttpServletRequest :封装了请求的信息,可以从中获取任何请求信息。

getParameter(name) // String 通过name获得值
/*上述的方法虽然可以获取数据,但是checkbox这种类型的标签却只能获取第一个选择的value值
,导致信息丢失,而下面的方法则可以用来处理一个name多个value这种数据*/
getParameterValues() // String[ ] 通过name获得多值
//处理中文乱码	post
setCharacterEncoding(编码格式)
getMethod()得到客户机请求方式
getScheme()请求协议
getRemoteAddr()返回发出请求的客户机的IP地址
getServerName()服务器名(ip或域名)
getServerPort()服务器端

指定后可以通过req.getParameter()获取自己想要的字符串,如果没有提前指定,则会按照服务器端默认的"iso-8859-1"来进行编码;该方法只对post请求有效,对get请求无效;对于get请求,应该在server.xml中指定:URLEncoding=utf-8;
注意:在执行req.setCharacterEncoding()之前不能执行req.getParameter()方法;
原因:应该是在执行第一个getParameter()方法时,Java会以默认的编码分析提交的所有数据,而后面的setCharacterEncoding()必将无效

7.4 HTTP响应

http响应?
一个http响应代表服务器向客户端回送的数据,它包括:响应行,响应头,响应体。
响应行里包含了http协议版本,以及用于描述服务器对请求的处理结果。
HTTP/1.1 (协议版本) 200(状态吗) OK(状态码描述)
状态码:服务器和浏览器用于确定状态的固定数字号码
200:请求成功
302:请求重定向
400:语义有误,当前请求无法被服务器理解或请求参数有误
404:请求资源不存在,通常是路径写错了或者服务器资源删除了
500:服务内部错误(代码异常)
响应头用于描述服务器的基本信息,以及数据描述
Ser ver Apache-Coyote/1.1
Content-Type text/html;charset=UTF-8
Content-Length 0
Date Wed, 13 Sep 2017 02:26:07 GMT
响应体代表服务器向客户端浏览器回送的正文

Web服务器收到客户端的http请求,会针对每一次请求,分别创建
一个代表响应的HttpServletResponse对象。
● HttpServletResponse对象代表响应。
● 用getWriter()获得一个PrintWriter字符输出流输出数据response会默认以ISO8859-1将需要输出到浏览器的字符进行解码,如果输出的字符在ISO8859-1中不存在,就会导致乱码问题。
● response.setContetnType(“text/html;charset=utf-8”);方法可以同时设定response所使用的字符集编码和浏览器打开所用的字符集编码。

8. 过滤器

  1. Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对WEB服务器管理的所有WEB资源:例如Servlet,从而实现一种特殊的功能。例如:实现URL级别的权限访问控制、过滤敏感词汇、压缩相应信息等一些高级功能。
  2. 作用:对服务器WEB资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)
  3. Servlet API中提供了一个Filter接口,开发WEB应用时,如果编写的Java类实现了这个接口,则把这个类称为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问请求和响应进行拦截。

Servlet API中,于过滤器有关的API共有三个接口,分别是:

  • Filter
  • FilterChain
  • FilterConfig

Filter接口是过滤器必须实现的接口,该接口中共有三个方法。

  • init(FilterConfig filterConfig):该方法是对Filter对象进行初始化的方法,仅在容器初始化Filter对象结束后被调用一次。参数FilterConfig可以获取Filter的初始化参数。
  • doFilter(ServletRequest request, ServletResponse response,FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。
  • destroy():该方法在容器销毁过滤器对象前被调用。

为项目加上过滤器后请求有这样几种"走法"有几种走法:
1.不需要走任何过滤器,直接进入Servlet
2.通过一个过滤器后进入Servlet
3.通过两个或多个过滤器后进入Servlet
4.通过某个过滤器时,因为没有权限无法进入Servlet

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值