JSP
2020-12-11 16:38:52 1 举报
AI智能生成
jsp基础
作者其他创作
大纲/内容
3、Servlet
1、Servlet的概述
1.servlet的定义与作用
定义:Servlet是Java Web开发中的一种Web组件
作用:Servlet能够对来自客户端浏览器的各种请求做出相应的响应,
并向客户端浏览器返回结果页面。(处理客户端请求与响应。)
2.创建servlet的步骤
①方法一:通过注解完成servlet的映射
第一步:继承HttpServlet类;
第二步:重写服务方法;重写doget()、dopost()方法
第三步:配制web.xml文件;
例如:<!-- servlet:映射servlet类文件 -->
<servlet>
<servlet-class>包名.类名</servlet-class>
<servlet-name>映射的名称</servlet-name>
</servlet>
<!-- mapping:映射请求路径的名称 -->
<servlet-mapping>
<servlet-name>映射的名称</servlet-name>
<url-pattern>/请求url名称</url-pattern>
</servlet-mapping>
说明:url名称与映射的名称与类名相同。
②方法二:通过注解完成servlet的映射
第一二步相同,如上:
第三步:@WebServlet — 配置访问路径
name:指定 Servlet 的 name 属性,等价于 <servlet-name>。
如果没有显式指定,则该 Servlet 的取值即为类的全限定名。
value和urlPatterns:指定一组 Servlet 的 URL 匹配模式。
等价于 <url-pattern> 标签。
value与urlPatterns只能用一个。
loadOnStartup:指定 Servlet 的加载顺序。
如果为负数,表示,请求时才加载servlet类;
如果为正数,表示,服务启动时,加载servlet类;
asyncSupported:声明 Servlet 是否支持异步操作模式
description:该 Servlet 的描述信息
initParams:指定一组 Servlet 初始化参数,要与@WebInitParam配合使用。
2、Servlet生命周期
①实例化:调用构造方法,Servlet由容器自动加载并实例化,我们不能实例化。
②初始化:调用init(ServletConfig config),完成初始化操作。
③服务:调用service、doGet、doPost方法,反复调用。
④销毁:调用destroy()方法,服务器正常关闭或超时。
3、Servlet与JSP
①:Servlet与JSP关系
都是Web组件
JSP运行前将先转译成Servlet
②:使用场景
JSP侧重于页面展示,方便视图层的页面设计,适用于美工方面的工作
Servlet侧重于处理用户请求,适用于代码方面的工作
③:Servlet是JSP的另一种存在形式
JSP能做的,Servlet都能做
JSP以网页的形式存在,而Servlet以Java类的形式存在
JSP转译后就是Servlet
4、Servlet文件上传
1、概念:
本地文件传送到服务器(web服务器)
2、具体实现步骤
第一步:创建表单:
设置表单类型enctype="multipart/form-data";
设置method提交方式为post;
设置type为file表单元素
第二步:创建servlet:
设置servlet为可处理上传文件的 @MultipartConfig
获取表单的file对象 Part p=request.getPart("myfile");
获取上传文件的名称
String name=p.getSubmittedFileName();
通过write方法,将文件上传到指定位置
p.write("d://"+name);
//上传到服务器指定位置
//request.getServletContext()获取上下文对象,
//getRealPath()获取服务器的路径
String path=request.getServletContext().getRealPath("");
p.write(path+"/images/"+n+x);
3.写上传代码(以下是单个文件上传)
// 获取表单中所有的表单元素对象【含file和text、password等】
Collection<Part> ps = request.getParts();
for (Part p : ps) {
// 判断当前的part对象是否为文件域对象
if (p.getContentType() != null) {
// 获取上传文件的名称
String name = p.getSubmittedFileName();
// 取原文件的文件名
String x = name.substring(name.indexOf("."));
// 自动产生随机的名称
String n = UUID.randomUUID().toString();
//上传到服务器指定位置
String path=request.getServletContext().getRealPath("");
p.write(path+"/images/"+n+x);
}
}
5、jsp的一些应用
1.点击量的统计
A:application.setAttribute(String Key, Object Value);
您可以使用上述方法来设置一个计数器变量及更新该变量的值。
B:application.getAttribute(String Key);读取该变量的方法
C:在页面每次被访问时,你可以读取计数器的当前值,并递增1,然后重新设置,在下一个用户访问时就将新的值显示在页面上。
2.自动刷新
刷新一个页面最简单的方式就是使用response对象的setIntHeader()方法。这个方法的签名如下:
public void setIntHeader(String header, int headerValue)
这个方法通知浏览器在给定的时间后刷新,时间以秒为单位。
3.发送邮件
6、jsp的高级语法
1.Jstl标准标签库
核心标签
(1)核心标签是最常用的JSTL标签。
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
(2)引用核心标签库的语法如下:
(1)<c:out> 用于在JSP中显示数据,就像<%= ... >
(2)<c:set> 用于保存数据
(3)<c:remove> 删除数据
(4)<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来
(5)<c:if> 与我们在一般程序中用的if一样
(6)<c:choose> 本身只当做<c:when>和<c:otherwise>的父标签 <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
(7)<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
(8)<c:foreach> 基础迭代标签,接受多种集合类型
1、语法格式:<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
2、属性值: items 要被循环的信息 begin 开始的元素(0=第一个元素,1=第二个元素) end 最后一个元素(0=第一个元素,1=第二个元素) step 每一次迭代的步长 var 代表当前条目的变量名称 varStatus 代表循环状态的变量名称
(9) <c:Fortokens> 根据指定的分隔符来分隔内容并迭代输出
(10)<c:redirect> 重定向至一个新的URL.
1、作用:通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。
2、语法格式:<c:redirect url="<string>" context="<string>"/> url 目标URL context 紧接着一个本地网络应用程序的名称(可省略)
(11) <c:url> 使用可选的查询参数来创造一个URL
(12) <c:param> 用来给包含或重定向的页面传递参数
②格式化标签
(1)JSTL格式化标签用来格式化并输出文本、日期、时间、数字。
<%@ taglib prefix="fmt"
uri="http://java.sun.com/jsp/jstl/fmt" %>
(2)引用格式化标签库的语法如下:
(1)<fmt:formatNumber> 使用指定的格式或精度格式化数字
(2)<fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串
(3)<fmt:formatDate> 使用指定的风格或模式格式化日期和时间
(4) <fmt:parseDate> 解析一个代表着日期或时间的字符串
(5) <fmt: bundle > /<fmt:setBundle> 绑定资源
(6) <fmt:setLocal> 指定地区
(7) <fmt:timeZone>/<fmt:setTimeZone> 指定时区
(8) <fmt:message> 显示资源配置文件信息
1、作用:映射一个关键字给局部消息,然后执行参数替换。
2、语法格式
<fmt:message
key="<string>"
bundle="<string>"
var="<string>"
scope="<string>"/>
3、属性值:key 要检索的消息关键字 bundle 要使用的资源束 var 存储局部消息的变量名 scope var属性的作用域
(9) <fmt:requestEncoding> 设置request的字符编码
语法格式
<fmt:requestEncoding value="<string>"/>
③SQL标签
(1)JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。
<%@ taglib prefix="sql"
uri="http://java.sun.com/jsp/jstl/sql" %>
(1)引用SQL标签库的语法如下:
(1)<sql:setDataSource> 指定数据源
语法格式
<sql:setDataSource
var="<string>"
scope="<string>"
dataSource="<string>"
driver="<string>"
url="<string>"
user="<string>"
password="<string>"/>
(2)<sql:query> 运行SQL查询语句
(3)<sql:update> 运行SQL更新语句
(4)<sql:param> 将SQL语句中的参数设为指定值
(5)<sql:dateParam> 将SQL语句中的日期参数设为指定的java.util.Date 对象值
(6)<sql:transaction> 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行可以将大量的<sql:query>和<sql:update>操作装入<sql:transaction>中,使它们成为单一的事务。
④XML 标签
(1)JSTL XML标签库提供了创建和操作XML文档的标签。
<%@ taglib prefix="x"
uri="http://java.sun.com/jsp/jstl/xml" %>
(2)引用XML标签库的语法如下:
(1)<x:out> 与<%= ... >,类似,不过只用于XPath表达式
1.语法格式
<x:out select="<string>" escapeXml="<true|false>"/>
2.具体实例:<x:parse xml="${xmltext}" var="output"/>
<b>The title of the first book is</b>:
<x:out select="$output/books/book[1]/name" />
<br>
<b>The price of the second book</b>:
<x:out select="$output/books/book[2]/price" />
(2)<x:parse> 解析 XML 数据
语法格式
<x:parse
var="<string>"
varDom="<string>"
scope="<string>"
scopeDom="<string>"
doc="<string>"
systemId="<string>"
filter="<string>"/>
(3)<x:set> 设置XPath表达式
语法格式
<x:set var="<string>" select="<string>" scope="<string>"/>
(4)<x:if> 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
(5) <x:forEach> 迭代XML文档中的节点
(6)<x:choose> <x:when>和<x:otherwise>的父标签
(7) <x:when> <x:choose>的子标签,用来进行条件判断
(8)<x:otherwise> <x:choose>的子标签,当<x:when>判断为false时被执行
(9) <x:transform> 将XSL转换应用在XML文档中
(10)<x:param> 与<x:transform>共同使用,用于设置XSL样式表
⑤JSTL函数
(1)JSTL包含一系列标准函数,大部分是通用的字符串处理函数。
<%@ taglib prefix="fn"
uri="http://java.sun.com/jsp/jstl/functions" %>
(2)引用JSTL函数库的语法如下:
(1)fn:contains() /fn:containsIgnoreCase() 测试输入的字符串是否包含指定的子串/测试输入的字符串是否包含指定的子串,大小写不敏感
(2) fn:startsWith()/fn:endWith() 测试输入字符串是否以指定的前缀开始/测试输入的字符串是否以指定的后缀结尾
(3)fn:escapeXml() 跳过可以作为XML标记的字符
(4) fn:indexOf() 返回指定字符串在输入字符串中出现的位置
(5)fn:join() 将数组中的元素合成一个字符串然后输出
语法如下:
${fn:join([数组], <分隔符>)}
用法: <c:set var="string1" value="www w3cschool cn"/>
<c:set var="string2" value="${fn:split(string1, ' ')}" />
<c:set var="string3" value="${fn:join(string2, '-')}" />
<p>字符串为 : ${string3}</p>
(6)fn:length() 返回字符串长度
(7)fn:replace() 将输入字符串中指定的位置替换为指定的字符串然后返回
格式: c:set var="string1" value="I am from google"/>
<c:set var="string2" value="${fn:replace(string1,
'google', 'w3cschool')}" />
<p>替换后的字符串 : ${string2}</p>
(8) fn:substring()/fn:substringAfter()/fn:substringBefore() 返回字符串的子集/返回字符串在指定子串之后的子集/返回字符串在指定子串之前的子集
格式: <c:set var="string1" value="This is first String."/>
<c:set var="string2" value="${fn:substringAfter(string1, 'is')}" />
<p>生成的子字符串 : ${string2}</p>
(9) fn:toLowerCase()/fn:toUpperCase() 将字符串中的字符转为小写/将字符串中的字符转为大写
(10)fn:trim() 移除首位的空白符
1、动态网页基础
JSP的概述
1.英文全称是Java server pages,简称Java服务页面
2.组成
html【显示静态内容】+java【实现服务器动态数据交换】
3.静态网页与动态网页的区别
①静态网页:由html语言实现,任何人在任何时间、地点访问静态网页,页面不会发生改变。
②动态网页:由html+java或c#语言,任何人在任何时间、地点访问动态网页,页面内容不会相同。
JSP的工作原理
第一步:客户端发送请求
第二步:服务器接收请求后,jsp引擎将jsp翻译成java文件,JVM会将java文件编译成class文件,最后运行class生成HTML静态内容(含JS)
响应HTML静态内容(含JS)给客户端
Tomcat服务器和JavaEE的使用
1.认识Tomcat服务器的构造
bin:服务命令目录,用于启动和停止服务器;
conf:服务器配制文件目录;
lib:服务器的类库包文件目录;
logs:服务器的日志文件目录;
temp:临时文件目录;
webapps:工程发布后的目录;
2.Eclipse的进一步的了解
①工具与服务器绑定
②创建web工程
③创建一个JSP文件
④发布工程
⑤启动服务
jsp的语法
1.html
静态内容
2.@page指令
①定义:定义动态语言、指定字符集[静态和动态]、导包【写在页面第一行】
②语法:<%@ page language="语言类型"
contentType="返回内容"
pageEncoding="字符集"
import="类包1,类包2"%>
3.代码段
①说明:java代码段就是java语言编写的代码,以分号结束。
②语法:<% java代码段(java小脚本) %>
4.表达式
①作用:用于输出内容(替换out.print()) 注意:表达式后面不能有任何的符号
②语法:<%=表达式 %>
5.声明
①:定义方法或全局变量
②语法:<%!
public 返回值类型 方法名(形参){
代码;
return 返回值;
}
%>
6.注释
1.静态注释
<!--静态注释:客户端可以看到 -->
2.动态注释
<%--动态注释:服务器可见 --%>
2、隐藏对象和作用域
1.9大隐式对象
①隐式对象的定义:不用通过类去创建对象,由服务器自动创建的对象。
②jsp中9个隐式对象
request:得到客户端的信息
response:处理服务器端对客户端的一些响应
session:保存单个用户访问时的一些信息
application:用来保存网站的一些全局变量
pageContext:提供了访问和放置页面中共享数据的方式
out:功能是把信息回送到客户端的浏览器中
config:配置对象
page:JSP页面中的Object对象
exception:异常对象
2.request对象:请求对象
①作用:用于封装客户端数据请求给服务器。
②request对象的方法:
方法一:request.setCharacterEncoding("utf-8");
对客户端浏览器发送过来的请求参数编码,防止中文乱码
方法二:getParameter(String name)
获得客户端传送给服务器端的有name指定的参数值
方法三:getParameterValues()
获得客户端传送给服务器端的所有参数的名字,结果是一个String数组类型【一般用于获取复选项的值】
3.response对象:响应对象
①作用:用于封装服务器数据响应给客户端
②response对象响应类型:
静态文本类型:response.setContentType("text/html;charset=utf-8");
图片类型:response.setContentType("image/png");
js脚本类型:response.setContentType("text/javascript");
③response提供的方法:
void addCookie(Cookie cookie)增加Cookie对象
void sendRedirect(String location)页面跳转重定向
void setcontenttype(String Type)设置服务端响应编码
4.重定向与转发的区别
1.转发
地址栏:不改变 是否保留第一次请求数据:保留 请求次数:1 跳转发生的位置:服务端。
2.重定向
地址栏:改变 是否保留第一次请求数据:不保留 请求次数:2 跳转发生的位置:客户端发出的第二次跳转
4、Cookie与Session
1.了解http协议
一种无状态协议,发送请求后浏览器创建与服务器的连接,返回后结果连接断开,无法保存用户的状态,所以,服务器无法识别是新用户还是老用户。
①.通过Cookie在客户端记录信息确定用户身份
②.通过Session在服务器端记录信息确定用户身份
2.cookie的使用
①.定义:
存储在客户机的文本文件,它们保存了大量轨迹信息。
②.三个步骤来识别回头客:
A:服务器脚本发送一系列cookies至浏览器。比如名字,年龄,ID号码等等。
B:浏览器在本地机中存储这些信息,以备不时之需。
C:当下一次浏览器发送任何请求至服务器时,它会同时将这些cookies信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情。
③.使用JSP设置cookie包含三个步骤:
(1)创建一个Cookie对象: 调用Cookie的构造函数,使用一个cookie名称和值做参数,它们都是字符串。(请务必牢记,名称和值中都不能包含空格或者如下的字符:
[ ] ( ) = , " / ? @ : ;)
Cookie cookie = new Cookie("key","value");
(2)设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时。
cookie.setMaxAge(60*60*24);
(3) 将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookies。
response.addCookie(cookie);
④cookie的主要的方法:
(1)public void setDomain(String pattern)
设置cookie的域名,比如www.baidu.com
(2)public String getDomain()
获取cookie的域名,比如www.baidu.com
(3)public void setMaxAge(int expiry)
设置cookie有效期,以秒为单位,默认有效期为当前session的存活时间
(4)public int getMaxAge()
获取cookie有效期,以秒为单位,默认为-1 ,表明cookie会活到浏览器关闭为止
(5)public String getName()
返回 cookie的名称,名称创建后将不能被修改
(6)public void setValue(String newValue)
设置 cookie的值
(7)public void setPath(String uri)
设置cookie 的路径,默认为当前页面目录下的所有URL,还有此目录下的所有子目录
(8)public void setSecure(boolean flag)
指明cookie是否要加密传输
(9)public void setComment(String purpose)
设置注释描述 cookie的目的。当浏览器将cookie展现给用户时,注释将会变得非常有用
⑤.删除Cookies
1、获取一个已经存在的cookie然后存储在Cookie对象中。
2、将cookie的有效期设置为0。
3、将这个cookie重新添加进响应头中。
3.session的使用
①定义:
是保存在服务器端的数据,用于验证几次请求是否属于同一会话,在同一会话中,会避免进行不必要的验证,保证用户的操作连贯性。
②session的主要方法:
(1)public Object getAttribute(String name)
返回session对象中与指定名称绑定的对象,如果不存在则返回null
(2)public Enumeration getAttributeNames()
返回session对象中所有的对象名称
(3)public long getCreationTime()
返回session对象被创建的时间, 以毫秒为单位,从1970年1月1号凌晨开始算起
(4)public String getId()
返回session对象的ID
(5)public long getLastAccessedTime()
返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起
(6)public int getMaxInactiveInterval()
返回最大时间间隔,以秒为单位,servlet 容器将会在这段时间内保持会话打开
(7)public void invalidate()
将session无效化,解绑任何与该session绑定的对象
(8)public boolean isNew(
返回是否为一个新的客户端,或者客户端是否拒绝加入session
(9)public void removeAttribute(String name)
移除session中指定名称的对象
(10)public void setAttribute(String name, Object value)
使用指定的名称和值来产生一个对象并绑定到session中
(11)public void setMaxInactiveInterval(int interval)
用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效
③删除Session数据
(1) 移除一个特定的属性:
调用public void removeAttribute(String name) 方法来移除指定的属性。
(2)删除整个会话:
调用public void invalidate() 方法来使整个session无效。
(3)设置会话有效期:
调用 public void setMaxInactiveInterval(int interval) 方法来设置session超时。
(4)登出用户:
支持servlet2.4版本的服务器,可以调用 logout()方法来登出用户,并且使所有相关的session无效。
(5)置web.xml文件:
如果使用的是Tomcat,可以向下面这样配置web.xml文件:
<session-config>
<session-timeout>15</session-timeout>
</session-config>
0 条评论
下一页