javaWeb学习知识总结

1.基本概念

//用自己的tomcat,要重新创建本地地址
菜鸟教程:http://www.runoob.com/

tomcat下载地址:http://tomcat.apache.org/

Web应用程序(B/S结构,即浏览器服务器程序):
在这里插入图片描述

执行原理:
在这里插入图片描述

1.客户端和Web服务器建立连接。
2.客户端发送HTTP请求。
3.服务器端接收客户端的请求,生成HTTP响应回发,服务器端关闭连接。
4.客户端解析回发响应,恢复页面。

URL:Uniform Resource Locator的缩写,表示统一资源定位器,它是专为标识网络上的资源位置而设的一种编写地址方式。

URL的组成:
在这里插入图片描述

如:http://www.oracle.com:80/hk/index.html
HTTPS加密协议
HTTP:Hypertext Transfer Protocol的缩写,表示超级文本传输协议(也称为无状态协议),是关于如何在网络上传输超级文本的协议。HTTP使用端口发送和接收消息,80端口是HTTP默认的端口,即一般不写。服务器端响应客户端的请求会返回状态码,每一种状态码都表示不同的意义。如图:
状态码 意义
200 成功处理请求
404 找不到服务器资源
500 服务器处理出错
404:网址出错
500:代码写错

HTTP协议常用的请求方式有get和post,区别如下:
1.get方式仅能提交文本数据,而post方式则可以提交二进制数据。
2.get方式提交的数据会在地址栏显示(不安全),而post方式则不会(安全)。
3.get方式提交的数据有大小限制(不能超过2KB),而post方式则无大小限制。
4.页面默认以get方式提交数据。

2.创建并启动WEB工程步骤

创建并启动WEB工程步骤:
1. 安装配置服务器(如Tomcat,前提需要安装配置好JDK)。
Tomcat的目录结构:
在这里插入图片描述

Tomcat服务器的默认端口号为:8080。
WEB程序发布目录:tomcat安装目录下的webapps目录下。
手动启动Tomcat服务器:tomcat安装目录->bin目录->双击startup.bat文件。
手动关闭Tomcat服务器:tomcat安装目录->bin目录->双击shutdown.bat文件。

2.在MyEclipse上创建Web Project工程。
WEB工程目录结构及其说明:
在这里插入图片描述

3.将web工程发布到服务器(如Tomcat)。
4.启动服务器(如Tomcat)。
5.打开浏览器,输入URL访问。

Servlet简介:运行于服务器端,接收用户请求、并响应的Java应用程序组件。
在这里插入图片描述

3.Servlet开发步骤

Servlet开发步骤:
1. 创建Web Project工程。
在这里插入图片描述
在这里插入图片描述

2. 创建Servlet,即创建继承自javax.servlet.http.HttpServlet的类。
在这里插入图片描述

3. 在该类中重写父类的service方法。
在这里插入图片描述

代码如图:
在这里插入图片描述

4. 在web.xml文件中配置Servlet。
在这里插入图片描述

5.部署WEB工程到服务器并启动服务器,然后在浏览器中输入请求的URL。
如:http://localhost:8080/lifecycle/lc

LifeCycleServlet
com.lifecycle.LifeCycleServlet


LifeCycleServlet
/lc

Servlet工作原理:
1. 在浏览器地址栏中输入URL。
2. Tomcat服务器根据请求获取URL中需要的资源,即/lc。
3. Tomcat服务器根据获取的/lc与web.xml文件中的元素下的元素中的内容值进行匹配。
4. Tomcat服务器取出与同级的元素中的内容值LifeCycleServlet。
5. 根据取出的LifeCycleServlet值与元素下的元素内容值进行匹配。
6. 匹配完成后,Tomcat服务器实例化该Servlet,然后处理和响应请求。

Servlet的生命周期:分为实例化阶段、初始化阶段、服务阶段和销毁阶段。
默认情况下(即web.xml文件中的servlet标签没有配置load-on-startup子标签或其值为负数),当首次请求Servlet时,WEB容器会首先调用该Servlet的构造方法进行实例化(只会实例化一次,即单例模式),然后调用该Servlet的init方法进行初始化(该方法只会被调用一次),接着调用该Servlet的service(doGet或doPost)方法进行处理并返回客户端的请求(该方法可以被调用多次),最后当WEB容器关闭时会调用该Servlet的destroy方法进行销毁实例(该方法只会被调用一次)。
实现步骤:定义默认的构造方法,重写父类的init、service和destroy方法。
在这里插入图片描述

4.load-on-startup标签+接口+中文问题

load-on-startup标签:表示当服务器启动时是否自动实例化(调用构造方法)和初始化(调用init方法)Servlet,默认不自动实例化和初始化。
取值(整数)说明:
1. 负数:当有客户端请求该Servlet时,服务器才会实例化和初始化(默认情况)。
2. 0:当服务器启动时自动实例化和初始化,且优先级最高。(出现多个servlet时,可以进行优先级比较)
3. 正数:当服务器启动时自动实例化和初始化,且数值越小优先级最高。
在这里插入图片描述


HttpServletRequest接口:代表客户端的请求,它提供了许多获取客户端请求数据的方法。HttpServletResponse接口:代表返回客户端的响应,它提供了许多将数据写往客户端的用法。
ServletConfig接口:能够读取配置在web.xml文件中的Servlet初始化参数。
ServletContext接口:是Servlet与Servlet容器之间的直接通信接口。Servlet容器在启动一个Web应用时,会为其创建一个ServletContext对象。每个web应用都有唯一的ServletContext对象。


中文问题(首先得统一所有编码格式,如都以UTF-8格式编码,tomcat服务器默认为ISO-8859-1(西欧语言)编码):
1.以表单(form)方式请求,根据请求方式(get和post)不同:
get方式:new String(变量或值.getBytes(“ISO-8859-1”), “UTF-8”);
post方式:HttpServletRequest对象.setCharacterEncoding(“UTF-8”);(第一行设值)

2. 非表单方式请求,如location.href方式:
先用脚本将中文编码:encodeURIComponent(变量或值);
接收时再转换:new String(变量或值.getBytes(“ISO-8859-1”), “UTF-8”);

3.重定向(sendRedirect)和请求转发(forward)方法:
先将中文编码:URLEncoder.encode(变量或值, “UTF-8”);
接收时再转换:new String(变量或值.getBytes(“ISO-8859-1”), “UTF-8”);

4.页面间请求:
先用脚本将中文编码:encodeURIComponent(encodeURI(encodeURI(变量或值)));
接收时再用脚本解码:decodeURIComponent(decodeURI(变量或值));

5.重定向和请求转发

重定向和请求转发:
重定向:HttpServletResponse提供的sendRedirect(String path)方法用于实现重定向功能。重定向可以跳转至到同一个容器(服务器tomcat)中的其他应用程序的资源,甚至可以使用绝对路径的URL重定向到其他站点的资源。

重定向工作原理:
在这里插入图片描述

请求转发:Servlet API中定义了一个RequestDispatcher接口,该接口中的forward()方法用于将请求转发至RequestDispatcher实例指定的资源。请求转发只能在同一个容器内的资源之间进行跳转,但可以通过请求转发将请求向下传递。

请求转发工作原理:
在这里插入图片描述

重定向和请求转发的区别:
重定向:地址栏发生改变,跳转发生在客户端,用的不是同一个HttpServletRequest对象,可以跳转到外部。
请求转发:地址栏不会改变,跳转发生在服务器端,用的是同一个HttpServletRequest对象,只能在内部跳转。

6.会话(Cookie)

会话:Web应用中的会话是指一个客户端浏览器与Web服务器之间连续发生的一系列请求和响应的过程。

会话跟踪:Web应用程序使用HTTP这种无状态协议。即服务器一旦响应完客户的请求之后,就断开会话的连接。而会话跟踪是在一段时间内能够识别请求,并保存客户信息的技术。

实现会话跟踪:要实现有状态的会话,就需要在Web服务器端和客户端浏览器之间来回传递会话ID,以关联同一客户浏览器向Web服务器程序发出的连续请求。实现在Web服务器程序和客户端浏览器之间来回传递会话ID的技术被称为会话跟踪技术,常用的会话跟踪技术有Cookie和HttpSession。
在这里插入图片描述

Cookie:是由服务器端产生,存储在客户端计算机上的文本文件,并保留了各种跟踪信息,需要客户端浏览器的支持。

实现原理:当客户端浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应信息中附带传送给客户端浏览器的一组键值对数据。客户端浏览器将这些数据存储在本地计算机上,以备将来使用。当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户。

创建Cookie步骤:
1.在服务器端程序中创建Cookie。
Cookie cookie = new Cookie(String name,String value);
注:无论是名字还是值,都不应该包含空格或=,"/?@:;字符。
推荐:无论值是否包含特殊字符和中文都进行编码。
String value = java.net.URLEncoder.encode(String value, “UTF-8”);

2. 设置Cookie有效期(单位秒),根据参数值的不同分为临时、永久以及删除Cookie。
cookie.setMaxAge(int second);
临时Cookie:参数值为负数,即浏览器内存保存的Cookie,当浏览器关闭则消失。
永久Cookie:参数值为正数,即在文件中保存,并设置保存时间。
删除Cookie:参数值为0。

3.将Cookie添加到 HTTP 响应头。
HttpServletResponse对象.addCookie(cookie);
注:Cookie数据保存地址,以win10系统IE11为例
C:\Users\zw\AppData\Local\Microsoft\Windows\INetCookies

读取Cookie步骤:
1. Cookie[] cookies = HttpServletRequest对象.getCookies();
2. 遍历Cookie数组,并使用getName()和getValue()方法来访问每个Cookie和关联的值。
推荐:无论值(getValue()方法)是否包含特殊字符和中文都进行解码。
String value = java.net.URLDecoder.decode(String value, “UTF-8”);

删除 Cookie步骤:
1. 获取需要删除的Cookie对象。
2. Cookied对象.setMaxAge(0);
3. HttpServletResponse对象.addCookie(cookie);

7.会话(HttpSession)

HttpSession:是另一种记录客户端状态的机制,不同的是,Cookie保存在客户端浏览器中,而Session保存在服务器中,以键值对的方式存值,默认有效期为30分钟。

实现原理:一个客户端在Web服务器中对应一个各自的HttpSession实例,每个实例都有一个唯一的会话ID,Web容器并不在每个客户端第一次访问时就自动创建HttpSession实例。只有客户端访问某个编写了创建HttpSession实例代码的Servlet时,才会创建一个HttpSession实例。

创建HttpSession对象:
1. HttpSession session = HttpServletRequest对象.getSession();
当服务器存在HttpSession对象时就返回该对象,否则创建一个新对象并返回。

2.HttpSession session = HttpServletRequest对象.getSession(true);
同HttpServletRequest对象.getSession()方法。

3.HttpSession session = HttpServletRequest对象.getSession(false);
当服务器存在HttpSession对象时就返回该对象,否则返回null。

2.设置HttpSession对象有效期(单位秒):
HttpSession对象.setMaxInactiveInterval(int second);
在web.xml文件中配置有效期(单位分钟):

30

注:HttpSession对象有效期是指客户端在指定有效期内没有请求操作而失效,否则一直有效。如指定的有效期为1分钟,那么当在第59秒时有请求操作,则有效期又重新计算。

删除HttpSession对象中指定的属性:HttpSession对象. removeAttribute(String name);

删除整个HttpSession对象:HttpSession对象.invalidate();

通过会话ID(HttpSession对象.getId())可跨浏览器或跨进程实现会话共享,如:
http://localhost:8080/session/;jsessionid=EB207688BC846411518B2BC45731D363

关闭

1:客户端与服务器连接,在服务端就会自动创建一个session对象. session.setAttribute(“username”,username); 是将username保存在session中!session的key值为“username”value值就是username真实的值,或者引用值.
这样以后你可以通过session.getAttribute(“username”)的方法获得这个对象.
比如说,当用户已登录系统后你就在session中存储了一个用户信息对象,此后你可以随时从session中将这个对象取出来进行一些操作,比如进行身 份验证等等.

request.setAttribute()和request.getSession().setAttribute()解释
request.setAttribute()只能在一个request内有效,如果重定向客户端,将取不到值。
request.getSession().setAttribute()可以通过sessionID得到自己的session,将参数存储在session中,即使重定向客户端也没事,这个值可以在多个页面上使用。
比如访问一个网站,登录后用户信息被保存到session中,在session过期之前或者用户关闭页面之前,用户信息可以通过request.getSession().getAttribute()方式 获得。
//admin,路径
Object obj=req.getSession().getAttribute(“admin”);
request在当次的请求的URL之间有效,比如,你在请求某个servlet,那么你提交的信息,可以使用request.getAttribute()方式获得,而当你再次跳转之后,这些信息将不存在。

3.request.getContextPath()拿到的是你的web项目的根路径

8.JSP

JSP:Java Server Page的缩写,基于java语言,以.jsp为后缀,运行在服务端的语言,是一种动态网页开发技术。一个.jsp页面首先会被编译成Servlet,即.java文件,然后编译成字节码文件,即.class文件。

JSP页面构成:静态内容、JSP指令、JSP脚本、JSP声明、JSP表达式和JSP注释组成。
静态内容:HTML元素及静态文本。

Jsp-脚本-指令-动作-标签(自定义标签)-函数(自定义函数)-el=${}

JSP指令:以”<%@”开始,以”%>”结束,有page、include和taglib三种指令。
<%@ page … %>:定义页面的依赖属性。
如:<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
<%@ include … %>:包含其他文件。先包含指定文件再进行编译,不能传参。
如:<%@ include file=“head.jsp”%>
<%@ taglib … %>:引入标签库的定义,可以是自定义标签。
如:<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
参考网址:http://www.runoob.com/jsp/jsp-jstl.html

JSP脚本:以”<%”开始,以”%>”结束,可编写java代码,这里声明的变量为局部变量。

JSP声明:以”<%!”开始,以”%>”结束,定义变量和方法,这里声明的变量为全局变量,且方法只能声明在这里。

JSP表达式:以”<%=”开始,以”%>”结束,表达式返回的为String类型,不能用分号结束。

JSP注释:以”<%–”开始,以”–%>”结束,注释内容客户端无法看到。

JSP内置(隐式)对象共9种,内置对象可直接在JSP中使用:
在这里插入图片描述

EL表达式语言,包含以下内置(隐式)对象:
在这里插入图片描述

param:类似于HttpServletRequest对象.getParameter(String name)方法。
paramValues:类似于HttpServletRequest对象.getParameterValues(String name)方法。

EL表达式可访问在作用域范围里的数据,通过.和[]操作符访问数据,在JSP中有4种作用域:在这4种作用域中取值
属性范围 EL中的名称
page pageScope
request requestScope
session sessionScope
application applicationScope
作用域范围从小到大依次为:page<request<session<application。
session可以重定向,request不可以
访问作用域范围的数据规则:默认按照"由小到大"原则进行查找,即依次从page、request、session和application范围中查找。若在某个作用域里找到则返回,不会继续向后查找。若在所有作用域里均没找到,则返回null。若想指定从某个作用域里查找,则需指定范围,如${sessionScope.属性名}。

9.jQuery的ajax(异步)方式处理请求

jQuery的ajax(异步)方式处理请求:
$.ajax({
url : 请求路径,
type : 请求方式(post|get),
data : 请求参数(url字符串|对象类型),
success : 执行成功后的回调函数,参数(自定义)为返回的数据,
error : 执行失败后的回调函数
});

10.Filter(过滤器接口)

Filter(过滤器接口):Servlet过滤器主要用于对客户端浏览器的请求进行过滤处理,然后将过滤后的请求转交给下一个资源,在Java Web开发中具有十分重要的作用。过滤器实质是在Web应用服务器上的一个Web应用组件,用于拦截客户端浏览器与目标资源的请求,并对这些请求进行一定的过滤处理,然后再发送给目标资源。如果一个Web应用中使用一个过滤器不能解决实际的业务需要,则可部署多个过滤器对请求进行多次处理,从而形成一个过滤器链。除此接口外,与过滤器相关的对象还有FilterConfig对象与FilterChain对象。
在这里插入图片描述

Filter接口定义了3个方法:
1.public void init(FilterConfig filterConfig):初始化方法。

2.public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain):执行过滤操作。

3.public void destroy():销毁方法。

FilterConfig接口:由Servlet容器实现,主要用于获取过滤器中的配置信息。

FilterChain接口:将请求转发给下个资源。

过滤器的开发步骤分为创建和配置:
1.创建过滤器,创建一个类实现javax.servlet.Filter接口。
在这里插入图片描述

1. 在web.xml文件中进行配置。
在这里插入图片描述

过滤器生命周期:
当WEB容器启动时会先调用构造方法实例化(只会实例化一次,即单例模式),再调用初始化init方法(该方法只会被调用一次),当有请求被拦截时会调用doFilter方法(该方法可以被调用多次),最后当服务器关闭时调用destroy方法销毁实例(该方法只会被调用一次)。
注:若在web.xml文件中有多个过滤器配置(即过滤器链),则按照配置的先后顺序执行。

11.Listener接口(监听器)

监听器:在Servlet技术中定义了一些事件,且可以针对这些事件来编写相关的事件监听器,从而对事件做出相应的处理(类似于JavaScript中的事件)。监听器用于监听Web容器的有效期事件,因此它由容器管理。利用Listener接口监听在容器中的某个执行程序,并且根据其应用的需求做出适当的响应。

监听器开发步骤:
1. 创建实现监听器接口的类,常用监听器接口如下。
HttpSessionListener:对HttpSession的状态进行监听。
public void sessionCreated(HttpSessionEvent se):创建新的HttpSession对象时触发。
public void sessionDestroyed(HttpSessionEvent se):销毁HttpSession对象时触发。
HttpSessionEvent:对HttpSession状态进行监听的事件对象。
public HttpSession getSession():获取当前操作的HttpSession对象。

HttpSessionAttributeListener:对HttpSession的属性状态进行监听。
public void attributeAdded(HttpSessionBindingEvent se):添加新属性时触发。
public void attributeRemoved(HttpSessionBindingEvent se):删除属性时触发。
public void attributeReplaced(HttpSessionBindingEvent se):设置已存在属性时触发。

HttpSessionBindingEvent:对HttpSession属性状态进行监听的事件对象。
public String getName():获取属性名。
public Object getValue():获取属性值。
public HttpSession getSession():获取当前操作的HttpSession对象。

ServletContextListener:对ServletContext的状态进行监听(即服务器的启动和销毁)。
public void contextInitialized(ServletContextEvent sce):服务器启动时触发。
public void contextDestroyed(ServletContextEvent sce):服务器关闭时触发。

ServletContextEvent:对ServletContext状态进行监听的事件对象。
public ServletContext getServletContext():获取ServletContext对象。

ServletContextAttributeListener:对ServletContext的属性状态进行监听。
public void attributeAdded(ServletContextAttributeEvent scab):添加新属性时触发。
public void attribute
在这里插入图片描述
Removed(ServletContextAttributeEvent scab):删除属性时触发。
public void attributeReplaced(ServletContextAttributeEvent scab):设置已存在属性时触发。

ServletContextAttributeEvent:对ServletContext属性状态进行监听的事件对象。
public String getName():获取属性名。
public Object getValue():获取属性值。
public ServletContext getServletContext():获取ServletContext对象。

2. 在web.xml文件中配置监听器。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值