最近由于项目须要,用到了jsp技术,所以学习下html
1..JSP简介java
1.1 全称java server pages,它是一种动态网页开发技术。web
1.2 基于它开发的web应用能够跨平台(Linux/Windows)使用。spring
1.3 使用jsp标签在HTML网页中插入java代码,标签一般以<%开头,以%>结束。数据库
2.JSP结构apache
网络服务器须要一个容器来处理JSP页面,该容器负责截获对JSP页面的请求。经常使用的容器是Apache系列的Tomcat。json
3.JSP处理流程后端
3.1 客户端经过浏览器向服务器发送一个http请求。--发请求api
3.2 web服务器识别出这是一个对jsp网页的请求,并将该请求传递给jsp容器。--识别xx.jsp文件数组
3.3 jsp容器从磁盘中载入JSP文件,而后将他们转换成servlet,并将全部的JSP元素转换成java。 --转换成xx_servlet.java文件
3.4 jsp容器将servlet编译成可执行类,并将原始请求传递给servlet引擎。--编译成xx_servlet.class
3.5 WEB服务器调用servlet引擎,载入执行servlet类。-- 容器中执行servlet
3.6 WEB服务器以静态HTML网页形式将HTTP response返回到客户端浏览器中。--返回给客户端
3.7 浏览器处理HTTP response中动态产生的HTML文件(相似处理静态网页同样)。
4.JSP生命周期
4.1 JSP编译
浏览器请求JSP页面时,JSP引擎首先会检查是否须要编译这个文件,若是这个文件没有被编译过,或是上次编译后被更改过,则须要编译这个JSP文件。
编译过程三个步骤
1>解析JSP文件
2>将JSP文件转换成servlet
3>编译servlet
4.2 JSP初始化
容器载入JSP文件后,它会调用jspInit()方法。
通常来讲程序只会初始化一次,servlet也是如此。一般状况下咱们能够在jspInit()方法中初始化数据库链接、打开文件和建立查询等。
4.3 JSP执行
这个阶段完成了JSP生命周期中全部与请求相关的交互行为。
当JSP网页完成初始化后,JSP引擎调用jspService()方法,该方法须要一个httpServletRequest对象和httpServletResponse对象做为参数,该方法在每一个request中被调用一次并负责产生与之相对应的response,还负责产生http方法的回应,如get、post等等。
4.4 JSP清理
好比释放数据库链接或者关闭文件夹等。
5 JSP语法
5.1 jsp是一种脚本语言,语法格式以下:
<% 代码片断 %>
5.2 任何文本、HTML标签、jsp元素都应该写在脚本程序的外面
以下示例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html> <head> <title>第一个JSP程序</title> </head> <body> <% out.println("Hello World!"); %> </body> </html>
5.3 JSP声明
JSP声明语法格式以下
<% ! 声明1;声明2;……%>
程序示例
<%! int i = 0; %> <%! int a,b,c; %> <%! UserInfo userInfo = new UserInfo('lxl','0','29')%>
5.4 JSP表达式
一个JSP表达式中包含的脚本语言表达式,先被转换成String,再插入到表达式出现的地方。
JSP表达式的语法格式以下
<%= 表达式 %>
程序示例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html> <head> <title>第一个JSP程序</title> </head> <body> <p> Today's date:<%= (new java.util.Date()).toLocaleString()%> </p> </body> </html>
运行后获得以下结果
Today's date:2016-3-23 15:46:01
5.5 JSP注释
JSP注释语法格式以下
<%!-- JSP注释 --%>
5.6 JSP指令
JSP指令用来设置与整个JSP页面相关的属性。
JSP指令语法格式以下
<%@ 指令 属性="value" %>
经常使用的三种指令标签
<%@ page 属性= ...... %> 定义页面的依赖属性,好比页面的编码格式 <%@ include 属性= ...... %> 定义包含其余文件 <%@ taglib 属性= ...... %> 定义引入标签库
5.7 JSP控制流语句
JSP提供对java语言的全面支持,咱们能够在JSP程序中使用java api、使用控制语句等。
示例以下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- 该部分注释在网页中不会被显示--%> <%! int day = 3; %>
<!DOCTYPE html>
<html> <head> <title>第一个JSP程序</title> </head> <body> <% if (day == 3) { %> <p> Today is 3</p> <% } else { %> <p> Today is not 3 </p> <% } %> </body> </html>
5.8 JSP运算符
JSP支持全部java逻辑和算术运算符。
6 JSP指令
JSP指令用来设置整个JSP页面相关的属性,如网页编码格式等。
语法格式以下:
<%@ 指令 属性="value" %>
指令能够有多个属性,它们以键值对的形式存在,并用逗号隔开。
jsp三种指令标签
6.1 page指令
page指令为容器提供当前页面的使用说明,一个jsp页面能够包含多个page指令。
page指令经常使用属性
contentType 指定当前JSP页面的MIME类型和字符编码
errorPage 指定当JSP页面发生异常时须要转向的错误处理页面
import 导入要使用的Java类
info 定义JSP页面的描述信息
language 定义JSP页面所用的脚本语言,默认是Java
6.2 include指令
jsp经过include指令来包含其余文件,被包含的文件能够是jsp文件、HTML文件、文本文件等。
6.3 taglib指令
jsp api容许用户自定义标签。taglib指令能够引入一个自定义的标签库。
7 jsp动做元素
jsp动做元素是在请求处理阶段起做用,它是用xml语法写成的。
7.1 利用jsp动做元素能够完成以下操做:
1>动态的插入文件
2>重用javaBean组件
3>重定向展现页面
4>生成html代码
动做元素语法以下:
<jsp:action_name attribute="value" />
经常使用的动做元素以下
jsp:include 引入文件
jsp:useBean 实例化一个javaBean
jsp:setProperty 设置某个javaBean属性
jsp:getProperty 输出某个javaBean属性
jsp:forward 将请求转入另外一个新的页面
jsp:element 定义动态的xml元素
jsp:attribute 设置xml元素属性
jsp:body 设置xml元素内容
jsp:text 在jsp页面中写入文本模板
常见的属性以下
全部的动做元素都要有两个属性:id属性和scope属性
id属性:动做元素的惟一标识
scope属性:标识动做元素的生命周期
jsp:include示例以下
在工程中定义date.jsp文件,以下
<p> Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
在MyJsp.jsp中调用上述文件,注意date.jsp和MyJsp.jsp文件均放在服务器的根目录下,在能够这样直接引用。
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body> This is my JSP page. <br>
<jsp:include page="date.jsp" flush="true" />
</body> </html>
运行出的效果以下
8 jsp隐式对象
jsp隐式对象是jsp容器为每一个页面提供的java对象,开发者能够直接使用它(即不须要声明)。
常见jsp支持的隐式对象
对象 描述
request httpServletRequest类的实例对象
response httpServletResponse类的实例对象
session httpSession类的实例对象
application ServletContext类的实例对象,与应用上下文有关
config ServletConfig类的实例对象
经常使用对象描述
8.1.request对象
它是javax.servlet.http.HttpServletRequest 类的实例,每当客户端有一次http请求时,web容器会实例化一个request对象来表明这个请求。
request对象提供了一系列方法来获取http头部信息。
8.2.response对象
它是javax.servlet.http.HttpServletResponse类的实例,当服务器建立request对象时,同时会产生响应这个客户端的response对象。
8.3.session对象
它用来跟踪客户端请求过来的会话。
8.4.application对象
它是javax.servlet.ServletContext 类的实例,它在jsp页面初始化时被建立,随着jspDestroy()方法法的调用被移除。
9 jsp客户端请求
当浏览器请求一个网页时,它会向服务器发送许多头部消息,常见的头部消息以下:
头部消息 描述
Accept-Charset 指定浏览器使用的字符集,例如ISO-8859-1
Accept-Encoding 指定编码类型
Accept-Language 指定客户端语言
Authorization 在访问受密码保护的网页时识别不一样的用户
Connection 代表客户端是否能够处理HTTP持久链接。持久链接容许客户端或浏览器在一个请求中获取多个 文件。Keep-Alive 表示启用持久链接
Content-Length 仅适用于POST请求,表示 POST 数据的字节数
Cookie 返回先前发送给浏览器的cookies至服务器
Host 指出原始URL中的主机名和端口号
User-Agent 用来区分不一样浏览器或客户端发送的请求,并对不一样类型的浏览器返回不一样的内容
10 jsp服务器响应
response响应主要是将jsp容器处理后的结果返回给客户端,能够经过response变量设置http的状态和向客户端发送数据。
状态行包含HTTP版本信息(如:HTTP/1.1)、状态码(如:200)、状态码信息(如:OK)。常见头部信息以下:
响应头 描述
Connection 浏览器是否要使用持久的HTTP链接。close值 命令浏览器不使用持久HTTP链接,而keep-alive 意味着使用持久化链接。
Content-Encoding 指定传输时页面的编码规则
Content-Language 表述文档所使用的语言
Content-Length 代表响应的字节数。只有在浏览器使用持久化 (keep-alive) HTTP 链接时才有用
Content-Type 代表类容类型,例如:application/json;charset=utf-8
11 JSP表单处理
11.1 读取表单数据
getParameter() 该方法能够获取单个表单参数的值
getParameterValues() 接收数组变量(即名字同样,值有多个),例如:checkbox类型
getParameterNames() 该方法能够获取全部变量的名称,该方法返回类型是Emumeration
getInputStream() 获取来自客户端的二进制数据流
示例以下:
1.MyJsp.jsp文件以下,即 接收文件
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body> This is my JSP page. <br>
<jsp:include page="date.jsp" flush="true" /> <p> one parameter:<%= request.getParameter("one")%> </p> <p> two parameter:<%= request.getParameter("two")%> </p>
</body> </html>
2.使用URL的GET方法实例
http://localhost:8080/wxm_cms/MyJsp.jsp?one=lixianl&two=29
3.运行效果以下
4.使用表单的GET方法实例
4.1 首先写一个html文件,命名为ceshi.html,类容以下
<html> <body> <form action="MyJsp.jsp" method="GET"> one: <input type="text" name="one"> <br /> two: <input type="text" name="two" /> <input type="submit" value="Submit" /> </form> </body> </html>
4.2 将MyJsp.jsp文件与ceshi.html文件都放在<tomcat安装目录>/webapps/ROOT目录下,个人目录以下
D:\tomcat7\apache-tomcat-7.0.63\webapps\ROOT
4.3 启动tomcat
4.4 在浏览器输入
http://localhost:8080/ceshi.html
出现以下页面
在输入框里输入 lxl 30,点击submit,出现以下界面,注意查看地址栏参数
5.使用表单的POST方法实例
5.1 只须要修改ceshi.html文件,修改form的提交方式为POST,文件以下
<html> <body> <form action="MyJsp.jsp" method="POST"> one: <input type="text" name="one"> <br /> two: <input type="text" name="two" /> <input type="submit" value="Submit" /> </form> </body> </html>
5.2 测试方法同 4同样
6 传递checkbox数据到jsp程序
复选框checkbox能够传递一个或多个数据,修改ceshi.html代码以下
<html> <body> <form action="MyJsp.jsp" method="POST" target="_blank"> <input type="checkbox" name="A" /> A <input type="checkbox" name="B" /> B <input type="checkbox" name="C" /> C <input type="checkbox" name="D" /> D <input type="submit" value="Submit" /> </form> </body> </html>
修改MyJsp.jsp代码以下
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body> This is my JSP page. <br>
<jsp:include page="date.jsp" flush="true" /> <p> one:<%= request.getParameter("A")%> </p> <p> two:<%= request.getParameter("B")%> </p> <p> three:<%= request.getParameter("C")%> </p> <p> four:<%= request.getParameter("D")%> </p>
</body> </html>
我点击B、C两项,截图以下
运行结果以下
12 jsp过滤器
jsp过滤器其实是一个java类,它的做用
1.前台访问后端时,拦截一些非法的访问
2.前台访问成功,根据权限(或其余条件)返回给客户端部分信息
过滤器通常设置在web.xml文件中,而后映射servlet、jsp文件的名字。我作过的项目一个实例
过滤字符编码格式 utf-8,
若是须要多重过滤,则只须要顺序的写上过滤条件便可。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>pets</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>pets</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <context-param> <param-name>webAppRootKey</param-name> <param-value>pets.root</param-value> </context-param> <!-- Log4j 配置 --> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>10000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
</web-app>
13.1 Cookies通常用于安全系验证,服务器一般采用以下方式来识别 再次访问的客户端
1>客户端第一次请求服务器时,服务器返回一系列cookies给客户端
2>客户端将返回的cookies信息保存在本地
3>客户端再次访问服务器时,须要将cookies信息一块儿发送给服务器,服务器经过这些cookies信息来识别该客户端是否是上次访问的客户端。
13.2 cookies解析
cookies信息一般设置在http请求的头部中。
设置cookie通常是三个步骤
1>建立一个cookies对象
Cookie cookie = new Cookie("key","value");
2>设置有效期
cookie.setMaxAge(602424);
3>将cookie添加到http响应头中
response.addCookie(cookie);
14 jsp 页面重定向
当咱们须要从一个页面跳往另一个页面时,就须要用到jsp的重定向了。
重定向有两种方法
方法1
使用response.sendRedirect()
示例以下
<%@ page import="java.io.,java.util., javax.servlet.*" %>
<html> <head> <title>test direction</title> </head> <body>
<% //方法1:使用response.sendRedirect();方法 response.sendRedirect("http://www.qq.com/"); %>
</body> </html>
方法2
咱们一般使用setStatus()和setHeader()方法来实现重定向。
<%@ page import="java.io.,java.util., javax.servlet.*" %>
<html> <head> <title>test direction</title> </head> <body>
<!-- <% //方法2:使用response.setStatus()和response.setHeader()方法 String site = new String("http://www.baidu.com"); response.setStatus(response.SC_MOVED_TEMPORARILY); response.setHeader("Location",site); %> -->
<!-- <% //方法2:使用response.setStatus()和response.setHeader()方法 response.setStatus(response.SC_MOVED_TEMPORARILY); response.setHeader("Location","index.jsp"); %> -->
</body> </html>
15 jsp点击量统计
用途:记录某个页面被访问的次数
实现:能够利用getAttribute()和setAttribute()方法来实现
实例
<%@ page import="java.util.*" %>
<html> <head> <title>Applcation object in JSP</title> </head> <body>
<% Integer hitCounts = (Integer)Applcation.getAttribute("hit");
if(hitCounts == null || hitCounts == 0) { out.println("首次访问"); hitsCount = 1; }else { out.println("再次访问"); hitsCount += 1; } //设值 application.setAttribute("hit", hitCounts);
%>
</body> </html>