Javaweb ---JSP
动态获取项目路径: ${pageContext.request.contextPath}/image/backgroup.jpg
相对路径使用的特殊符号
以下为建立路径所使用的几个特殊符号,及其所代表的意义。
"./":代表目前所在的目录。
"../":代表上一层目录。
以"/"开头:代表根目录。
(1)JSP 是一个servlet。
(2)JSP的声明脚本
1.声明类属性
<%! private integer id;
private String name;
private static Map<String,Object> map;
%>
2.声明静态代码块
<%!
static{
map = new HashMap<String,Object>()
map.put("key1","value1)
}
%>
(3)JSP的表达式脚本
格式:<%= 表达式 %>
作用:在JSP页面上输出数据
特点:
1.所有的表达式脚本都会被翻译到——jspservice()方法中
2.表达式脚本都会被翻译成为out.print()输出到页面上
3.由于表达式翻译的内容都在_jspservice()方法中,所以_jspservice()方法中的对象都可以直接使用。
4.表达式脚本中的表达式不能以分号结束。
输出数据例子:
<%= 12 %>
<%= "我是字符串"%>
(4) JSP的代码脚本
格式:<% java语句 %>
代码脚本的作用是:可以在jsp页面中,编写我们自己需要的功能(写的是java语句)
代码脚本的特点是:
1.代码脚本翻译之后都在_jspservice方法中
2.代码脚本由于翻译到_jspservice()方法中,所以在_jspservice()方法中的现有对象都可以直接使用。
3.还可以由多个代码脚本组合完成一个完整的Java语句。
4.代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据。
<body> <table border="1"> <% for(int i = 0; i <10;i++){%> <tr> <td>第 <%= i %>行</td> </tr> <%}%> </table>
(5) jsp九大内置对象:
request 请求对象
response 响应对象
pageContext jsp的上下文对象
session 会话对象
application ServletContext对象
config ServletConfig对象
out jsp输出流对象
page 指向当前jsp对象
exception 异常对象
(6) jsp四大域对象:
四个域对象分别是:
pageContext PageContextImpl 当前jsp页面范围内有效
request HttpServletRequest类 一次请求内有效
session HttpSession类 一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)
application. ServletContext类 整个web工程范围内都有效(只要web工程不停止,数据都在)
域对象是可以像Map一样存取数据的对象,四个域对象功能一样,不同的是它们对数据的存取范围。
四个域在使用的时候,优先顺序分别是它们从小到大的范围的顺序:
pageContext --> request ---> session --->application
<h1>jsp页面</h1> <% pageContext.setAttribute("key","pageContext"); request.setAttribute("key","request"); session.setAttribute("key","session"); application.setAttribute("key","application"); %> pageContext域是否有值: <%=pageContext.getAttribute("key")%><br> request域是否有值:<%=request.getAttribute("key")%><br> session域是否有值:<%=session.getAttribute("key")%><br> application域是否有值:<%=application.getAttribute("key")%><br>
(7) jsp中out输出和response.getWriter()两个输出方式的区别
<h1>jsp中out输出和response.getWriter()两个输出方式的区别</h1> <% response.getWriter().println("response输出一<br>"); response.getWriter().println("response输出二<br>"); out.write("out输出一<br>"); out.write("out输出二<br>"); out.write(12);//out.write()输出字符串没有问题,但是输出数字时会转换成ASII码 out.print(12);//out.print() 输出任意字符串都没有问题,因为底层都是先转换成字符串再调用out.write()方法 %>
输出结果为:
原理:
(8) 常用标签
1)静态包含
将网页分为三个部分,各个部分独立存在,单独更新,互不影响。
<html>
<head>
<title>Title</title>
</head>
<body>
<%@include file="/include/header.jsp"%>
主体内容
<%@include file="/include/footer.jsp"%>
</body>
</html>
输出整体内容。
静态包含的特点:
1. 静态包含不会翻译被包含的jsp页面
2. 静态包含其实是把被包含的页面拷贝到执行页面
2)动态包含
<jsp:include page="header.jsp"></jsp:include>
动态包含的底层原理
动态包含的特点:
1.动态包含会把jsp文件翻译成java代码
2.动态包含底层代码使用如下代码去调用被包含的jsp页面执行输出.
JsRuntimeLibrary.include(request,response,"include/header.jsp",out,false);
3.动态包含还可以传递参数
<jsp:include page="header.jsp"> <jsp:param name="username" value="root"/> </jsp:include> -------------header.jsp-------- <%= request.getParameter("username") %>
3)请求转发
请求转发标签,它的功能就是请求转发,page属性设置请求转发的路径.
实际跟request.getRequestDispatcher(page)没有差别。
格式如下:
<jsp:forward page="/scope.jsp"></jsp:forward>
请求转发的使用:
(10)Servlet监听器
Listener监听器是javaweb三大组件之一。
Javaweb三大组件分别是:Servlet程序,Filter过滤器,Listner监听器。
2.Listener是JavaEE的规范,就是接口
3.监听器的作用是,监听某种事物的变化,然后通过回调函数,反馈给客户(程序)去做一些相应的处理。
ServletContextListner监听器ServletContextListner 可以监听到ServletContext的创建和销毁。
ServletContext对象在web工程启动的时候创建,在web工程停止的时候销毁。监听到的创建和销毁之后都会分别调用ServletContextListner监听器的方法反馈。
如何使用ServletContextListener监听器监听 ServletContext 对象。
使用步骤如下:
1.编写一个类去实现ServletContextListner
2.实现其两个回调方法。
3.到web.xml去配置监听器
public class MyServletListener implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext对象被创建了"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext对象被销毁了"); } }
web.xml配置
<listener> <listener-class>com.test.MyServletListener</listener-class> </listener>