Web
web开发概述
- 学习web开发,需要先安装一台web服务器,将开发好的web项目部署在web服务器中供外界访问。
web开发环境搭建
- Web服务器是指驻留于英特网上某种类型计算机的程序
- 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;它是一个容器,是一个连接用户与程序之间的中间件。
- Web服务器有很多,流行的Web服务器有Tomcat、WebSphere、WebLogic、Jbss等。
- 在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服:Apache 的Tomcat,该服务器支持全部JSP以及Servlet规范。
-
Tomcat官方站点:http://tomcat.apache.org
-
获取Tomcat安装程序包
- tar.gz文件是Linux操作系统下的安装版本
- zip文件是Windows系统下的压缩版本
-
安装JDK
- 设置JAVA_HOME环境变量
- 设置PATH环境变量
-
安装Tomcat
- 解压tomcat压缩文件
-
Tomcat 的目录层次结构
-
双击bin目录下的startup.bat 文件输入 http://localhost:端口号 或 http:127.0.0.1:端口号 或局域网ip:端口号
-
server.xml 是Tomcat的主搭配文件
提供Tomcat组件的初始配置,tomcat启动的时候执行这些初始化设置。
修改此文件后,需要重新启动tomcat。如果此文件修改错误,则tomcat不能正常启动。
-
修改服务器端口号
<connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443/>
创建发布web项目
-
创建并发web项目
1、创建java项目,添加web功能
2、发布web应用到服务器
自动将web应用发布到web服务器下,需要在开发工具中集成tomcat进来
-
Web项目结构
Servlet
Servlet 概述
-
Servlet 是 Servlet Applet 的简称,意思为用Java编写的服务器端的程序。
它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法。
-
Servlet的作用:
1、接收用户发送的请求数据
2、调用其他的java程序来处理请求
3、根据处理结果,将结果响应给客户端
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>
元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>
,分别用于指定Servlet的注册面积过程和Servlet的对外访问路径。url-pattern 配置模式:" /" 代表当前web应用的根目录
精确匹配 例如/test 访问
http://127.0.0.1/项目名/test
<servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/test<url-pattern> </servlet-mapping>
创建发布web项目- web.xml文件
- Web.xml 文件为web应用的配置文件,它必须放在web应用目录WEB-INF目录下。
- Web.xml 文件用于对web应用下的web资源进行配置,服务器在启动时会读取web.xml 文件中的的内容
Servlet生命周期
http协议,http请求
- 什么是HTTP?
- 超文本传输协议 (HyperText Transfer Protocol)服务器传输超文本到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。()
- HTTP是一个基于TCP/IP通信协议来传递数据
- HTTP是一个属于应用层的协议,由于其便携、快速的方式,适用于分布式超媒体信息系统
http响应
-
客户端连接上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。
-
请求包括:
请求行,请求头,请求体。
请求行包含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, likeGecko) Chrome/69.0.3497.100 Safari/537.36 使用的浏览器和操作平台信息
**Connection: **keep-alive 浏览器与服务器之间连接的类型
请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,服务器接收后到再解析。
username = admin & userpwd = 123
-
GET方式:
- 超链接访问,默认是GET方式
- form提交,不指定method,默认为GET方式
-
POST方式:
- form提交,指定method = “POST”
-
Get方式与post方式的区别
- Get方式主要是从服务器获取信息;post主要是想服务器提交信息
- Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在请求体中提交。
- GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而POST则没有此限制。
-
请求和响应是Web交互最基本的模式,在Servlet中,用HttpServletRequest来表示请求。
-
HttpServletRequest : 封装了请求的信息,可以从中获取任何请求信息。
-
getParameter(name) — String 通过name获得值
-
getParameterValues — String[ ] 通过name获得多值
-
理中文乱码
post
setCharacterEncoding(编码格式)
getMethod()得到客户机请求方式
getScheme()请求协议
getRemoteAddr()返回发出请求的客户机的IP地址
getServerName()服务器名(ip或域名)
getServerPort()服务器端口
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所使用的字符集编码和浏览器打开所用的字符集编码。
web会话跟最机制
- 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话
- 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是CookieSession。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
- 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了
- Session是另一种记录客户状态的机制,它在用户第一次打开浏览器连接到后端服务器时,由服务器创建产生,生成一个id号,作为会话标识
- 服务器通过Cookie将生成的会话id响应到浏览器中,之后每次请求将浏览器端的会话id向服务器端提交,服务器就可以得知是哪个客户端发起的请求
session
-
Servlet API中, 定义了HttpSession接口,用来分装会话对象。
-
HttpSession是接口,会话对象是Web容器创建的,在Servlet中使用HttpServletRequest中的方法获得对象。
- public HttpSession getSession() :获取跟当前请求相关的session,如果不存在session,就创建一个新的session对象返回。
-
使用session实现会话机制的过程
1、当容器创建一个新的HttpSession对象后,即生成一个随机数,成为会话ID,并将ID值封装一个名字为JSESSIONID的session,返回给客户端。
2、调用request.getSession方法获得会话对象时,容器先从request中获取JSESSIONID值,根据JSESSIONID值查找到对应的会话对象,返回使用。
3、如果没有JSESIONID值,认为当前的请求没有相关联的对象,重置步骤1
-
HttpSession 接口中定义了一系列的方法
- 会话对象生命周期
- 会话对象是容器创建的,并保存在容器中,如果客户端连接到服务器后,却置之不理,不做任何操作,那么容器维护这些会话对象将占用很多资源。因此,容器都会在默认时间内销毁会话对象,多数容器默认30分钟销毁会话对象。
- 除了根据有效时间使会话对象失效外,还可以调用HttpSession中的invalidate方法,使会话失效,立即销毁会话对象
过滤器
- Servlet API中,与过滤器有关的API共有三个接口,分别是
- Filter
- FilterChain
- FilterConfig
- Filter接口是过滤器类必须实现的接口,该接口中有三个方法。
- nit(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。参数FilterConfig可以获得filter的初始化参数。
- doFilter(ServletRequest request, ServletResponse response,FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。
- destroy():该方法在容器销毁过滤器对象前被调用。
- 该接口类型作为Filter接口中doFilter方法的参数使用。FilterChain接口中有一个方法
- doFilter(ServletRequest request,ServletResponse response),该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能是下一个过滤器,也可能是目标资源。
- 该接口类型作为Filter接口中的init方法的参数使用,FilterConfig接口中有一个常用方法
- getInitParameter(String name),该方法用来获得过滤器的初始化参数值。在web.xml中,可以为每一个filter配置需要的初始化参数,与Servlet的类似。过滤器的初始化参数即可通过FilterConfig中的getInitParameter方法获取。
- 过滤器用来实现通用的功能,减少代码冗余,提高可维护性
- 一个过滤器可以配置给多个资源使用
- 一个资源也可以配置多个过滤器,按照配置顺序调用