JSP --学习

最近由于项目须要,用到了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>

  1. JSP Cookies处理

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>

相关文章
相关标签/搜索