JAVAWeb
一、请求servlet的过程
1、从浏览器发出请求到web容器
2、web容器创建HttpServletRequest和HttpServletResponse两个类型的对象
3、调用servlet中service方法,并且将request和response两个对象传递给方法
4、创建PrintWriter输出流
5、将输出流响应给客户端浏览器
二、service()与doGet()和doPost()方法的关系
service根据请求方式如果是get请求调用doGet()方法,如果是post请求调用doPost()方法
三、项目的上下文路径
request.getContextPath();
四、Servlet生命周期
1、装载Servlet类
2、创建Servlet实例
3、调用init()方法:初始化方法,前3步在第一次发送请求时执行
4、调用service()方法:每次向Servlet发送请求时调用一次
5、调用destroy()方法:销毁方法,关闭服务器时调用
五、loadOnStartUp
1、配置Servlet类在启动服务器时完成初始化
2、配置每个Servlet初始化的顺序,数字小的先初始化
3、web.xml配置
<servlet>
<servlet-name>demo2</servlet-name>
<servlet-class>com.jnmd.servlet.DemoServlet2</servlet-class>
<!-- 配置Servlet启动 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo2</servlet-name>
<url-pattern>/demoServlet2</url-pattern>
</servlet-mapping>
4、注解配置
@WebServlet(urlPatterns="/DemoServlet1" , loadOnStartup=5)
六、JSP的生命周期
1、Jsp文件转换为Servlet类
2、编译Servlet类为字节码文件
3、装载Servlet类
4、创建Servlet实例
5、调用_jspInit()方法:初始化,前5步第一次发送请求时执行
6、调用_jspService()方法:每次发送请求调用一次
7、调用_jspDestroy()方法:关闭服务器时执行
一、三种元素
1、脚本元素
(1)注释
html注释:<!-- -->:在网页源码可以看到的
JSP注释:<%-- --%>
Java注释:<% /**/ //%>
(2)声明标签:<%! %>
可以声明变量、常量、方法,使用访问控制修饰符
(3)Scriptlet标签:<%%>
任意的Java代码
(4)表达式输出:<%=%>
输出任意的表达式(常量表达式、变量表达式)
2、指令元素
<%@ 指令元素 属性名="属性值"%>
(1)page指令
import:导包
contentType:设置MIME类型
pageEncoding:字符编码
(2)include指令
file:包含文件的路径
(3)taglib指令
3、动作元素
(1)动态包含:<jsp:include></jsp:include>
(2)可以向包含的文件中传递参数
<jsp:param name="参数名" value="参数值"></jsp:param>
(3)页面转发:<jsp:forward page="转发的页面"></jsp:forward>
服务器端跳转:转发了页面但是url地址不会发生改变
二、四个作用域
1、page:同一个jsp页面
2、request:同一次请求(同一个url)
3、session:同一次会话(同一个浏览器窗口)
4、application:同一次应用(从服务器启动到关闭)
5、向作用域中存储数据:setAttribute("名字",存储的数据)
6、从作用域中获取数据:getAttribute("名字")
7、page范围太小,application范围太大,很少使用,绝大多数使用request和session
三、9个隐含对象
1、request
(1)getContextPath():获取上下文路径
(2)getRequestURI():获取请求地址
(3)getParameter("参数名"):获取请求参数(包含、页面转发、超链接、表单)
2、response
(1)sendRedirect("页面地址"):地址重定向
3、out:输出流
4、session:会话
在servlet类中创建session对象:request.getSession()
5、application
在servlet类中创建application对象
request.getServletContext()
6、config
7、page
8、pageContext
9、exception
四、声明标签与java代码块声明变量的区别
1、声明标签声明的变量是实例变量
2、java代码块中声明的变量是service方法中的局部变量
五、指令包含与动作元素包含区别
1、指令元素包含:静态包含,先包含内容再执行
2、动作元素包含:动态包含,先各自执行,再包含执行结果,在动作元素中可以向包含的页面传递参数。
六、服务器端跳转与客户端跳转的区别
1、服务器端跳转:<jsp:forward></jsp:forward>,地址栏不发生改变,两个页面在同一次请求中,可以使用request作用域共享数据
2、客户端跳转:地址栏发生改变,两个页面不在同一次请求但是在同一次会话中,可以使用session作用域共享数据。
(1)超链接
(2)地址重定向:response.senRedirect("页面地址")
一、<jsp:useBean></jsp:useBean>
1、创建一个类的对象,并且存储到作用域中
2、id:对象名(存储到作用域中的名称)
3、class:类的全名称
4、scope:作用域,缺省是page
二:<jsp:setProperty></jsp:setProperty>
1、为对象的属性赋值
2、<jsp:setProperty name="useBean的id名称" property="属性名"></jsp:setProperty>:将表单中property="属性名"名字的表单参数自动赋值给类中的同名的属性。
3、<jsp:setProperty name="useBean的id名称" property="属性名" param="表单参数名">:将表单中param="表单参数名"自动赋值给类中property="属性名"的属性。
4、<jsp:setProperty name="useBean的id名称" property="属性名" value="数值">:将value值赋值给类中属性
5、<jsp:setProperty name="useBean的id名称" property="*">:将表单中所有的表单参数自动赋值给类中同名的属性。
三、<jsp:getProperty></jsp:getProperty>
1、输出对象的属性值
2、name:useBean的id名称
3、property:对象的属性名
四、EL表达式
1、获取作用域中的属性
(1)page作用域:${pageScope.属性名}
(2)request作用域:${requestScope.属性名}
(3)session作用域:${sessionScope.属性名}
(4)application作用域:${applicationScope.属性名}
(5)${属性名}:按照page-request-session-application的顺序依次从作用域中获取属性,直到获取到为止。
(6)如果作用域中的属性是一个对象,获取对象的属性值
${作用域中的属性名.对象的属性名}
2、获取请求参数
(1)单个值:${param.参数名}
(2)多个值:${paramValues.参数名}
3、EL表达式中的运算符
(1)算数运算符:+ - * / %
(2)比较运算符:> < >= <= == != empty not empty
(3)逻辑运算符:&& || !
4、输出上下文参数:${pageContext.request.contextPath}
五、JSTL核心标签库
1、在作用域中声明变量
<c:set var="变量名" value="数值" scope="作用域,默认是page">
2、条件判断
<c:if test="${条件}" var="将test运算结果存储成一个变量" scope="将test运算结果存储到作用域中">
如果条件为true执行标签体,否则不执行
</c:if>
3、迭代集合、迭代器对象、数组、枚举、以逗号分隔的字符串
(1)
<c:forEach items="${作用域中的对象}" var="自定义循环变量名" varStatus="自定义状态变量名">
循环体
</c:forEach>
(2)状态
状态变量名.count:从1开始的每次循环递增1的数字
状态变量名.index:从0开始的每次循环递增1的数字
4、循环次数
<c:forEach begin="起始值" end="终止值" step="循环变量自增值">
循环体
</c:forEach>
5、地址
(1)<c:url value="url地址" var="将地址声明为一个变量" scope="将变量存储到作用域中">
(2)url地址前没有/:相对路径
(3)url地址前有/:绝对路径(相对于上下文的路径)
一、过滤器
1、拦截资源的请求和响应。
2、Filter接口
(1)init(FilterConfig config):初始化方法,启动服务器时执行
(2)doFilter(ServletRequest request , ServletResponse response , FilterChain chain):执行过滤功能,向拦截的资源发送请求响应的时候执行
(3)destroy():销毁方法,关闭服务器时执行
3、FilterChain接口
(1)doFilter(ServletRequest request,ServletResponse ,response):放过请求
一、监听器
1、作用:当web容器中的request、session、ServletContext发生变化时会自动响应对应的方法。
2、ServletContextListener接口
(1)contextInitalized(SerlvetContextEvent sce):启动服务器时执行
(2)contextDestroyed(ServletContextEvent sce):关闭服务器时执行
3、ServletContextAttributeListener接口
(1)attributeAdded(ServletContextAttributeEvent scae):向application作用域中添加属性时执行
(2)attributeReplaced(ServletContextAttributeEvent scae):修改application作用域中属性时执行
(3)attributeRemoved(ServletContextAttributeEvent scae):删除application作用域中属性时执行
4、HttpSessionListener接口
(1)sessionCreated(HttpSessionEvent hse):浏览器第一次发送请求时执行
(2)sessionDestroyed(HttpSessionEvent hse):会话超时或调用invilidate()方法
5、HttpSessionAttributeListener接口
(1)attributeAdded(HttpSessionBindingEvent hsbe):向session作用域中添加属性时执行
(2)attributeReplaced(HttpSessionBindingEvent hsbe):修改session作用域中属性时执行
(3)attributeRemoved(HttpSessionBindingEvent hsbe):删除session作用域中属性时执行
6、ServletRequestListener接口
(1)requestInitialized(ServletRequestEvent sre):发送请求时执行
(2)requestDestroyed(ServletRequestEvent sre):请求结束时执行
7、ServletRequestAttributeListener接口
(1)attributeAdded(ServletRequestAttributeEvent srae):向request作用域中添加属性时执行
(2)attributeRemoved(ServletRequestAttributeEvent srae):从request作用域中删除属性时执行
(3)attributeReplaced(ServletRequestAttributeEvent srae):修改request作用域中属性时执行
一个客户端浏览器发送的请求,也就是同一次会话。
二、Cookie与Session
1、Session是将数据保存到服务器端,安全但是速度慢
2、Cookie是将数据保存到客户端浏览器,不安全但是速度快
三、Session的超时时间:默认是30分钟
<session-config>
<session-timeout>超时的时间单位分钟</session-timeout>
</session-config>
四、Cookie的API
1、创建Cookie对象
new Cookie("名" , "值");
2、获取Cookie对象的名称
getName()
3、获取Cookie对象的值
getValue()
4、设置Cookie的存活时间
setMaxAge(存活时间单位是秒)
5、将Cookie对象保存到客户端浏览器
response.addCookie(Cookie对象);
6、从客户端浏览器获取Cookie对象
request.getCookies()