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>

 

posted @ 2021-10-25 13:56  donkey8  阅读(19)  评论(0)    收藏  举报