Javaweb笔记

第一章 Javaweb开发概述

1.1程序开发体系结构

C/S体系结构介绍
C/S是Client/Server的缩写,即客户端/服务器结构。在这种结构中服务器通常朵用高性能的PC机或工作站,并采用大型数据库系统 (如Oracle或SQL Server) ,客户端则需要安装专用的客户端软件,如下图所示。这种结构可以充分利用两端硬件环境的优势,将任务合理分配到客户端和服务.从而降低了系统的通讯开销。在2000年以前,C/S结构占据网络程序开发领域的主流。Javaweb笔记_第1张图片

B/S体系结构介绍
B/S是Brower/Server的缩写,即浏览器/服务器结构。在这种结构中,客户端不需要开发任何用户界面,而统一用如IE和火狐等浏览器,通过Web浏览器向Web服务器发送请求,由Web服务器进行处理并将处理结果逐级传回客户端,如下图所示。这种结构利用不断成熟和普及的浏览器技术实现原来需要复杂专用软件才能实现的强大功能从而节约了开发成本,是一种全新的软件体采结构。这种体采结构已经成为当今应用软件的首选体采结构。

Javaweb笔记_第2张图片

 两种体系结构的比较

Javaweb笔记_第3张图片

 1.2Web应用程序的工作原理

WEB在计算机网页开发设计中就是网页的意思。网页是网站中的一个页面,通常是HTML格式的。网页可以展示文字、图片、媒体等,需要通过浏览器阅读。

静态网站

早期的Web应用主要是静态页面的浏览,即静态网站

Javaweb笔记_第4张图片

 动态网站

随着网络的发展,很多线下业务开始向网上发展,基于Internet的Web应用也变得越来越复杂,用户所访问的资源已不能只是局限于服务器上保存的静态网页,更多的内容需要根据用户的请求动态生成页面信息,即动态网站。

Javaweb笔记_第5张图片

 1.3Web应用技术

Javaweb笔记_第6张图片

servlet

Servlet是使用Java Servlet API编写的、适合于B/S模式的、运行在Web服务器端的Java类,具有独立于平台和协议的特性,可以生成动态的Web页面。Servlet和客户端的通信采用“请求/响应”模式,其工作原理如图所示。Javaweb笔记_第7张图片

平台无关性:Servlet (JSP会转换为Servlet) 采用Java语言来编写,与Java语言一样具有平台无关性。
效率高:当Servlet程序在加载执行之后,它的实例在一段时间内会一直驻留在服务器的内存中,若有请求,服务器会直接调用Servlet实例来服务。并且当多个客户请求一个Servlet时,服务器会为每个请求者启动一个线程来处理,所以效率高。
功能强大:Servlet属于Java技术体系的有机组成部分,能够访问所有的Java API,可方便地访问数据库、网络、收发邮件、远程方法调用等。
安全可靠:Servlet有强类型检查功能,并且利用Java的垃圾回收机制避免内存管理上的问题。另外,Servlet能够安全地处理各种错误不会因为发生程序上的逻辑错误而导致整体服务器系统的崩溃。 

JSP

JSP(全称Java Server Pages)是由SunMicrosystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编编译成二进制码Javaweb笔记_第8张图片

 当Web浏览器发送来一个页面请求时,Web服务器会首先判断其是否为JSP页面请求。如果该页面只是一般的HTML页面请求,则直接将所请求的页面代码传回给Web浏览器。如果请求的是JSP页面,则由JSP引擎检查所请求的JSP页面是否为第一次被请求,或者是否被修改过。如果是,则JSP引警就将此JSP页面代码转换为Servlet代码(java),然后对其进行编译生成字节码(class) 文件并执行并将执行结果传给Web浏览器进行显示。如果该JSP页面不是第一次被请求,而且没有被修改过,则直接(而不会由JSP引擎调用JVM执行已经编译生成过的字节码文件重复编译),并将执行结果传给Web浏览器进行显示可见:并不是每次请求都需要重复进行转换、编译处理。当某个JSP页面第一次被请求时,会有一些延迟,而再次被访问时就会快很多

JSP的实现是基于Servlet的,JSP页面在运行之前要被解释成Java Servlet。当JSP容器接到对一个JSP页面的请求后,首先判断与JSP文件对应的Servlet类的名字,如果该类不存在或比JSP文件旧,容器就会重新创建一个等价的Servlet类并编译它。

第2章 前端开发基础

2.1HTML

1.HTML标记语言

HTML是一种超文本语言,在因特网上常见的网页制作标注性语言,HTML是通过浏览器的翻译,将网页中内容呈现给用户

标记标记标记<body>标记</p> <pre><code class="language-html"><html> <head> <title>HTML页面 应用记事本编写HTML代码

效果Javaweb笔记_第9张图片

 HTML常用标记


换行标记

段落标记

标题标记

居中标记

  • 文字列表标记

    
    
    设置标题标记
    
    
     

    java开发的3个方向

    Java SE

    主要用于桌面程序的开发。它是学习JavaEE和JavaME的基础,也是本书的重点内容。

    Java EE

    主要用于网页程序的开发。随着互联网的发展,越来越多的企业使用Java语言来开发自己的官方网站,其中不乏世界500强企业。

    Java ME

    center>

    主要用于嵌入式系统程序的开发。

    Javaweb笔记_第10张图片

    表格标记

    表格标记

    标题标记

    单元格标记

    表头标记

    表格行标记

    
    
    学生考试成绩单
    姓名 语文 数学 英语
    张三 89 92 87

    效果

     Javaweb笔记_第11张图片

     表单标记

    ...
    表单标记

    下拉菜单标记

     

    
    
    我的HTML标题
    
    
    
    用户名:
    密码:
    爱好:体育 音乐 看书
    Javaweb笔记_第12张图片

     Javaweb笔记_第13张图片

     超链接与图片标记

    超链接标记图像标记

    2.CSS样式表

    3.JavaScript

    JavaScript是一种基于对象和事件驱动并具有安全性能的解释型脚本语言。它不需要进行编译,而是直接嵌入在HTTP页面中,把静态页面转变成支持用户交互并响应应用事件的动态页面。

    JavaScript的语法
    JavaScript区分大小写
    每行结尾的分号可有可无

    函数的定义
    函数名加一组参数以及置于大括号中需要执函数是由关键字function 、行的一段代码定义的。

    什么是事件和事件处理程序
    JavaScript与Web页面之间的交互是通过用户操作浏览器页面时触发相关事件来实现的。例如,在页面载入完毕时将触发onload(载入) 事件、当用户单击按钮时将触发按钮的onclick事件等。事件处理程序则是用于响应某个事件而执行的处理程序。事件处理程序可以是任意JavaScript语句,但通常使用特定的自定义函数(Function)来对事件进行处理

     String对象Javaweb笔记_第14张图片

     Date对象Javaweb笔记_第15张图片

    第3章 JSP基础语法

    3.1 了解JSP页面

    JSP (Java Server Pages)是由Sun公司倡导、许多公司参与而建立的动态网页技术标准。它在HTML代码中嵌入和Java代码片段( Scriptlet )JSP标签,构成了JSP网页。在接收到用户请求时,服务器会处理Java代码片段,然后生成处理结果的HTML页面返回给客户端,客户端的浏览器将呈现最终页面效果

    Javaweb笔记_第16张图片

     3.2 脚本标识

    JSP表达式

    用于向页面中输出信息。
    语法格式:
           <%=表达式 %>
    参数说明:
    表达式:可以是Java语言的任何表达式,其最终结果将被转换为字符串予以输出。
    说明:JSP表达式不仅可以插入到网页的文本中,用来输出文本内容,在使用JSP中尽可能使用表达式输出的语法来取代out.println();也可以插入到HTML标记中,用于动态设置属性值。

    JSP表达式可以直接把JAVA的表达式结果输出到JSP页面中。表达式的最终运算结果将被转换为字符串类型,因为在网页中显示的文字都是字符串。JSP表达式的语法格式如下
    圆周率是:<%=Math.Pl%>

    声明标识

    <%!
              声明变量或方法的代码
        %>

    声明脚本和方法+感叹号

    Javaweb笔记_第17张图片

     代码片段
    Java代码片段被包含在“<%”和“%>”标记之间。可以编写单行或多行的Java代码,语句以“;”结尾,其编写格式与Java类代码格式相同。

    
    <%
    long startTime = System.nanoTime();
    %>
    输出九九乘法表
    
    <% for (int i = 1; i<= 9; i++) { for (int j = 1; j<= i; j++) {String str = j+ "*" + i+ "=" + j* i; out.print(str + " "); } out.println("
    "); } long time = System.nanoTime() - startTime; %> 生成九九乘法表用时 <% out.println(time / 1000); %> 毫秒。

    Javaweb笔记_第18张图片

    3.3 page指令 

    language属性
    该属性用于设置JSP页面使用的语言,目前只支持Java语言,以后可能会支持其他语言,如C++、C#等。该属性的默认值是Java 。

    extends属性
    该属性用于设置JSP页继承的Java类,所有JSP页面在执行之前都会被服务器解析成Servlet,而Servlet是由Java类定义的,所以JSP和Servlet都可以继承指定的父类。该属性并不常用,而且有可能影响服务器的性能优化

    import属性
    该属性用于设置JSP导入的类包。JSP页面可以入Java代码片段,这些Java代码在调用API时需要导入相应的类包。

    pageEccoding属性
    该属性用于定义JSP页面的编码格式,也就是指定文件编码。JSP页面中的所有代码都使用该属性指定的字符集,如果该属性值设置为iso-8859-1,那么这个JSP页面就不支持中文字符。通常我们设置编码格式为GBK或UTF-8

    contentType属性
    该属性用于设置JSP页面的MIME类型和字符编码,浏览器会据此显示网页内容。

    主要用来设定在整个JSP页面范围内都有效的相关信息。在服务器端被执行,不产生任何内容输出。
    语法格式:
    <%@ 指令名 属性名1= "属性值1 " 属性名2 ="属性值2" ...%>
    参数说明:
    指令名:JSP有3条指令,即page、include 和 taglib。
    属性名:用来指定属性的名称。
    属性值:用来设置属性的值。

    3.4 包含指令

    include指令用于文件包含。该指令可以在JSP页面中包含另一个文件的内容,但是它仅支持静态包含,也就是说被包含文件中的所有内容都被原样包含到该JSP页面中;如果被包含文件中有代码,将不被执行。被包含的文件可以是一段Java代码、HTML代码或者是另一个JSP页面。

    <%@ page language="java" import="java.util.*"contentType="text/htmlcharset=GB18030"pageEncoding="GB18030"%>
    
    
    include指令演示
    
    
    
    当前日期是:<%@include file="date.jsp"%> 

    Javaweb笔记_第19张图片

     3.5 跳转指令

    请求转发标识

    即JSP的请求转发标识 ,用于将请求转发到其他的Web资源(例如,另一个JSP页面、HTML页面、Servlet)。之后当前页面不再执行,而是去执行该标识指定的目标页面,并由目标页面向浏览器返回结果。

    语法格式:
            或
       
               子动作标识
       

    参数说明:
    page属性:用于指定请求转发的目标页面(必须位于当前应用中,而且指定文件路径可以用字符串或JSP表达式来表示)。
    子动作标识:用来向目标页面传递参数。

    传递参数标识


    JSP的动作标识可以作为其他标识的子标识,用于为其他标识传递参数。语法格式如下 :

    第4章 JSP内置对象

    4.1 JSP内置对象概览

    为了Web应用程序开发的方便,在JSP页面中内置了一些默认的对象,这些对象不需要预先声明就可以在脚本代码和表达式中随意使用。JSP提供的内置对象共有9个,如下表所示。

    Javaweb笔记_第20张图片

    Javaweb笔记_第21张图片

    比较常用的有5个:request、response、session、application 、 out。
    注意:一定要记下每个内置对象的名称还有该对象所对应的类型。因为在进行开发时,一定会使用到doc文档进行类或方法的查询,这时只能通过类型查到方法。例如,要想知道request对象有哪些方法,一定要查询javax.servlet.http.HttpServletRequest才能知道。

    4.2 4种属性范围

    JSP提供了4个属性保存范围:
    page:只在一个页面中保存属性,跳转之后无效。

    Javaweb笔记_第22张图片
    request:只在一次请求中保存,服务器跳转后依然有效,客户端跳转后无效。

    Javaweb笔记_第23张图片
    session:在一次会话范围中,无论何种跳转都可以使用,但是新开浏览器无法使用。

    Javaweb笔记_第24张图片
    application:在整个服务器上保存,所有用户都可以使用 。

     Javaweb笔记_第25张图片

    对于以上4种属性范围,都可以使用如下属性操作方法:

    Javaweb笔记_第26张图片

     4.3 request对象

    request对象封装了由客户端提交的HTTP请求的所有细节,主要包括:HTTP头信息、系统信息、请求方式、请求参数等。
    通过request对象提供的方法可以处理HTTP请求中的各项参数。

        4.3.1 访问请求参数

    语法 String request.getParameter(String parameter)
    示例 String id = request.getParameter("id");

    (1)创建index.jsp文件,在其中添加一个超链接(链接到另一个页面deal.jsp),并随该链接请求传递两个参数。
            处理页

    (2)创建deal.jsp文件,在其中通过request对象的getParameter()方法获取请求参数的值并输出。
    <%
         String id=request.getParameter("id");
         String user=request.getParameter("user");
         String pwd=request.getParameter(“pwd”);  
    %>

    可见:通过request对象的getParameter()方法获取请求参数时,如果指定的参数不存在,将返回null;如果指定的参数存在但未指定参数值,将返回空的字符串""

    获取From表单的信息

    语法
    String[] request.getParameterValues(String parameter)

    例如 index.jsp页面代码如下

    
    请输入用户姓名:
    请选择密码提示问题
    请输入问题答案:唱歌跳舞 户外登山 网上冲浪

     获取信息的展示页面show.jsp如下:

    
    用户名: <%=request.getParameter("name").getBytes("ISO8859_1"),"UTF-8" %>
    性别:<%=request.getParameter("sex") .getBytes("ISO8859_1"),"UTF-8"%>
    密码提示问题:<%=request.getParameter("question").getBytes("ISO8859_1"),"UTF-8"%>
    问题答案:<%=request.getParameter("key").getBytes("ISO8859_1"),"UTF-8"%>
    个人爱好: <% String[] like =request.getParameterValues("like"); for(int i=0;i <%=like[i].getBytes("ISO8859_1"),"UTF-8" %> <% }

    效果如下

    Javaweb笔记_第27张图片

        4.3.2 解决中文乱码

    .getBytes("ISO8859_1"),"UTF-8"


        4.3.3 在作用域中管理信息

    语法
    Object request.setAttribute(String name ,Object value)

    request.setAttribute("date",new Date());//添加一个属性

    示例:

  • 获取date属性: <%=request.getAttribute(“date”)%>

  •    

    4.3.4 获取cookie

    cookie:小甜饼,在互联网上则是指小段的文本信息,由服务器端生成并发送给浏览器保存在客户端(以key/value形式保存到客户端指定目录)。
    在用户提交的请求中都会包括在客户端保存的所有的cookie对象(与要访问的网站相关的)。
    用途:通过使用cookie,可以记录用户名和密码,标识用户身份,跟踪重复用户等。
    注意:在使用cookie时,应保证客户机上允许使用cookie。( 设置工具-Internet选项之隐私选项)

    常用方法:
    在创建Cookie对象后,可以使用response对象的addCookie()方法将它发送到客户端。
     ----------------------------------------------------------
    服务器可以通过request对象的getCookies()方法获取所有cookie对象的集合,然后遍历。
    通过cookie对象的getName()方法获取指定名称的cookie对象;
    通过getValue()方法获取cookie对象的值。

    通过cookie的getCookies()方法可以获取到所有的cookie对象集合,然后通过cookie对象的getName()方法获取到指定名称的cookie,再通过getValue()方法即可获取到cookie对象的值。另外将一个cookie对象发送到客户端使用了response对象的addCookie()方法。

    添加cookie

    String name = request.getParameter("name");
    String birthday = request.getParameter("birthday");
    String mail = request.getParameter("mail");
    Cookie myCook = new 
    Cookie("mrCookinfo",name+"#"+birthday+"#"+mail);
    myCook.setMaxAge(60*60*24*365);//设置cookie有效期
    response.addCookie(myCook);

     读取cookie

    Stringl info = new String[]{"","",""};
    Cookie[] cook = request.getCookies();
    if(cook!=null){
     for(int i=0;i

      4.3.5 获取客户端信息

    Javaweb笔记_第28张图片

    • 客户端使用协议:<%=request.getProtocol()%>
    • 客户端发送请求的方法: <%=request.getMethod() %>
    • 客户端的请求路径:<%=request.getContextPath() %>
    • 客户端的IP地址:<%=request.getRemoteAddr()%>
    • 客户端主机的名称:<%=request.getRemoteHost()%>
    • 客户端端口号:<%=request.getRemotePort()%>

       

    4.3.6 显示国际化信息

    浏览器可以通过accept-language的HTTP报头向Web服务器指明它所使用的本地语言。可以通过request对象的getLocale()和getLocales()方法获取这一信息。获取的信息属于java.util.Locale类型(该类型封装了一个国家及其所使用的一种语言。通过这一信息,JSP开发者可以使用语言所特有的信息做出响应。)

    4.4 response对象

    response对象用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应。response对象在JSP页面内有效。

    Javaweb笔记_第29张图片

    4.4.1 重定向网页

    可以通过response对象的sendRedirect()方法,将网页重定向到另一个网页(可以是另一台主机上的网页,这一点与转发不同),在客户端浏览器上将会看到跳转的地址,并重新发送请求链接。在重定向以后,request中的属性全部失效,并且开始一个新的request对象。
    语法格式:
          response.sendRedirect(String path);
    参数说明:
    path:用于指定目标路径(相对路径或同一或不同主机上的其他URL地址)

    4.4.2 处理HTTP文件头

    可以通过response对象的相关方法设置HTTP响应报头(最常用的是禁用缓存、设置页面自动刷新和定时跳转网页)。

    1、禁用缓存
    在默认情况下,浏览器将会对显示的网页内容进行缓存,以提高网页的显示速度。
    对于安全性要求较高的网站,通常需要禁用缓存。
    示例代码:
    <%
        response.setHeader(“Cache-Control”,  "no-store");
        response.setHeader(“Pragma”,  "no-store");
        response.setDateHeader("Expires",0);
    %>

    2、设置页面自动刷新

    <%
         response.setHeader("refresh","10");
                     // 使网页每个10秒自动刷新一次
    %>

    3.设置定时跳转网页


    <%
         response.setHeader("refresh",            
                                  "5;URL=login.jsp");
                     // 5秒后自动跳转到指定的网页
    %>

    4.4.3 设置输出缓冲

    4.5 session对象

    HTTP协议是一种无状态协议,即当一个客户向服务器发出请求,服务器接收请求并返回响应后,该连接就结束了。服务器不会保存相关信息。
    session(会话)的概念:通过session可以在应用程序的Web页面之间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。
    如果在一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。至于多长时间,取决于服务器。例如,Tomcat服务器默认为30分钟(可以编程修改)。

    4.5.1 创建及获取客户的会话

    可以通过session对象的相关方法,存储或读取客户相关信息(例如,用户名或购物信息等)。
    1、通过session对象的setAttribute()方法将信息保存在session范围内。
    语法格式:
      session.setAttribute(String name, Object obj)
    参数说明:
    name: 用于指定作用域在session范围内的变量名;
    obj: 保存在session范围内的对象。
    示例代码:
        session.setAttribute("username", "绿草");

    2、通过session对象的getAttribute()方法获取保存在session范围内的信息。
    语法格式:
        session.getAttribute(String name)
    参数说明:
    name: 指定保存在session范围内的变量名(关键字);
    示例代码:
        session.getAttribute("username");

    4.5.2 从会话中移除绑定的对象

    可以使用session对象的removeAttribute()方法,从会话中移除所存储的对象。
    语法格式:
            removeAttribute(String name)
    参数说明:
    name:用于指定要移除的存储在session作用域范围内的变量名。(该变量必须在session范围内有效,否则将抛出异常。)
    示例代码:
    <%  session.removeAttribute("username"); %>

    4.5.3 销毁session

           在session对象自动销毁(例如当客户端长时间不发请求)之前也可以根据需要(例如需要统计访问本网站的准确人数)对session进行手动销毁。
    示例代码:
           session.invalidate();

    4.5.4 会话超时的管理

    一般来说,session的生命周期在20~30分钟之间。
    当用户首次访问时将产生一个新的会话,以后就会记住这个会话状态。当生命周期超时时,或者服务器端强制会话失效时,这个session就不能再使用了。在开发程序时,需要对session的有效性进行判断。
    可以通过session对象的相关方法来设置会话的生命周期。见p133。
    示例代码:
      session.setMaxInactiveInterval(60*60);

    4.5.5 session对象的应用

    (1)在index.jsp页面中,添加表单以便用户输入用户名;
    (2)在session.jsp页面中,接收用户的输入(用户名)并将其保存在session对象中,用户在该页面中可以通过表单添加最喜欢去的地方;
    (3)在result.jsp页面中,显示用户输入的用户名以及最喜欢去的地方。

    session 与 cookie

    Cookie保存在客户端浏览器中,而Session保存在服务器上。保存Session的方法很多,内存、数据库、文件都有。
    1. 客户端使用浏览器访问网站;
    2. 服务器会向客户浏览器发送一个每个用户特有的会话编号sessionID,让浏览器写入到cookie里(大多数情况)。服务器同时也把sessionID和对应的用户信息、用户操作记录在服务器上,这些记录就是session;
    3. 客户端浏览器再次访问时,会发送cookie给服务器,cookie中就包含sessionID;
    4. 服务器从cookie里找到sessionID,再根据sessionID找到以前记录的用户信息就可以知道他是谁, 之前操控哪些、访问过哪里。

    4.6 application对象

    application对象可将信息保存在服务器中,直到服务器关闭否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”

    Javaweb笔记_第30张图片

     4.6.1 访问应用程序初始化参数

    在web.xml中通过标记配置应用程序初始化参数。
    示例:
     
          nuc
             
               http://www.nuc.edu.cn/
         

     

    application对象提供了两种访问应用程序初始化参数的方法。
    1、getInitParameter()方法
    语法格式:
       application.getInitParameter(String name);
    参数说明:
    name:用于指定参数名。
    用于返回已经命名的参数值。
    示例:
         application.getInitParameter("nuc");

    2、 getInitParameterNames()方法
    语法格式:
         application.getInitParameterNames();
    返回所有已定义应用程序初始化参数名的枚举。
    举例:使用application对象的getInitParameters()方法获取web.xml中定义的全部应用程序初始化参数名。

    4.6.2 管理应用程序环境属性

    与session对象的区别:session对象仅在当前客户的会话范围内有效,一旦超过保存时间,session对象就会被收回;而application对象在整个应用区域内都有效。
    application对象提供了相关方法来管理应用程序环境属性。这些方法包括:
        getAttributeNames()
        getAttributename(String name)
        setAttributename(String key,Object obj)
        removeAttribute(String name)

    4.7 out对象

    out对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区

    使用out对象可以向客户端浏览器输出各种数据类型的数据(即向页面输出信息),在输出非字符串类型的数据时,会自动转换为字符串进行输出。
    out对象提供了两种输出方法:
    1、print()方法

    利用该方法输出信息与使用JSP表达式输出信息相同。
    示例:
       <%   out.print("软件学院");  %>
       <%="软件学院" %>

    2、println()方法

    与print()方法的区别在于:println()方法输出信息后还要输出一个换行符。
    为了在浏览器中看到println()方法的换行效果,应使用HTML的

    标记将要输出文本括起来。
    示例:

          <% out.println("软件学院"); out.println(835); %>

    你可能感兴趣的:(笔记,服务器,数据库)