1

常用配置项解析

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
  • <% String path = request.getContextPath();%>jsp里面用到意思是:

    • 1.request.getContextPath() 获得当前的项目根目录路径;

    • 2.声明一个字符串变量path;

    • 3.将当前项目的根目录复制给变量path。

  • String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    • 获得应用的根url,比如说你的应用的根路径是 http://localhost:8080,那么你列出的代码就是为basePath赋值为 http://localhost:8080

    • 具体点:

      • 1、request.getScheme() 返回协议的名称 http,和后面的"://" 拼起来就成了 http://

      • 2、request.getServerName() 这是获取你的服务器的名称,如果你的应用部署在本机那么其就返回localhost或者127.0.0.1 ,这2个是等价的

      • 3、request.getServerPort() 是你应用使用的端口,比如8080或者80


只用在修改类和配置文件时才需要重新部署

JSP原理

由于原理上是Servlet, 所以JSP/Servlet在一起。

HTML、Servlet和JSP

  • 1、HTML:静态页面,不能包含java代码,只能有HTML有关的标记

  • 2、Servlet:写java代码,做页面的输出,不是很方便(开发效率很低)

  • 3、JSP:HTML+java


学习JSP技巧

1、JSP就是Servlet,学习好JSP的关键(语法),时刻想到他对应的Servlet。
图片描述

2、时常翻阅JSP对应的Servlet源码(到tomcat下查看jsp相对应的*.java文件)

JSP的语法

模板元素

  • 指JSP中的那些HTML。开发时先编写模板元素,因为他们决定页面的外观。

Java程序片段

  • 语法:<%java程序%>

  • 出现在JSP对应Servlet的service方法中。

  • <%声明的变量:局部%>

Java表达式

  • 语法:<%=表达式%>

示例

        <!-- 以表格的形式打印出来 -->
       <table border = "1" width = "438">
               <tr>
                   <th>姓名</th>
                   <th>性别</th>
                   <th>年龄</th>
               </tr>
               <% 
                   for(student s : stu){
               %>
               <tr>
                   <td><%=s.getName()%></td>
                   <td><%=s.getGender()%></td>
                   <td><%=s.getAge()%></td>
               </tr>
               <%
               }
                %>

JSP声明

语法:<%!

%>
作用:定义JSP对应Serlvet的成员(变量和方法、静态方法)全局变量

注意:开发中很少用。面试和考试经常考。

JSP注释

语法:<%--这是注释--%>

作用:注释掉的代码,JSP引擎不会翻译到Servlet源码中。要注意和HTML注释的区别。

JSP指令:

  • 指令是为JSP引擎设计的。而只是告诉引擎如何处理JSP页面中的其余部分(非指令部分);
    基本语法格式:<%@指令 属性1=”值1” ....%>.

  • 一般把指令放在JSP页面的顶部(不是必须的)

  • 指令的属性可以写在一个指令的中,也可以分开写:比如:
    <%@指令 属性1=”值1” 属性2=”值2”%>.

  • 等价于:
    <%@指令 属性1=”值1” %>.

  • <%@指令 属性2=”值2”%>.

page:
  • 属性:

  • language:告知引擎,脚本用的是java。默认java,支持java。不写也行。

  • extends:告知引擎,JSP对应的Servlet的父类是哪个。不需要写,也不要改。

  • *import:告知引擎,导入哪些包。

  • 注意:引擎自动导入: java.lang.;javax.servlet.;javax.servlet.http.;javax.servlet.jsp.;

导入的形式:
  • <%@page import=”java.util.Date,java.util.UUID”%>或者: <%@page
    import=”java.util.Date”%> <%@page import=”java.util.UUID”%>

  • 用Eclipse:Alt+/ 自动导入

  • *session:告知引擎是否产生HttpSession对象,即是否在代码中调用request.getSession()。默认值true。 buffer:JspWriter用于输出JSP的内容到页面上。告知引擎,设定他的缓存大小。默认8Kb。

  • *errorPage:告知引擎,当前页面出现了异常,应该转发到哪个页面上(路径写法:/代表着当前应用,相对路径)

  • 配置全局错误页面:web.xml
    图片描述

  • isErrorPage:告知引擎,是否抓住异常。如果该属性为true,页面中就可以使用exception隐含对象,打印异常的详细信息。

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
    
    
    <body>
        <%=exception.getMessage() %>
        <h1>服务器出错了</h1>
        <h1>服务器出错了</h1>
        <h1>服务器出错了</h1>
        <h1>服务器出错了</h1>
        <h1>服务器出错了</h1>
        <h1>服务器出错了</h1>
        <h1>服务器出错了</h1>
        <h1>服务器出错了</h1>
        <h1>服务器出错了</h1>
      </body>
    
  • contentType:告知引擎,响应正文的MIME类型。
    contentType=”text/html;charset=UTF-8” 相当于response.setContentType(“<%=exception.getMessage() %>”);

  • pageEncoding:告知引擎,翻译JSP时(要从磁盘上读JSP文件)所用的码表。要和存的时候编码一致
    图片描述

  • pageEncoding=”UTF-8”:相当于,告知了引擎用UTF-8读jsp,还response.setContentType(“text/html;charset=UTF-8”);

  • isELIgnored:告知引擎,是否忽略EL表达式。默认值是false,不忽略。


include:

  • 包含属性:file,以”/”开头,就代表着当前应用。

taglib:

  • 引入外部的标签。实现视图代码重用,很少量的代码就能实现很复杂的效果

  • 要使用标签功能必须先声明标签库以及标签前缀
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

  • uri:外部的标签的uri地址,好比名称空间

  • prefix:前缀。

JSP中的转发和包含

  • 1、转发:<jsp:forward page="/10forward.jsp"></jsp:forward>

  <jsp:forward page="/10forward.jsp">
        <jsp:params value="124" name="username"
    </jsp:forward>
  • forward不仅可以跳转到本应用的另一个servlet jsp页面,也可以跳转到另外一个文件,甚至WEB-INF文件夹下的文件

  • 当使用forward进行跳转时, 地址栏会显示跳转前的访问地址,跳转是在服务器端实现的

  • 重定向是利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码

  • 进行重定向时,跳转是在客户端实现的。也就是客户端实际上请求了服务器两次。第一次获得重定向状态码和重定向的网址,第二次访问真实网址,

  • JSP的内置标签。

  • 2、参数:不能单独使用
    向目标传递请求参数

  • 3、包含:(面试题)

    • 静态包含:<%@include %> 在编译的时候,将源码加了进去

    • 动态包含:其余的

    • <jsp:include page=””/>

  • 总结:用标签可以少些java脚本。


JSP九个隐含对象

图片描述

PageContext抽象类(很重要)每个页面都有自己唯一的pageContext对象

  • 1、本身是一个域(范围)对象,还能操作其他3个域对象中的属性

    • 页面范围:

    void setAttribute(String name,Object value);
    void removeAttribute(String name);
    Object getAttribute(String name);

    • 操作其他域对象中的属性:

    void setAttribute(String name,Object value,int scope);
    void removeAttribute(String name,int scope);
    Object getAttribute(String name,int scope);

    • int scope:常量,PageContext PAGE_SCOPE(页面) REQUEST_SCOPE(请求)SESSION_SCOPE(会话)APPLICATION_SCOPE(应用)

  • 在四个范围中依次查找指定名称对象的方法:
    PAGE(页面) REQUEST(请求)SESSION(会话)APPLICATION(应用)

  • 超出页面范围结果为null,如果是同一个对象,那么就会输出value值。

    • Object findAttribute(String name); 从四个对象中依次查找

  • 2、获取其他八个JSP隐含对象(自定义标签时用)

    PageContext.getRequest();
    getServletContext();
    getServletConfig();
    getException();
    get...

  • 3、提供转发和包含的简易方法

    pageContext.include(String url);

    • 参数必须以“/”开始,“/”表示本web应用程序的根目录(WebRoot)

  • pageContext demo

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>pageContext demo</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
 <body>
    <% pageContext.setAttribute("p", "pp"); %>
    <% pageContext.setAttribute("p", "pp", pageContext.PAGE_SCOPE); %>
    
    <% request.setAttribute("p", "rp"); %>
    <% pageContext.setAttribute("p", "rp", pageContext.REQUEST_SCOPE); %>
    
    <% session.setAttribute("p", "sp"); %>
    <% pageContext.setAttribute("p", "sp", pageContext.SESSION_SCOPE); %>
    
    <% application.setAttribute("p", "ap"); %>
    <% pageContext.setAttribute("p", "ap", pageContext.APPLICATION_SCOPE); %>
     <%--
    <jsp:forward page = "2.jsp"></jsp:forward>
    --%>
    <%--
        response.sendRedirect("2.jsp");
        --%>
    <%
    
        pageContext.forward("/test/2.jsp");
     %>
    
     <%--
    <%=pageContext.getAttribute("p")%>
    <%=request.getAttribute("p")%>
    <%=session.getAttribute("p")%> --%>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>2</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    page:<%=pageContext.getAttribute("p")%></br>
    request:<%=request.getAttribute("p")%></br>
    session:<%=session.getAttribute("p")%></br>
    application:<%=application.getAttribute("p")%></br>
  </body>
</html>

四大域对象

  • 实际开发中:存放数据的。

  • PageContext:页面范围。最小。开发中很少用。演示代码。

  • ServletRequest:请求范围。不同的资源,只有用转发。

  • HttpSession:会话范围。多次请求共享数据,但不同的客户端不能共享。

  • ServletContext:应用范围。最大。尽量少用。用时要做同步处理。

JSP开发的最佳实践

  • Servlet:擅长写Java代码逻辑,不擅长输出html的内容。

  • 开发中作为:控制器。

  • JSP:不擅长写Java代码逻辑,擅长显示结果。

  • 开发中作为:视图(显示结果)
    图片描述

JavaBean的概念

  • 1、JavaBean又称之为POJO(Plain Old Java Object)、VO(Value Object)、DO(Data Object)

  • 2、JavaBean的书写规范

    • a、必须是public的

    • b、提供默认的构造方法

    • c、字段都是私有的: private String username;

    • d、提供公有的getter或setter方法:属性。

    • getUsername():读属性,属性名:username.

    • setUsername(String username):写属性,属性名:username。

    • 注意:private boolean married; getMarried()===isMarried()

    • e、一般需要实现java.io.Serializable接口。

  • 结论:JavaBean在JavaEE开发中,主要担当封装数据用的。


SportCloud
157 声望9 粉丝

数据仓库


« 上一篇
AJAX
下一篇 »
XML

引用和评论

0 条评论