JavaWeb horse-line world of Java core technology --JSP

JSP dynamic web technology

A, JavaWeb Profile

First, what is JavaWeb?

  •  JavaWeb are using Java technology to solve the general term for technology-related web Internet field.
  •  You need to run on a specific web server into a web server and web client in two parts
  •  Cross-platform, able to deploy and run multiple platforms

Second, the static pages and dynamic pages

  • Static pages: the content of the page is fixed and will not be updated.
  • The technology used html, css;
  • Dynamic pages: The content of the page displayed by the program dynamic, automatically updated.
  • The technology used for the html, css, database, at least one high-level language (Java, C #, PHP), JavaScript, XML and other mainstream dynamic web scripting technology (jsp / Asp.net / php)

Three, Tomcat server catalog description

 

 

WEB-INF directory is secure Java-based Web applications. The so-called security is the client can not access, only the directory server can access.

web.xml file is a deployment file project

classes folder for placing * .class file

lib folder to store required jar package

Figure:

 

 

Fourth, modify the Tomcat server default port

In the Tomcat installation directory, find conf -> server.xml file

 

 

Found Connector label

 

 

Modify the port attribute values ​​can, after a port modification is completed remember to save and restart the Tomcat server.

 

 

Two, JSP based learning

A, JSP Introduction

JSP full name of the Java Server Pages, which is a fundamental Servlet simplified design, which he had found new Java using HTML tags. JSP is a dynamic web technology standards are also JavaEE standard. JSP and Servlet, is executed on the server side.

 

JSP is actually a Servlet. The greatest feature of this technology is that the JSP: write jsp like writing html, but it is, can only provide static html data for the user compared to html, the technology allows for nested and Jsp java code in the page to provide users dynamic data.

Two, JSP role

  • Servlet:服务器端的小应用程序。适合编写Java逻辑代码,如果编写网页内容------->费时费力,太苦

缺点:不适合设置HTML响应体,需要大量的

response.getWriter().print("<html>");

优点:动态资源,可以编程。

  • HTML:静态内容

缺点:HTML是静态页面,不能包含动态信息;

优点:不用为输出html标签而发愁。

  • jspjava server pages):适合编写输出动态内容,但不适合编写Java逻辑

优点:在原有HTML的基础上添加java脚本,构成jsp页面。

 

三、JSP和Servlet的分工

  • JSP

作为请求发起页面,例如显示表单、超链接。

作为请求结束页面,例如显示数据。

  • Servlet

作为请求中处理数据的环节

 

四、JSP的组成

 

 

jsp=html+java脚本+jsp标签(指令)

jsp中无需创建即可使用的对象一共有9个,称为九大内置对象。

3种java脚本:

  • <%……%> java代码片段(常用),用于定义0-N条java语句,方法内写什么就可以在这里写什么,不能声明方法和类;
  • <%=……%> java表达式,用于输出(常用),用于输出一条表达式(或变量)的结束,print()括号中参数可以放什么,这里就能放什么;
  • <%!……%> 声明,用来创建类的成员变量和成员方法(基本不用),class A{ } 类体中可以放什么,这里就可以放什么。

五、JSP的执行流程及原理

 

 

 

jsp其实是一种特殊的Servlet

  • 当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实是一个Servlet类);
  • 然后再把java编译成.class;
  • 然后创建该类对象;
  • 最后调用它的service()方法;
  • 第二次请求同一jsp时,直接调用service()方法。
  • 在Tomcat的work目录下可以找到jsp对应的.java源代码。

 

1、IE浏览器在访问JSP页面时,Web服务器是如何调用并执行一个jsp页面的?(Servlet)

  •   第一次:转译(翻译) --> 编译 --> 执行
  •   第二次:执行

2、Web服务器在执行jsp页面时,是如何把Jsp页面中的html排版标签发送到客户端的?

  •   out.print("<......>"); 或者 out.write("<......>");

3、Jsp页面中的java代码服务器是如何执行的?

  •   服务器 --> .java文件 --> .class文件 --> 结果out回客户端

4、Web服务器在调用jsp时,会给jsp提供一些什么java对象(内置对象)?

  •   HttpSession、ServletConfig、ServletContent、request、response、out等等。

 

六、JSP的基本语法

  •   Servlet:控制器。重点编写java代码逻辑。(获取表单数据、处理业务逻辑、分发转向)
  •   JSP:代码显示模板。重点在于显示数据。(为什么显示数据不直接用.html文件呢?因为.jsp文件中可以插入java代码显示回显消息,简言之,jsp功能更强大)

 1、JSP的模版元素:简言之就是网页的静态内容

    例如:html标签和普通文本。

 2、JSP的脚本     

  • <%……%> java代码片段(常用),用于定义0-N条java语句,方法内写什么就可以在这里写什么,不能声明方法和类;
  • <%=……%> java表达式,用于输出(常用),用于输出一条表达式(或变量)的结束,print()括号中参数可以放什么,这里就能放什么;

        <%= 2 + 3 %> 等价于out.print(2 + 3);

  • <%!……%> 声明,用来创建类的成员变量和成员方法(基本不用),class A{ } 类体中可以放什么,这里就可以放什么。

 

 

    3、注释

    JSP注释:<%-- 被注释的内容 --%> 特点:安全,省流量

    网页注释:<!-- 网页注释 -->     特点:不安全,费流量

 

七、JSP的三个指令

 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分

 在JSP 2.0规范中共定义了三个指令: 

  •   page指令(页面级别)
  •   include指令(导入其它页面的信息)
  •   taglib指令(标签指令)

例如:

 

 1page

    作用:page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面。

        为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。 

    属性

 

  •      importjava代码中的import是一样的。

        <%@ page import="java.util.Date, java.util.List" %>

        或者:

        <%@ page import="java.util.Date" %>

        <%@ page import="java.util.List" %>

        JSP会自动导入(默认导入)以下的包:

          import java.lang.*;

          import javax.servlet.*;

          import javax.servlet.http.*;

          import javax.servlet.jsp.*;

  •      session: 表示是否会自动创建session对象。其默认值是true
  •       buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小,默认大小是8kb。建议最好不要改大小。
  •      errorPage: 如果页面中有错误,则跳转到指定的资源。(即不让页面弹出404/500等错误)

        errorPage="/uri" 

        如果写"/"则代表当前应用的目录下,绝对路径。

        如果不写"/"则代表相对路径。

  •      isErrorPage: 表示是否创建throwable对象。其默认值是false。作用:输出页面错误信息:by zero
  •      contextType: contentType="text/html; charset=UTF-8" 告诉浏览器使用什么编码来解析文本。等同于 response.setContextType("text/html; charset=utf-8"); 
  •      pageEncoding: 告诉JSP引擎(服务器)要转译(翻译)的文件使用的编码。

        例如:<%@ page  pageEncoding="gbk" %>

  •      isELIgnored: 是否支持EL表达式。 默认是false,表示支持EL表达式。

        例如:${1+1}  等价于out.print(1+1);

   

   

2include

      include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

  •         静态包含:把其它资源包含到当前页面中。

          <%@ include file="/include/header.jsp" %>

  •         动态包含:

          <jsp:include page="/include/header.jsp"></jsp:include>

        两者的区别:转译(翻译)的时间段不同

  •           前者:在翻译时就把两个文件合并
  •           后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。

        使用原则:能用静的就不用动的。原因之一是:可以省略一些代码的书写。

   3taglib

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

Taglib指令的语法:

<%@ taglib uri="uri" prefix="prefixOfTag" %>

  

uri属性确定标签库的位置,prefix属性指定标签库的前缀。

等价的XML语法:

<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

  

      作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。

        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    prefix:前缀(相当于重新给uri起个名字)

 

       示例:

    

           <%   

          if (5 > 3) { 

          out.print(5); 

          } 

        %> 

        <%-- 上下二种方式是等价的 --%>

        <c:if test="${5>3}"> 

          aaa 

        </c:if>

      下面的这种方式很好用!后面慢慢体会。

   

 

八、JSP的动作

使用标签的形式来表示一段java代码。

 

JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

行为标签只有一种语法格式,它严格遵守XML标准:

<jsp:action_name attribute="value" />

  

行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签:

 

九、JSP的九个内置对象

指在JSP的<%=%> 和<% %>中可以直接使用的对象,服务器给我们创建好的对象,直接拿过来用就行了。

      例如:

     

          <%=request.getParameter("name") %>

      <%

         Student stu = new Student();

         stu.setName("tom");

         out.print(stu.getName());

         // request.getRequestDispatcher("/7.jsp").forward(request, response);

       %>

  

 

 

 

十、JSP客户端请求

HttpServletRequest类

request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个页面时,JSP引擎就会产生一个新的对象来代表这个请求。

request对象提供了一系列方法来获取HTTP信息头,包括表单数据,cookies,HTTP方法等等。

接下来将会介绍一些在JSP编程中常用的获取HTTP信息头的方法。详细内容请见下表:

 

 

 

HTTP信息头示例

在这个例子中,我们会使用HttpServletRequest类的getHeaderNames()方法来读取HTTP信息头。这个方法以枚举的形式返回当前HTTP请求的头信息。

获取Enumeration对象后,用标准的方式来遍历Enumeration对象,用hasMoreElements()方法来确定什么时候停止,用nextElement()方法来获得每个参数的名字

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h2>HTTP 头部请求实例</h2>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>Header Name</th><th>Header Value(s)</th>
</tr>
<%
   Enumeration headerNames = request.getHeaderNames();
   while(headerNames.hasMoreElements()) {
      String paramName = (String)headerNames.nextElement();
      out.print("<tr><td>" + paramName + "</td>\n");
      String paramValue = request.getHeader(paramName);
      out.println("<td> " + paramValue + "</td></tr>\n");
   }
%>
</table>
</body>
</html>

  

十一、JSP服务器响应

HttpServletResponse类

response 对象是 javax.servlet.http.HttpServletResponse 类的一个实例。就像服务器会创建request对象一样,它也会创建一个客户端响应。

response对象定义了处理创建HTTP信息头的接口。通过使用这个对象,开发者们可以添加新的cookie或时间戳,还有HTTP状态码等等。

下表列出了用来设置HTTP响应头的方法,这些方法由HttpServletResponse 类提供:

 

HTTP响应头程序示例

接下来的例子使用setIntHeader()方法和setRefreshHeader()方法来模拟一个数字时钟:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h2>自动刷新实例</h2>
<%
   // 设置每隔5秒自动刷新
   response.setIntHeader("Refresh", 5);
   // 获取当前时间
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("当前时间: " + CT + "\n");
%>
</body>
</html>

  

 

 

此篇是我在学习过程中参考菜鸟教程以及笔记和别人博客(黑泽君)完成

Java匹马行天下依旧在更新中,欢迎大家关注,感觉可以的可以点击一下推荐,若如有误,感谢指正,谢谢!

Guess you like

Origin www.cnblogs.com/zyx110/p/10926587.html