- JavaWeb的程序是运行在Tomcat这个Web容器里面的
- Tomcat是一个Web容器,它的作用是用来运行JavaWeb程序的
- Tomcat是一个Web服务器,它的作用是用来处理HTTP协议的请求的
- Tomcat是一个Servlet容器,它的作用是用来运行Servlet程序的
- Tomcat是一个JSP容器,它的作用是用来运行JSP程序的
- Tomcat是一个J2EE容器,它的作用是用来运行J2EE程序的
- Tomcat是一个Servlet/JSP容器,它的作用是用来运行Servlet/JSP程序的
- request:请求对象,代表客户端的请求,包含了请求的信息
- response:响应对象,代表服务器的响应,包含了响应的信息
- session:会话对象,代表客户端和服务器的一次会话,一次会话中有多次请求和响应
- application:代表当前的Web应用,一般用来保存全局的数据
- out:输出对象,用来输出数据的
- config:配置对象,代表当前JSP的配置
- page:当前页面本身(相当于Java中的this)
- pageContext:代表当前页面,可以获取其他八个内置对象
- exception:异常对象,代表当前页面出现的异常
- Servlet的生命周期:从Servlet被创建到Servlet被销毁的过程
- Servlet的生命周期由服务器来管理
- Servlet的生命周期中有三个方法:init()、service()、destroy()
- init():在Servlet被创建时执行,只执行一次,用来加载资源
- service():每次请求Servlet时执行,执行多次,用来处理请求
- destroy():在Servlet被销毁时执行,只执行一次,用来释放资源
- Servlet的生命周期中只有service()方法是必须执行的,其他两个方法不是必须执行的
- Servlet的生命周期中只有init()方法和destroy()方法是只执行一次的,service()方法是执行多次的
- 实现Servlet接口
- 继承GenericServlet类
- 继承HttpServlet类
- Servlet的配置有两种方式:注解配置和web.xml配置
- 注解配置:在Servlet的类上面使用@WebServlet注解来配置Servlet
- web.xml配置:在web.xml文件中使用和标签来配置Servlet
- 重定向:response.sendRedirect("index.jsp");
- 转发:request.getRequestDispatcher("index.jsp").forward(request, response);
- 重定向和转发的区别:
- 重定向是两次请求,转发是一次请求
- 重定向可以访问其他站点的资源,转发只能访问当前站点的资源
- 重定向可以访问WEB-INF目录下的资源,转发不能访问WEB-INF目录下的资源
- 重定向可以访问任意类型的资源,转发只能访问Servlet和JSP资源
- jar包的引用有两种方式:本地引用和网络引用
- 本地引用:将jar包放到WEB-INF/lib目录下
- 网络引用:将jar包放到WEB-INF/lib目录下,然后在项目中右键选择Build Path->Configure Build Path->Libraries->Add JARs...->选择jar包->Apply and Close
- 配置文件的创建:在WEB-INF目录下创建web.xml文件
- 客户端路径:客户端指的是浏览器,客户端路径指的是浏览器的地址栏中输入的路径
- 服务器路径:服务器指的是Tomcat,服务器路径指的是Tomcat的webapps目录下的项目名称
- 客户端路径的获取:request.getContextPath()
- 服务器路径的获取:request.getServletPath()
- 两者均使用绝对路径
- MVC设计模式:Model-View-Controller,模型-视图-控制器
- Model:模型,负责处理业务逻辑,由JavaBean来实现
- View:视图,负责展示数据,与用户进行交互,由Servlet和JSP来实现
- Controller:控制器,负责接收请求,调用模型,转发视图,由Servlet来实现
- MVC设计模式的好处:降低了耦合度,提高了代码的可维护性
- web层:负责接收请求,调用业务逻辑层,转发视图(包含Controller层和View)
- service层:负责处理业务逻辑,调用数据访问层
- dao层:负责操作数据库
- 三层架构的好处:降低了耦合度,提高了代码的可维护性
- request:请求对象,代表客户端的请求,包含了请求的信息
- response:响应对象,代表服务器的响应,包含了响应的信息
- request和response的区别:
- request是HttpServletRequest类型的,response是HttpServletResponse类型的
- request是从客户端到服务器,response是从服务器到客户端
- request是请求的信息,response是响应的信息
- request是请求的参数,response是响应的结果
- request是请求的头,response是响应的头
- request是请求的方法,response是响应的方法
- request是请求的协议,response是响应的协议
- request是请求的URL,response是响应的URL
- request是请求的URI,response是响应的URI
- request是请求的IP,response是响应的IP
- request是请求的端口,response是响应的端口
- request是请求的ServletPath,response是响应的ServletPath
- request是请求的ContextPath,response是响应的ContextPath
- request是请求的QueryString,response是响应的QueryString
- request是请求的Session,response是响应的Session
- request是请求的Cookie,response是响应的Cookie
- request是请求的Attribute,response是响应的Attribute
- request是请求的Parameter,response是响应的Parameter
- request是请求的InputStream,response是响应的OutputStream
- request是请求的Reader,response是响应的Writer
- request是请求的Locale,response是响应的Locale
- request是请求的CharacterEncoding,response是响应的CharacterEncoding
- request是请求的ContentType,response是响应的ContentType
- request是请求的ContentLength,response是响应的ContentLength
- request是请求的Content,response是响应的Content
- request是请求的Header,response是响应的Header
- request.setAttribute():向request域中存储数据
- request.getAttribute():从request域中获取数据
- request.setAttribute()和request.getAttribute()的使用:
- request.setAttribute():request.setAttribute("name", "zhangsan");
- request.getAttribute():String name = (String) request.getAttribute("name");
- 请求转发:request.getRequestDispatcher("index.jsp").forward(request, response);
- 请求包含:request.getRequestDispatcher("index.jsp").include(request, response);
- 请求转发和请求包含的区别:
- 请求转发是一次请求,请求包含是多次请求
- 请求转发只能访问当前站点的资源,请求包含可以访问其他站点的资源
- 请求转发可以访问WEB-INF目录下的资源,请求包含不能访问WEB-INF目录下的资源
- 请求转发可以访问任意类型的资源,请求包含只能访问Servlet和JSP资源
- request.getParameter():获取请求参数的值
- request.getParameterValues():获取请求参数的值,如果有多个值,返回一个数组
- request.getParameter()和request.getParameterValues()的使用:
- request.getParameter():String name = request.getParameter("name");
- request.getParameterValues():String[] names = request.getParameterValues("name");
- Expression Language,用来获取域对象中的数据:
- ${域对象.键名}
- 例如:
- 设置:request.setAttribute("name","xzc");
- 取用:${requsetScope.name}
- EL表达式不指定范围时取用数据的顺序:
- pageContext
- request
- session
- application
- EL表达式取用对象:
- ${域对象.键名.属性名}
- 例如:
- 设置:request.setAttribute("user",new User("xzc",18));
- 取用:${requestScope.user.name}(对象必须有get方法)
- EL表达式取用Map:
- ${域对象.键名.键名}
- 例如:
- 设置:request.setAttribute("map",new HashMap<String,String>());
- 取用:${requestScope.map.key}
- EL表达式取用List:
- ${域对象.键名
[索引]
} - 例如:
- 设置:request.setAttribute("list",new ArrayList());
- 取用:${requestScope.list
[0]
}
- ${域对象.键名
- JSP Standard Tag Library,JSP标准标签库,用来简化JSP开发
- JSTL的使用:
- 引入JSTL的jar包
- 引入JSTL的标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 使用JSTL的标签:
<c:标签名></c:标签名>
- JSTL的标签:
<c:out>
:用来输出数据的:<c:out value="zhangsan"/>
<c:out value="${name}"/>
<c:set>
:用来设置数据的:<c:set var="name" value="zhangsan"/>
<c:set target="request" property="name" value="zhangsan"/>
<c:remove>
:用来移除数据的:<c:remove var="name"/>
<c:remove target="request" property="name"/>
<c:if>
:用来判断条件的:<c:if test="${name == 'zhangsan'}">
<c:if test="${name == 'zhangsan'}">
<c:choose>
:用来选择条件的:<c:choose>
<c:when test="${name == 'zhangsan'}">
<c:otherwise>
</c:choose>
<c:forEach>
:用来遍历集合的:<c:forEach items="${list}" var="name">
<c:forEach items="${list}" var="name" begin="0" end="5">
<c:forEach items="${list}" var="name" step="2">
<c:forTokens>
:用来遍历字符串的<c:import>
:用来导入数据的<c:redirect>
:用来重定向的<c:url>
:用来获取URL的<c:param>
:用来设置参数的<c:catch>
:用来捕获异常的
- JSON:JavaScript Object Notation,JavaScript对象表示法,用来存储数据的
- JSON的使用:
- 引入JSON的jar包
- 使用JSONObject和JSONArray来存储数据
- JSONObject:用来存储对象的
- JSONArray:用来存储数组的
- JSONObject和JSONArray的使用:
- JSONObject:JSONObject json = new JSONObject();
- JSONArray:JSONArray jsonArray = new JSONArray();
- JSONObject和JSONArray的常用方法:
- put():向JSONObject和JSONArray中存储数据
- get():从JSONObject和JSONArray中获取数据
- remove():从JSONObject和JSONArray中移除数据
- toString():将JSONObject和JSONArray转换成字符串
- toJSONObject():将字符串转换成JSONObject
- toJSONArray():将字符串转换成JSONArray
- getJSONObject():从JSONArray中获取JSONObject
- getJSONArray():从JSONObject中获取JSONArray
- length():获取JSONArray的长度
- keys():获取JSONObject的键
- values():获取JSONObject的值
- iterator():获取JSONObject的迭代器
- getNames():获取JSONObject的键
- getBoolean():获取JSONObject的布尔值
- getDouble():获取JSONObject的双精度浮点数
- getInt():获取JSONObject的整数
- getLong():获取JSONObject的长整数
- getString():获取JSONObject的字符串
- getJSONObject():获取JSONObject的JSONObject
- getJSONArray():获取JSONObject的JSONArray
- getBoolean():获取JSONArray的布尔值
- getDouble():获取JSONArray的双精度浮点数
- getInt():获取JSONArray的整数
- getLong():获取JSONArray的长整数
- getString():获取JSONArray的字符串
- getJSONObject():获取JSONArray的JSONObject
- getJSONArray():获取JSONArray的JSONArray
- ajax:Asynchronous JavaScript and XML,异步的JavaScript和XML
- ajax的使用:
- 创建XMLHttpRequest对象:var xhr = new XMLHttpRequest();
- 设置回调函数:xhr.onreadystatechange = function(){}
- 打开连接:xhr.open("GET","/ajaxServlet?name=zhangsan",true);
- 发送请求:xhr.send();
- 获取响应数据:xhr.responseText
- 不需要刷新页面就可以获取数据
- 优点:提高了用户的体验
- 缺点:增加了服务器的压力
- 发起ajax请求的方式:
- jQuery的ajax方法:
- get方法:
$.ajax({ type:"GET", url:"/ajaxServlet", data:{name:"zhangsan"}, success:function(data){ alert(data); } });
- post方法:
$.ajax({ type:"POST", url:"/ajaxServlet", data:{name:"zhangsan"}, success:function(data){ alert(data); } });
- 使用原生的XMLHttpRequest对象:
-
get方法:
var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ alert(xhr.responseText); } } xhr.open("GET","/ajaxServlet?name=zhangsan",true); xhr.send();
-
post方法:
var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ alert(xhr.responseText); } } xhr.open("POST","/ajaxServlet",true); xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xhr.send("name=zhangsan");
-
- jQuery的ajax方法:
- ajax的优缺点:
- 优点:
- 不需要刷新页面就可以获取数据
- 提高了用户的体验
- 缺点:
- 增加了服务器的压力
- 不利于SEO搜索引擎优化
- 优点:
- 过滤器:Filter,用来过滤请求和响应的
- 过滤器的使用:
- 创建过滤器类:实现Filter接口
- 重写过滤器的方法:init()、doFilter()、destroy()
- 配置过滤器:在web.xml文件中使用和标签来配置过滤器
- 过滤器的生命周期:从服务器启动到服务器关闭
- 过滤器的生命周期由服务器来管理
- 过滤器的生命周期中有三个方法:init()、doFilter()、destroy()
- init():在过滤器被创建时执行,只执行一次,用来加载资源
- doFilter():每次请求过滤器时执行,执行多次,用来过滤请求和响应
- destroy():在过滤器被销毁时执行,只执行一次,用来释放资源
- 过滤器的配置:
- 注解配置:在过滤器的类上面使用@WebFilter注解来配置过滤器
- web.xml配置:在web.xml文件中使用和标签来配置过滤器
- 过滤器的执行顺序:
- 如果有多个过滤器,过滤器的执行顺序由过滤器的名称决定
- 过滤器的名称按照字典顺序来执行
- 过滤器的名称在web.xml文件中配置(依据配置顺序执行)
- 过滤器的初始化参数:
- 在web.xml文件中使用标签来配置过滤器的初始化参数
- 在过滤器中使用FilterConfig对象来获取过滤器的初始化参数
- FilterConfig对象的获取方式:
- 在过滤器的init()方法中获取:
FilterConfig filterConfig = filterConfig;
- 在过滤器的doFilter()方法中获取:
FilterConfig filterConfig = filterConfig;
- 在过滤器的init()方法中获取:
- 过滤器配置DispatcherType:
- 在web.xml文件中使用标签来配置过滤器的DispathcerType
- DispatcherType的取值:
- REQUEST:默认值,只有客户端的请求会被过滤
- FORWARD:转发的请求会被过滤
- INCLUDE:包含的请求会被过滤
- ERROR:错误的请求会被过滤
- ASYNC:异步的请求会被过滤
- 监听器:Listener,用来监听域对象的创建和销毁,以及域对象中属性的添加、移除和替换
- 可以监听的域对象:
- ServletContext:代表当前的Web应用,一般用来保存全局的数据(application监听器)
- HttpSession:代表客户端和服务器的一次会话,一次会话中有多次请求和响应
- ServletRequest:代表客户端的请求,包含了请求的信息
- 可以统计在线人数;可以统计网站的访问量;可以统计网站的访问者;可以单点登录
- 监听器的使用:
- 创建监听器类:实现Listener接口
- 监听器的接口:
- 监听创建:
ServletContextListener、HttpSessionListener、ServletRequestListener、
- 监听属性:
ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener
- 监听创建:
- 重写监听器的方法:contextInitialized()、contextDestroyed()、attributeAdded()、attributeRemoved()、attributeReplaced()
- 配置监听器:在web.xml文件中使用标签来配置监听器
- 监听器的生命周期:从服务器启动到服务器关闭
- 监听器的生命周期由服务器来管理
- 监听器的生命周期中有五个方法:contextInitialized()、contextDestroyed()、attributeAdded()、attributeRemoved()、attributeReplaced()
- contextInitialized():在监听器被创建时执行,只执行一次,用来加载资源
- contextDestroyed():在监听器被销毁时执行,只执行一次,用来释放资源
- attributeAdded():在域对象中添加属性时执行
- attributeRemoved():在域对象中移除属性时执行
- attributeReplaced():在域对象中替换属性时执行