一、常见的程序架构

1、C/S 架构
  • client/server架构,这种架构需要客户安装软件才可以使用, 比如电脑上安装qq、迅雷等等, c/s架构的优点就是可以编写出界面丰富美观的软件,缺点是升级维护成本较高, 每次更新都需要客户端部分进行更新。
2、B/S架构
  • browser/server架构,b/s架构的开发有时被称为web开发, 这种架构只需要客户的电脑上面装有浏览器就可以使用,比如淘宝、百度等, b/s架构的优点是升级维护成本低,缺点是制作出的网页不如c/s架构的美观, 不过随着技术的发展,这个缺点基本可以忽略了。

二、URL

1、 HTTP协议
  • HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,可以传输HTML文件、图片等文件。用于定义WEB浏览器与WEB服务器之间交换数据的过程及数据本身的格式,HTTP默认端口号是80,在网址中可以省略。

  • HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

2、URL
  • URL:Uniform Resource Locator的缩写

  • 唯一能识别Internet上具体的计算机、目录或文件夹位置的命名约定 alt

  • 协议:http是传输数据时所使用的协议

  • 主机:如果知道主机的IP地址,这里也可以替换成具体的IP地址来定位

  • 资源的位置:news/201409是我们要访问的资源的位置或者资源的路径,而newslist.jsp则是我们要访问的资源的名称

  • 参数:

    • ?page=6是我们访问某个资源时所携带的参数
    • ?表示在该URL中含有参数需要进行传递
    • page=6表示参数名称为“page”,值为6。
    • 如果需要传递多个参数,使用&符号进行连接,如page=6&size=10
3、URI
  • 全称是Uniform Resource Identifier,中文是统一资源标识符,主要用于标识网络资源名称。

三、Tomcat

1、特点
  • Apache Jakarta的开源项目
  • 轻量级应用服务器
  • 开源、稳定、资源占用小
2、目录功能介绍

alt

四、JSP

1、JSP概述
  • JSP全称是Java Server Pages,是一种动态网页技术,JSP其实就是在html中插入了java代码和JSP标签之后形成的文件,文件名以.jsp结尾。 相比html而言,html只能为用户提供静态数据即静态页面,而Jsp技术允许在页面中嵌套java 代码,为用户提供动态数据,从而形成动态页面。
2、工作原理
  • JSP运行在服务器端,当用户通过浏览器请求访问某个JSP资源时,Web服务器会使用JSP引擎对请求的JSP进行编译和执行,然后将生成的页面返回给客户端浏览器进行显示

    alt

3. JSP执行过程

当JSP请求提交到服务器时,简单来说,Web容器会通过三个阶段实现处理:

  • 翻译阶段:当Web容器接收到JSP请求时,首先会对JSP文件进行翻译,将编写好的JSP文件通 JSP容器转换成可识别的Java文件(.java文件)。

  • 编译阶段:经过翻译后的JSP文件相当于写好的Java源文件,此时仅有Java源文件是不够的,必须将Java源文件编译成可执行的字节码文件(.class文件)。所以Web容器处理JSP请求的第二个阶段就是编译。

  • 执行阶段:经过翻译和编译的两个阶段,生成了可执行的二进制字节码文件,此时进入执行阶段。当执行结束后,把生成的结果页面返回客户端浏览器显示。

    alt

  • 一旦Web容器把JSP文件翻译和编译完,Web容器会将编译好的字节码文件保存到内存中,如果客户端再次访问相同的JSP文件,就可以重用这个编译好的字节码文件,没有必要再把同一个JSP文件进行翻译和编译了,这就大大提高了Web系统的性能。

五、 JSP指令

1、page指令:
  • 用于设置当前JSP页面的相关信息,通过属性定义了JSP的特性,实现与JSP容器的通信
  • 每个JSP都有各自的page指令,如果没有对某些属性进行设置,JSP容器将使用默认的属性设置。 alt
2、JSP注释
  • HTML注释:
<!-- 注释-->
  • JSP注释:
<%--JSP注释--%>   <% //单行注释 %>    <% /*多行注释*/ %>
  • 两者之间的区别是html注释可以在客户端浏览器中查看源代码的方式下看到,而JSP注释则不会被看到。
3、JSP表达式 & 声明
  • JSP中声明和使用变量。

    <%String title="谈北京精神";%>
    
  • <%=%>实现页面输出。

    <%=title%>
    
  • 常见错误:

    <%=title; %>
    
  • 使用<%@page%>导包。

        <%@page import="java.util.Date"%> 
    
  • 输出转义字符。

    <%="谈\"北京精神\""%>
    
  • 使用<%%>声明局部变量、使用<%!%>声明全局变量

4、Web程序常见错误:
  • 404错误---找不到访问的页面或资源
    • 运行时,URL输入错误
    • 将页面放在WEB-INF下
    • 外部启动Tomcat,未部署项目
  • 500错误----JSP页面代码有误
    • JSP页面代码有错误
  • 页面无法显示
    • 未启动Tomcat

5、 使用out对象输出显示
  • out对象是JSP提供的一个内置对象,该对象所对应的类是: javax.servlet.jsp.JspWriter,该类继承了IO流中的Writer。所以out是一个输出流对象,用来向客户端输出数据。常用的方法如下: alt

六、HTML表单与request内置对象

1、表单
  • 在HTML中,表单用于填写数据,并通过提交实现数据的请求。提交表单时有两种常见的方式,分别是POST方式和GET方式,这两种提交方式的区别如下:

    alt

2. request对象
  • request对象也是JSP提供的一个内置对象,该对象所对应的类是:javax.servlet.http.HttpServletRequest。代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据,包括头信息、系统信息、请求方式以及请求参数等。

  • request对象的作用域为一次请求

    alt

3、获取用户在注册页面中输入的数据,并在JSP中显示
  • 实现步骤如下:
    • 创建用户注册输入页面
    • 提交表单到JSP
    • 使用request对象获取表单数据
4、使用属性存取数据
  • 在JSP中为了方便数据的使用,有时候需要将数据通过request对象的属性进行保存和读取,这就需要使用到request对象的另外两个方法,分别是setAttribute()和getAttribute()方法。

  • setAttribute()方法:

    request.setAttribute("mess","注册失败");
    
    
  • getAttribute()方法:

    String mess = (String)request.getAttribute("mess");
    
  • 在使用的时候需要注意如下两点:

    • 如果请求对象中没有与参数对应的属性,getAttribute()方法会返回null,所以在使用这个属性值时需要做非空判断,否则会出现空指针异常
    • getAttribute()方法返回值类型是Object类型,而最初存入的类型可能是字符串或者集合等一些其他类型的数据,这时就需要进行数据类型的转换

七、 中文乱码问题

1、中文乱码产生的原因
  • 使用request对象可以获取表单提交的数据,进而可以实现页面输出显示。但是当用户在表单提交中文信息时,有时候会在页面中显示中文乱码。这是JSP页面默认的编码格式为”ISO-8859-1",这个编码方式不支持中文。因此在进行JSP开发时,建议将编码格式修改为通用性强的"utf-8“。
2、中文乱码解决方案
  • get请求出现中文乱码
    • 治标的方法:new String( s.getBytes("iso-8859-1"), "utf-8" );
    • 治本的方法:配置tomcat\conf\server.xml文件
      • URIEncoding="UTF-8"
      • useBodyEncodingForURI="true"
  • post请求出现中文乱码
    • 在服务器端需要在调用request对象的getParameter方法读取参数之前,告诉浏览器如何解码。

    • request.setCharacterEncoding("utf-8");

    • response.setCharacterEncoding("utf-8");

    • <%@ page language="java" contentType="text/html; charset=utf-8"%>

八、 使用转发与重定向实现页面跳转

1、使用重定向实现页面跳转
  • 重定向是指当客户端浏览器提交请求到服务器的JSP处理时,JSP的处理结果是要客户端重新向服务器请求一个新的地址,这种行为就称为重定向。

  • 由于服务器重新定向了URL,因而在浏览器中显示的是一个新的URL地址。由于是从客户端发送新的请求,因而上次请求中的数据就会随之丢失。

2、重定向的语句
  • 将用户请求重新定位到一个新的URL
response.sendRedirect("URL");

3、重定向工作方式

alt

4、使用转发实现页面跳转
  • 在Web服务器端处理用户请求的时候,有时候需要多个Web组件(Servlet/JSP)配合才能完成认为。 一个Web组件(Servlet/JSP)将未完成的处理通过Web服务器转交给另外一个Web组件继续完成。这个转交的过程叫做转发。

  • 在转发之后,客户端浏览器可以看到服务器处理完成后的结果页面,但URL地址并未发生变化,所以浏览器也并未察觉是服务端是经过多个组件的处理后,才产生本次请求的结果。

5、转发语句
request.getRequestDispatcher("URI").forward(request,response);
6、转发工作方式

alt

7、转发与重定向的区别
  • 转发的特点是:

    • 一次请求
    • 地址不发生改变
    • 由于是一次请求,服务器只创建一个request和response对象,因此多个组件可以通过request对象共享数据
    • 只能转发至项目内部的组件
  • 重定向的特点:

    • 两次请求
    • 地址改变
    • 由于是两次请求,服务器创建两个request和response对象,两个组件之间无法通过它共享数据
    • 可以重定向至项目外部的组件

九、session对象

1、session对象
  • session一词的原意是指有始有终的一系列动作,在实际应用中通常翻译为会话。例如:打电话时,甲方拿起电话拨通乙方这一系列的过程就可以称为一个会话,电话挂断时会话结束

  • 一个会话就是浏览器与服务器之间的一次通话,会话可以在多次请求中保存和使用数据

  • 每个session都有一个唯一的sessionid

2、session的工作方式
  • session机制是一种服务器端的机制,在服务器端保存信息。

  • 当程序接收到客户端的请求时,服务器首先会检查是否已经为这个客户单创建了session。判断session是否创建是通过一个唯一的标识“sessionid“实现的。

  • 如果客户端在请求中包含了一个sessionid,则说明在此前已经为客户端创建了session,服务器就会根据这个sessionid将对应的session读取出来。否则,就会重新创建一个新的session,并生成一个与此session对应的sessionid,然后将sessionid在首次响应过程中返回到客户端保存。

3、使用session实现数据的存储和读取
  • 使用session对象保存数据时,需要调用相应的方法。

    alt

  • session保存数据

session.setAttribute(String key,Object value);

  • session中读取数据
Object value = session.getAttribute(String key);

4、session的有效期
  • session的数据是在服务器端的,随着页面访问量的增大,服务器保存的会话数据量也会越来越大,若没有清理session机制,会导致服务器的性能开销问题,严重者可能出现服务器崩溃。为此,设置session的有效期,及时清理不使用的session以实现资源的释放就变得特别的有意义。

  • 在JSP中清除或者设置session过期的方式有两种:

    • 一种是程序主动清除session
    • 一种是服务器主动清除长时间没有发出请求的session。
5、程序主动清除session数据
  • 调用session.invalidate()使得session失效
  • 如果仅仅希望清除session中的某个属性,可以使session.removeAttribute(String name)方法将指定名称的属性清除
用法:session.removeAttribute("userName");

6、服务器主动清除长时间没有再次发出请求的session
  • 通过设置session的过期时间,调用setMaxInactiveInterval(int interval)方法设置session的最大活动时间,以秒为单位,如果在这个时间内客户端没有再次发送请求,那么服务器将清除这个session
  • 通过在配置文件中设置过期时间来实现,即在Tomcat服务器的web.xml文件中和之间添加如下代码:
<session-config>
	<session-timeout>10</session-timeout>
</session-config>

  • 里设置的数值是分为单位,而不是以秒为单位
1、Cookie的概念
  • 一小段文本信息随着请求和响应,在客户端与服务器端之间来回传递。根据设定的时间来决定该文本在客户端保存时长的这种工作模式叫做Cookie。最初服务器将信息发给客户端时,是通过响应数据的Set-Cookie头信息来完成的。
2、Cookie的工作原理
  • 创建Cookie:当用户第一次浏览某个使用Cookie的网站时,该网站的服务器就进行如下工作:

    • 该用户生成一个唯一的识别码(Cookie id),创建一个Cookie对象;
    • 默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。 如果网站希望浏览器将该Cookie存储在磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位的时间(将最大时效设为0则是命令浏览器删除该Cookie);
    • 将Cookie插入到一个 Set-Cookie HTTP请求报头中。
    • 发送该HTTP响应报文。
  • 设置存储Cookie 浏览器收到该响应报文之后,根据报文头里的Set-Cookied特殊的指示,生成相应的Cookie,保存在客户 端。 该Cookie里面记录着用户当前的信息。

  • 发送Cookie 当用户再次访问该网站时,浏览器首先检查所有存储的Cookies,如果某个存在该网站的Cookie (即该Cookie所声明的作用范围大于等于将要请求的资源),则把该Cookie附在请求资源的HTTP请求头上 发送给服务器。

  • 取Cookie 服务器接收到用户的HTTP请求报文之后,从报文头获取到该用户的Cookie,从里面找到所需要的东西

3、 Cookie的应用
  • 创建Cookie对象
  Cookie c = new Cookie(String key,String value);

  • 写入Cookie
   response.addCookie(c);

  • 读取Cookie
Cookie[] cookies = request.getCookies(); 

  • 由于客户端是可以存放多个Cookie的,所以request提供的获取Cookie的方法的返回值是Cookie数组, 如果想进一步获取某一个Cookie信息可以通过遍历数组,分别获取每一个Cookie的key和value。代码如 下:
     Cookie[] cookies=request.getCookies();
                if(cookies!=null && cookies.length>0){
                    for(int i=0;i<cookies.length;i++){
                        if(cookies[i].getName().equals("username")){
                            username=cookies[i].getValue();
                        }
                    }
                }
  • Cookie对象常用方法

    alt

4、Cookie与Session的比较
  • session是在服务器端保存用户信息,Cookie是在客户端保存用户信息

  • session中保存的是对象,Cookie中保存的是字符串

  • session对象随会话结束而失效,Cookie则可以长期保存在客户端

  • Cookie通常用于保存不重要的用户信息,重要的信息使用session保存

十一、application对象

1、application对象
  • application对象类似于系统的“全局变量“,每个Web项目都会有一个application对象,可以在整个Web项目中共享使用数据。application对象常用的方法如下表所示:

    alt

2、作用域:
  • 在JSP中的对象,包括用户创建的对象,都有一个范围属性,这个范围也称为“作用域”。作用域定义了在什么时间内,在哪一个JSP中可以访问这些对象。

  • 在JSP中有四种作用域,分别是:page、request、session和application。

    alt