JavaWeb知识点笔记


1.1.1 什么是Servlet

  • Servlet是JavaWeb3大组件之1(Servlet、Filter、Listener)

  • Servlet是用来拍卖客户端请求的动态财富

  • Servlet的职分有:

  1. 获得请求数据

  2. 拍卖请求

  3. 做到响应

  • Servlet接口方法:

servlet 中的方法大多数不由大家调用,而是由 tomcat
调用,并且 servlet 指标也不由我们成立,由 tomcat
创建

> void init(ServletConfig)
它会在servlet对象创造之后随即奉行,并只进行贰遍

> void service(ServletRequest,ServletResponse) 它会被调用数次
, 老是管理请求都以在调用这几个法子

> void destory() 它会在servlet被灭绝从前调用,只会被调用贰次
[留遗言]

以上四个方法都为生命周期方法

> ServletConfig getServletConfig() 用来获得 servlet
布局音信

> String getServletInfo() 获取 servlet 信息

Servlet接口:

  • Servlet首要方式:

本文内容:

 

  • servlet的介绍
  • servlet的根基运用介绍
  • HttpServlet
  • ServletConfig
  • ServletContext
  • Cookie
  • Session
  • 数据域对象

 

 头阵日期:201八-07-1四

修改:

一:201捌-07-一5:开掘重写工夫这里将request.setCharacterEncoding(“utf-捌”);写成了response

 


1.1.2 实现Servlet的方式

  • 实现Servlet接口

  • 继承GenericServlet类

  • 继承 HttpServlet

init()–ServletConfig

servlet实例化后,容器会先调用init方法,用于早先化对象,即在拍卖客户要求前成功部分开端化专门的学业。每两个Servlet实例,init只可以被调用贰次,也就是java的static块。
Servlet使用ServletConfig对象从web应用程序的计划音讯中收获以
键值对格局提供的伊始化参数。
Servlet使用ServletConfig对象获得ServletContext对象,使用ServletContext可以使Servlet和Servlet容器举办通讯。

servlet的介绍:

 

  • Servlet是sun集团提供的1门用于支付动态web财富的技艺。
  • servlet程序运维在服务器上。能用来管理浏览器的数额请求。
  • servlet能够获得客户端发送的数据,也得以回去数据给客户端,servlet和其余服务协作的话就足以回到1个动态的数目给客户端。

 

Sun公司在其API中提供了一个servlet接口,来让开拓者开拓web能源,平常步骤是:
  壹、编写贰个Java类,实现servlet接口。
  二、把开辟好的Java类陈设到web服务器中。
上边介绍怎么样写八个平淡无奇的Servlet的兑现类。

 


1.1.3 Servlet第一例

  • 写贰个类cn.itcast.MyServlet,达成Servlet接口

  • 兑现service()方法,在内部给出System.out.println(“hello servlet!”);

  • 在web.xml文件中钦赐Servlet的走访路线为:/myservlet

<servlet><servlet-name>xxx</servlet-name><servlet-class>cn.itcast.MyServlet</servlet-class> 将路径和类绑在一起,此处为包名</servlet><servlet-mapping><servlet-name>xxx</servlet-name><url-pattern>/myservlet</url-pattern> 此处为路径</servlet-mapping>

注意!两处的 servlet-name 要一致

  • servletConfig 方法&功能:servletConfig 是接口

当用户在地方栏中访问:
servlet!”);

一). 服务器创制Servlet:

Servlet 首先次被呼吁时,或服务器运行时,服务器会创制
Servlet 实例。

  • 服务器暗中认可是在servlet第一遍被呼吁时创设Servlet实例,假诺期望服务器运维时就创制Servlet实现内需在web.xml中配置

服务器只为2个类其余 Servlet 创建叁个实例对象,所以
Servlet 是单例的;

2). 服务器开端化Servlet:

  • 当服务器创设Servlet实例后会霎时调用Servlet的init(ServletConfig)方法,达成对Servlet的起初化;

  • init(ServletConfig)只会被调用二回

  • 服务器会在调用init()方法时传递ServletConfig参数

3). 服务器使用Servlet处理请求:

  • 当Servlet被呼吁时,服务器会调用Servlet的service(ServletRequest,ServletResponse)方法

  • service(ServletRequest,ServletResponse)方法每管理一回呼吁,就能被调用壹次,所以它或许会被调用N次

因为 Servlet 是单例的,所以大概在平等时刻三个 Servlet
对象会被多少个请求相同的时间做客,所以那只怕出现线程案例难题

Servlet 不是线程案例的,那有助与进步功效,但不能够让 Servlet
富有状态,避防几个线程争抢数据

4). 服务器销毁Servlet

服务器平日不会销毁 Servlet ,平时唯有在服务器关闭时才会销毁
Servlet

  • 服务器会在销毁Servlet此前调用Servlet的destory()方法

  • 能够在destory()方法中提交释放Servlet占领的财富,但日常Servlet是没什么可要释放的,所以该方法一般都以空的

service()–ServletRequest ServletResponse

容器调用service()方法来拍卖客户的请求,注意:在service方法前务必确定保障init方法正确实现。
容器会组织3个请求对象ServletRequest和响应对象ServletResponse作为参数字传送递给service().

servlet的底子运用介绍:

 

①.创设贰个动态web工程【Servlet是JavaEE的原委,所以需求引用JavaEE的库,无法利用相似的库,所以供给成立动态web工程】:

图片 1

 

二.新建一个类,完成Servlet接口:

Servlet接口有多少个函数供给达成,destroy(),init(),service(),getServletConfig(),getServletInfo()【前边四个能够忽略,一般不要】

  • init()方法:当Servlet先河化时调用。经常没有须要重写,除非你想用提前实行一些举个例子能源预备操作。
  • service():每二个http请求都会调用service()来管理,这里写什么管理请求。
  • destroy():当servlet销毁的时候,调用此办法,即服务器结束的时候。经常不供给重写。

 

service函数是http请求管理的基本,它有四个分别为ServletRequest和ServletResponse类型的参数,那多个参数由服务器负担打包,request封装了http请求数据,response封装了http请求重返的数量。

(上边讲的HttpServlet本质上还应该有service,它个中暗中同意会根据http请求的等级次序来调用不一样的不二法门,比方get类型的就调用doGet),【由于一般不直接实现Servlet,所以那些详细功效的应用留到HttpServlet来说,这里唯有做3个事例来叙述请求管理进度

图片 2

 

 

三.配置Servlet路线相称,在webContent/WEB-INF/web.xml      【在新本子中,逐步接纳“注脚”代替了web.xml的效果。风乐趣的能够自己检查,小编不时没空去整理。】

图片 3

安插格式例子如下:

图片 4

处理进程:

  1. 比如客户端访问,
  2. 服务器先读取web.xml来研究servlet-mapping中是或不是有url-pattern对应,
  3. 1旦对应,依据servlet-mapping中的servlet-name查找到呼应的servlet-name,然后将呼吁处理交给servlet-class中对应的类
  4. 假若不对应,调用tomcat的暗许servlet来查找是还是不是有照拂的静态能源,
  5. 倘使都未曾,重回40四,提醒找不到相应财富。

 

4.运维程序:运维要求tomcat。这里不讲怎么布局tomcat,自身去找呢。

 

 

 

1.1.4 ServletConfig

ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletConfig对象给init()方法。

ServletConfig 对象封装了 Servlet web.xml
中的配置音讯,它对应 <servlet> 元素。

ServletConfig类的意义有:

  • String getServletName():获取 Servlet 配置名,即
    <servlet-name> 的值

  • ServletContext getServletContext():获取 ServletContext
    对象

  • String getInitParameter(String name):赢得发轫化参数

  • Enumeration getInitParameterNames():收获具有初阶化参数的称谓

在web.xml文件中,配置<servlet>时方可为<servlet>配置0~N个初步化参数

destroy():

当容器检查实验到Servlet对象从劳动中移除的时候会调用该措施。释放能源给GC

Servlet生命周期:

  • servlet的创建与开端化:当有供给钦点servlet管理的央浼过来时,创建该servlet的实例,执行init()函数。
    三个servlet只会开首化叁遍,
    init方法只会奉行一次
    暗中同意意况下是 :
    初次拜访该servlet,才会创建实例。 【只要想提前创造servlet的实例,必要对servlet实行布署,会在下边包车型大巴补充中等教育授
  • 管理请求:Servlet 调用 service() 函数来管理客户端的恳求。
  • Servlet的绝迹:甘休服务器时,Servlet 调用 destroy()
    函数,servlet对象被灭绝。

 

 

1.1.5 GenericServlet

GenericServlet是Servlet接口的完结类,但它是一个抽象类,它唯一的悬空方法正是
service() 方法

GenericServlet实现了Servlet方法:

  • 实现了String getServletInfo()方法

  • 实现了void destory()方法,空实现

  • 贯彻了void init(ServletConfig)方法,用来保存ServletConfig参数

  • 实现了ServletConfig getServletConfig()方法

GenericServlet实现了ServletConfig接口:

  • 实现了ServletContext getServletContext()方法

  • 实现了String getInitParameter()方法

  • 实现了String getServletName()方法

  • 实现了Enumeration getInitParameterNames()方法

GenericServlet添加了init()方法:

  • 该措施会被init(ServletConfig)方法调用

  • 要是期待对Servlet进行开始化,那么应该覆盖init()方法,而不是init(ServletConfig)方法

service 措施中也能够行使 servletconfig 成员 ,
只要在 init 情势在此以前就足以

不得造次覆盖init方法,在那之中有config对象

能够覆盖init()无参函数

getServletConfig()

返回Servletconfig对象

何以布置web.xml中的servlet映射(路线相称):

一.全路径相配,以 / 初始,格式:/相称目的字符串

例如:/a,/index,/admin

能够有几个/,举个例子:/a /aa/bb

 

/a      匹配到 localhost:8080/项目名称/a
/admin 匹配到 localhost:8080/项目名称/admin
/user/address匹配到 localhost:8080/项目名称/user/address

 

二.模糊路线相配,以 / 开头 , 以/ *
甘休(这里注意,所以/a/*/b不是漏洞非常多相配),格式:/分明的11分目的字符串/*

*是3个通配符,代表相称什么都足以!

/a/*      可以匹配到 localhost:8080/项目名称/a/1001或localhost:8080/项目名称/a/aaa
/user/super/*可以匹配到 localhost:8080/项目名称/user/super/001

 

叁.扩充名相称,未有/ ,以 * 开始,格式:*.扩展名

*.扩大名正是前方的门道是怎么,但只要.扩张名结尾的都足以包容成功

*.jpg      可以匹配到 localhost:8080/项目名称/a/1.jpg或localhost:8080/项目名称/b/2.jpg

暗中同意相配:tomcat默许有个门道特别,<url-pattern>/</url-pattern>,它是用来合作静态财富的。

相称优先级:准确相称>路线相配>扩展名相称>缺省相配

注意:

  • 门路相称和扩充名相配不可能同不经常候设置!如<url-pattern>/user/*.aaa</url-pattern>是地下的
  • Servlet
    二.伍始发,3个servlet能够动用四个url-pattern规则,那样能够定义多少个url的哀告都交由同三个servlet管理。

 

 

 

1.1.6 HttpServlet

HttpServlet是GenericServlet的子类,它专注HTTP请求

HttpServlet类的点子:

  • 贯彻了void service(ServletRequest,ServletResponse)方法,实现内容是:

> 把ServletRequest强转成HttpServletRequest

> 把ServletResponse强转成HttpServletResponse

> 调用本类增多的void
service(HttpServletRequest,HttpServletResponse)方法

  • 添加了void
    service(HttpServletRequest,HttpServletResponse)方法,内容是:

> 调用request的getMethod()获取请求格局

>
若是请求方式为GET,那么调用本类加多的doGet(HttpServletRequest,HttpServletResponse)方法

>
假使请求格局为POST,那么调用本类增加的doPost(HttpServletRequest,HttpServletResponse)方法

  • 增加了doGet(HttpServletRequest,HttpServletResponse)方法,内容是响应40伍,表示错误,所以我们应当去覆盖这么些情势

  • 增加了doPost(HttpServletRequest,HttpServletResponse)方法,内容是响应405,表示错误,所以大家运用去掩盖那几个主意

借使是因此持续HttpServlet类来自定义Sevlet的话,那么:

  • 不要去掩盖void service(ServletRequest,ServletResponse)

  • 不要去掩盖void service(HttpServletRequest, HttpServletResponse)

  • 而应该去覆盖doGet()或doPost()方法。

getServletInfo()

回到三个字符串,包罗Servlet音讯

  • Servlet创造的二种方法

1是促成Servlet接口;二是后续抽象类GenericServlet;叁是后续HttpServlet类

— 达成Servlet接口,必须贯彻Servlet多少个方式

public class TestServlet implements Servlet{
public void init(ServletConfig config) throws
ServletException{
System.out.println("init");
}
public ServletConfig getServletConfig(){
return null;
}
public void service(ServletRequest req, ServletResponse res) throws ServletException,IOException{
//这里可以实现请求后要做的内容
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
public String getServletInfo(){
return null;
}
public void destroy(){
System.out.println("destroy");
}
}

–承继抽象类GenericServlet.
GenericServlet类中只有2个抽象方法,即service(ServletRequest req,
ServletResponse res)

public TestGenericServlet extends GenericServlet{      
public abstract void service(ServletRequest req,ServletResponse res)                        
throws ServletException,IOException{       
PrintWriter out = response.getWriter();       
out.println("Hello World!");                            
}
}

–承接HttpServlet类编排Servlet应该是最轻巧的,而且是最常见的,我们一般要编写制定Servlet直接接轨那几个类就行了,重写doGet()或然doPost()方法就可以

public TestHttpServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/html;charset = gb2312");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>HelloWorld</title>");
out.println("</head>");
out.println("<body bgcolor = \"white\">");
out.println(“<hr>”);
out.println("HelloWorld");
out.println("</body></html>");
}

public void doPost(HttpServletRequest     request, HttpServletResponse response)
throws IOException, ServletException{
doGet(request, response);
}
}

HttpServlet详解

HttpServletRequest,HttpServletResponse详解

HttpServletRequest:String
getContextPath()重返请求UEscortL中象征上下文的有些,如:/simple/test重回/simple
Cookie[] getCookies()再次回到此次请求全数的Cookie对象
String getHeader()重返请求报头的值
String getMethod()重返此次请求使用的HTTP方法的名字,如post get
Trace等
String getPathInfo()重回额外url消息,如/simple/test 重返test
String getPathTranslated()再次回到真实路径新闻 如
String getQueryString()再次来到请求的action 名称 如
返回 logon

HttpSession getSession()再次回到和本次请求相关联的session
HttpServletResponse:void addCookie(Cookie
cookie)新添二个cookie到响应中去,能够安装两个。
addheader(String name,String value)用给出的name and
value扩展三个响应报头到响应中去
sendRedirect(String
location)发送叁个不时的重定向到客户端,让客户端访问的url重新定位

补充:

  • 局地servlet的开端化也许需求多多时光,所以或者供给使用预加载。能够在web.xml的钦点servlet中布署属性load-on-startup。当配置那些天性后,服务器运转就可以提前初叶化这么些servlet,它的属性值越小,提前创造的事先级越高。tomcat有四个暗中认可的servlet使用了0和一的优先级,所以大家一般都以从2伊始。图片 5

 

 


1.1.7 web.xml

servlet创立两种艺术,

1.servlet首先次抽出请求创造

2.服务器在运维时就创办

ServletConfig

servlet容器使用ServletConfig对象在容器早先化的时候向其传递配置音讯三种首要措施:
String getInitParameter(String
name)再次来到名称叫name的先河化参数的值,起首化参数在安排文件web.xml中布局
Enumeration
getInitParameterNames()重返Servlet全部开端化参数名字的枚举集结
ServletContext getServletContext()再次回到Servlet上下文对象的引用
String getServletName()重返当前Servlet的称谓

HttpServlet

 

  • 出于servlet一般是用来拍卖http请求的,为了简化开辟流程,所以sun提供了一个落到实处类HttpServlet,它只必要大家重写doGet,doPost函数就可以。
  • HttpServlet是Servlet的1个贯彻类,它当中的service函数暗中认可依照http请求的品类来调用区别的法子,譬如get类型的就调用doGet。所以某个技师本人完成了1个子接口来重写service,然后里面包车型地铁呼吁类型是投机定义的,这是一种简化servlet数量的好点子。

 

 

1.1.8 defaultServlet

default优先级最低,如若1个呼吁未有处理,那么它来管理,展现40四

url-pattern 相称的是 /

当访问路线不存在时,会试行defaultServlet,其实在访问index.html时也是在实践那些servlet

Servlet配置

web.xml:web应用程序的陈设和安顿都以经过web.xml来产生的,其包罗以下音讯

ServletContext 的早先化参数
Session 的配置
Servlet/Jsp的定义
MIME类型映射
接待文件列表
错误页面
安全
地区和编码映射
JSP配置

post和get方式

音讯报头

Servlet生命周期

贯彻流程:

1.继承HttpServlet类.

2.重写函数,get请求类型的会调用doGet,即使要管理get请求就须要重写doGet;post请求类型的会调用doPost,就算要管理post请求就须要重写doPost;私下认可情形下,doPost会暗许调用doGet。【怎么重写上面讲】

三.安顿Servlet路线相称.

四.运总市长序.

 

 

与Servlet接口中的service函数类似,doGet和doPost函数也可以有两个参数,它们的品种为HttpServletRequest和HttpServletResponse,上面介绍一下它们。它们本质上和ServletRequest对象和ServletResponse对象是类似的,只是举行了包装。

1.1.9 jspServlet

做客jsp页面时,会调用jspServlet,通过将动态能源转为静态财富,然后用response实行响应

Servlet上下文

运转在java虚拟机中的每1个web程序都有三个与之荣辱与共城门失火的Servlet上下文,java
servlet API提供了三个servletContext接口来表示上下文。
1个ServletContext对象表示了多少个Web程序的上下文,Servlet容器在起首实例时期,向其传递servletConfig对象,通过其getServletContext()获取上下文。

上下文例子:计算页面访问量:注意这里的上下文必须放在安全锁里

public class CountDemo extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res)throws     ServletException,IOException{
ServletContext context = getServletContext();
//Enumeration<String>count = context.getAttributeNames();
Integer count = null;
synchronized(context){
count = (Integer)context.getAttribute("counter");
if(null == count){
count = new Integer(1);
}else{
count = new Integer(count.inValue()+1);
}
context.setAttribute("counter", count);
}
res.setContentType("text/html;charset=gb2312");
PrintWriter pw = res.getWriter();pw.println("<html><head>");
pw.println("<title>页面访问统计</title>");
pw.println("</head><body>");
pw.println("该页面已经被访问了  :"+"<b>"+count+"</b>"+" 次");
pw.println("</body></html>");
pw.close();
}
}

HttpServletRequest对象:

  • HttpServletRequest对象封装了客户端给服务端发送过来的央浼数据,包涵请求头,请求行,请求体等剧情。
  • 由此我们一般接纳HttpServletRequest对象来收获客户端发来的央求数据。

 

1.1.10 session-config

session过期时间

多用途扩大项目,包括jpeg gif等,在那边定义了体系:

xml类型

txt类型

jpg/jpeg类型

doc类型

docx

Servlet请求转载

好处:

  • 提供了合并的走访格局
  • 调整器(controller)能够将差异的呼吁发送给分化的Servlet来张开管理,本人不管理请求,缩小了响应时间

HttpServletResponse对象

  • HttpServletResponse对象封装了服务端对客户端的归来数据通道。能够重返响应行,响应头,响应体等数据。
  • 由此大家能够运用HttpServletResponse对象来给客户端再次回到大家钦赐的数目。

 

 

 

1.2.1 什么是MIME-Type

率先,大家要打听浏览器是怎么管理内容的。在浏览器中显得的开始和结果有 HTML、有
XML、有 GIF、还有 Flash
……那么,浏览器是何等区分它们,决定如何内容用什么花样来彰显呢?答案是
MIME Type,也便是该能源的媒体类型。

传播媒介类型一般是经过 HTTP 协议,由 Web
服务器告知浏览器的,更确切地说,是通过 Content-Type
来表示的

例如:Content-Type: text/HTML

表示内容是 text/HTML
类型,约等于超文本文件。为何是“text/HTML”而不是“HTML/text”可能其余什么?MIME
Type 不是个人钦命的,是透过 ietf 协会协商,以 兰德TiggoFC
的款式作为提出的正儿8经发表在网络的,大大多的 Web
服务器和用户代理都会支持那些正式 (顺便说一句,Email 附属类小部件的花色也是透过
MIME Type 钦定的)。

一般来说唯有一部分在互联英特网赢得分布应用的格式才会获得2个 MIME
Type,假诺是某些客户端本身定义的格式,一般只好以 application/x- 发轫。

XHTML 即是3个获取普及应用的格式,

因而,在 锐界FC 3236 中,表明了 XHTML 格式文件的 MIME Type
应该是application/xHTML+XML。

当然,管理地点的文件,在未曾人报告浏览器某些文件的 MIME Type
的情状下,浏览器也会做一些暗许的拍卖,这恐怕和您在操作系统中给文件配置的
MIME Type 有关。

举个例子说在 Windows
下,展开注册表的“HKEY_LOCAL_MACHINESOFTWAREClassesMIMEDatabaseContent
Type”主键,你能够见到有着 MIME Type 的安排消息。

RequestDispacher:servlet控制器

RequestDispacher对象由Servlet来创建,用于封装一个由路线所标识的服务器财富。首要有以下三种艺术:

  • forward(ServletRequest req, ServletResponse res):
    该办法用于将请求从叁个Servlet传递给服务器上的此外的Servlet
    jsp页面,可能HTML文件
    小心:那一个点子必须在响应被交付给客户端在此之前使用,之后的话会爆出Ille瓦斯tateException错误,在forward()调用后原本在响应缓存中未被提交的内容将会自动清除。
  • include(ServletRequest req, ServletResponse
    res)该措施用于响应中蕴藏其余的资讯(servlet jsp html)等内容。

那多少个措施的区分是:include将请求转载给其余对象后,被调用的Servlet做出的响应将合并原来的响应对象中,原来的Servlet对象仍可以持续输出响应数据。
forward将请求转载给别的对象后,将由被调用的Servlet对象做出响应,原来的Servlet试行将结束。

  • RequestDispache对象的得到
    三种方法
    –ServletRequest.getRequestDispacher(String path)–能源路线名
    –ServletContext.getNamedDispacher(String name)–jsp或servlet名称
    –ServletContext.getRequestDispacher(String
    path)–这里路线必须从/起头 相对于当下上下文根的路径 如/MyServlet

请求转载的实例

package com.tide.servlet;import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
public class Login extends HttpServlet {
public void doPost(HttpServletRequest     req,HttpServletResponse res)throws     ServletException,IOException{
res.setContentType("text/html;charset=GB2312");
ServletContext context = getServletContext();
String name = req.getParameter("user");
String pass = req.getParameter("passwd");
System.out.println("获取到的用户名为 :"+name+"  --密码为 :"+pass);
if(StringUtils.isBlank(name) || StringUtils.isBlank(pass)){
System.out.println("用户名或密码为空");
RequestDispatcher dis = context.getRequestDispatcher("/register.jsp");
dis.forward(req, res);
}
else{
RequestDispatcher dis = context.getRequestDispatcher("/loginsuccess.jsp");
dis.forward(req, res);
}
}
}

底层深入分析:

伸手转载(RequestDispatcher)的进度:
客户首首发送叁个呼吁到服务端,服务端开采相称的Servlet,并钦定它去实行,当那些Servlet施行完现在,它要调用getRequestDispatcher()方法,把请求转载给钦定的test.jsp,整个流程都以在服务端达成的,而且是在同3个请求里面完毕的,因而Servlet和jsp共享的是同多个request,在Servlet里面放的享有东西,在jsp中都能抽取来,由此,jsp能把结果getAttribute()出来,getAttribute()出来后进行完把结果回到客户端。整个经过是二个呼吁,三个响应。

重写本领:

 

  • ### 获取请求音讯:

http请求行新闻:

收获请求的主意:request.getMethod() 
【能够肯定是不是来自get方式依旧post等措施 】

恳请能源 :request.getRequetULX570I() 或  request.getRequetU卡宴L()

请求http协议版本 :request.getProtocol()

图片 6

http请求头音信:

根据请求头获取请求值 :request.getHeader(“名称”)

获得具备的伸手第一名称 :request.getHeaderNames()

 图片 7

 

 

  • 赢得提交过来的数额:

实行业内部容:

获得实体内容数据 :request.getInputStream() 【使用景况一般是文本上传之类的意况,普通的表单内容能够使用下边的getParameter】

表单内容:

  • 依赖参数名赚取参数值(只好获得三个值的参数):request.getParameter(“参数名”)【这种方法get和post都能够使用】

  • 根据参数名获得参数值(能够赢得有五个值的参数):request.getParameterValues(“参数名”)
    【对于能够有四个值的参数,需求使用这些(举个例子一些复选框的值)】

  • 获取具备参数的称呼列表 :request.getParameterNames()
  • 获得由参数名和参数值组成的map群集:Map<String, String[]> map

    request.getParameterMap();【由于有个别参数可能有几个值,所以第二个为String[]】

表单内容中的中文编码难题:

  1. get格局交给的表单跟在url后边,浏览器会对交付的数据进行编码图片 8,所以恐怕须求张开解码,可以行使name
    = new String(name.getBytes(“iso-885玖-一”),”utf-8″);
    【浏览器与服务器之间的数据编码格式暗中认可是iso-885九-1】
    【在tomcat一些版本中早就无需这一步了。tomcat八已经默许将数据编码成utf-八再开始展览打包,增加这一步反而成为乱码】
  2. post情势提交的表单数据在请求体中,使用request.setCharacterEncoding(“utf-八”)来告诉使用什么项目标编码方式来解码请求体内容。【一定要写在getParameter在此以前】
  3. 【由于对于差别的主意索要动用差别的主意来编码,各个servlet都开始展览处理会代码赘余度极高,一般会接纳过滤器来拍卖。过滤器能够依附差别的请求格局来调用分歧的管理格局】

 

 

  • 回去数据给客户端:

以字节格式再次回到:

  1. 获得字节输出通道:response.getOutStream()
  2. 字节输出流对象调用write(“重返的原委”)函数重返内容到客户端所见的页面中。【注意再次回到的剧情要转成字节类型】

图片 9

以字符串格式重回:

  1. 收获字符流输出通道:response.getWriter()
  2. 字符输出流对象调用write(“重回的内容”)函数再次回到内容到客户端所见的页面中。

图片 10

设置响应码:response.setStatus()【某个时候大概还亟需选择响应码,所以说一下。】

设置响应头:response.setHeader(name,value)

有时因为客户端和劳务端编码分歧样会导致乱码,所以需求报告客户端重临的数量的编码格式(管理粤语标题):

  1. response.setHeader(“Content-Type”,”text/html;charset=UTF-8″)或response.setContentType(“text/html;charset=UTF-8”);

 

  • 转车和重定向:

中间转播:转发是服务端将客户请求转载给别的servlet。地址栏不会变,进度唯有发生在服务端。

request.getRequestDispatcher(“路线”).forward(request, response);【转发会带上在此之前的伸手消息(便是把2个完整的request转载了),转载的指标地只好限于本工程;由于限于本工程,使用相对路线时,可以直接略去工程。】

图片 11

重定向:重定向是服务端重临三个网页给客户,客户的浏览器将机关跳转到内定网页。地址栏会变。

response.sendRedirect(“路线”);【转向不压击溃务端,所以这一个门路可以很轻便,连百度都足以;如若选拔绝对路线,那么必须保留工程】;

图片 12

 

 

 

 


1.2.2 <url-pattern>

<url-pattern>是<servlet-mapping>的子成分,用来绑定Servlet的造访路线

可以在3个<servlet-mapping>中付出八个<url-pattern>,也便是说三个Servlet能够有多少个访问路线:

<servlet-mapping><servlet-name>xxx</servlet-name><url-pattern>/helo1<url-pattern><url-pattern>/hello2<url-pattern></servlet-mapping>

还是能在<url-pattern>中使用通配符,即“*”。

  • <url-pattern>/*<url-pattern>:表示万分任何路线

  • <url-pattern>/do/*<url-pattern>:表示卓殊以/do早先的别的路径

  • <url-pattern>*.do<url-pattern>:表示相当任何以“.do”结尾的路线

注意:

  • 通配符要么在初阶,要么在结尾,不能够在中等,比方:/*.do就是错误的采用。

  • 借使不使用通配符,那么<url-pattern>必须以“/”初始,举个例子:<url-pattern>abc</url-pattern>正是大错特错的

重定向(sendRedirect)的劳作规律

客户发送二个请求到服务器,服务器相称Servlet,这都和伸手转载同样,Servlet管理完之后调用了sendRedirect()那个方法,这一个方法是response的法子,所以,当以此Servlet管理完以往,看到response.sendRedirect()方法,立时向客户端重回这些响应,响应行告诉客户端受到那些请求后,立即爆发八个新的乞请,去乞求test.jsp,这里三个请求,那几个多个请求互不困扰,相互独立,子哟前边request里面setAttribute()的别样东西,在后边的request里面都赢得持续。可知,在sendRedirect()里面是五个请求,七个响应。

ServletConfig

1.2.3 welcome-file-list

安装应接分界面

ServletContext是Servlet叁大域对象之一

ServletContext在服务器运行时创设,在服务器关闭时销毁,二个JavaWeb应用只成立2个ServletContext对象

八个项目唯有一个ServletContext对象

 
  • ##### 当1个servlet它供给有个别自定义起首化参数时,能够定义在web.xml中。【那就象是某些开源的线程池能够在它的安插文件中自定义最大线程数量。】

  • ##### 而ServletConfig可以用来获取Servlet的早先化配置参数。

 

1.3.1 ServletContext概述

劳动器会为各类应用创制三个ServletContext对象:

ServletContext对象的创造是在服务器运维时完结的;

ServletContext对象的绝迹是在服务器关闭时成功的。

ServletContext对象的职能是在整个Web应用的动态能源之间共享数据!比方在AServlet中向ServletContext对象中保存三个值,然后在BServlet中就足以拿走那几个值,那便是共享数据了。

无法用AServlet调用BServlet方法,会使耦合过紧

布局参数的不二等秘书技:

在web.xml中,在<servlet>中,格式如下:

图片 13

 

 

壹.三.贰 ServletContext的成效分类:

  • 存取数据

  • 读取web.xml中的应用起首化参数

  • 读取应用财富

获得配置参数:

图片 14

 

 


1.3.3 获取ServletContext对象

在HttpServlet中得以由此以下格局来博取ServletContext对象

  • ServletContext sc = this.getServletContext()

  • ServletContext sc = this.getServletConfig().getServletContext()

  • servletConfig.getServletContext(); 也可获取

  • HttpSession 也可收获

  • ServletContextEvent

在void init(ServletConfig config)中:

ServletContext context = config.getServletContext();

ServletConfig类的getServletContext()方法能够用来博取ServletContext对象;

在GenericeServlet或HttpServlet中获取ServletContext对象:

GenericServlet类有getServletContext()方法,所以能够一直选拔this.getServletContext()来获得;

ServletContext

 

  • ServletContext
    对象是整整工程共有的对象,三个工程得以有多少个servlet,但它们选择的ServletContext
    对象都以同三个。

 

 

一.三.肆 存取数据

因为在3个JavaWeb应用中,唯有三个ServletContext对象,所以在ServletContext中保留的数量能够共整个JavaWeb应用中的动态财富共享

ServletContext是Servlet三大域对象之一,域对象内部有三个Map,用来保存数据

域对象的效果****(****用来在八个****servlet****中传递数据****)

ServletContext是JavaWeb四大域对象之一:

PageContext;

ServletRequest;

HttpSession;

ServletContext;

1. 存数据

  • void setAttribute(String name, Object
    value):用来增多或调换ServletContext域数据

> servletContext.setAttribute(“xxx”, “XXX”),增多域数据

> servletContext.setAttribute(“xxx”,
“XXXX”),覆盖域数据,因为在域中已经存在了名字为xxx的数码,所以本次正是覆盖了

2. 取数据

  • Object getAttribute(String name):通过名称来获取域数据

  • void removeAttribute(String name):通过名称移除域数据

  • Enumeration<String>
    getAttributeNames():获取具有ServletContext域数据的称呼

作用:

  1. 取得全局配置参数,类似于ServletConfig中的仅仅3个Servlet范围的参数,ServletContext的开首化参数是全局有效的。

  2. 获得web工程中的能源,web应用程序计划到服务器上后,能源的对峙地方是变化了的,所以不能够使用在web工程中的路线,一般都亟需运用ServletContext对象来获得路线

  3. 存取数据,servlet间共享数据域对象,借使想在多少个servlet中共享数据,能够利用ServletContext对象来存取数据。

 

 

1.三.伍 读取web.xml中布署的运用伊始化参数

Servlet也能够获得发轫化参数,但它是1对的参数;约等于说,1个Servlet只好获得自个儿的开首化参数,不可能博得外人的,即伊始化参数只为3个Servlet企图!

能够布署公共的初始化参数,为具备Servlet而用!那亟需选择ServletContext才干使用!

<context-param><param-name>p1</param-name><param-value>v1</param-value></context-param><context-param><param-name>p2</param-name><param-value>v2</param-value></context-param>
  • servletContext.getInitParameter,返回v1

  • servletContext.getInitParameter,返回v2

  • servletContext.getInitParameterNames(),返回Enumeration<String>,包含p1和p2

运用格局:

收获全局配置参数:

  1. 率先,配置全局配置参数,在web.xml中:图片 15
  2. 获取ServletContext对象:ServletContext context =
    getServletContext();
  3. 赢得参数:图片 16

收获web工程中的财富:

  1. 借使WebContent下边有个公文夹config,里面有个公文base.properties
  2. 收获方式1,先拿走路线,再获取流:图片 17
  3. 得到格局二,直接获取流:图片 18

 

图片 19

 

用ServletContext对象存取数据,使得servlet间能共享数据【存能存多少个,取也能取多少个;但注意存的时候同名参数的值会覆盖】:

  1. 存:图片 20
  2. 取:图片 21

 

 

 

 

 

1.三.陆 获取项目能源

亟需动态获取地址,引进

  • String getRealPath(String path):获取能源的忠实名称

String path = servletContext.getRealPath("/WEB-INF/a.jpg");

回来值为/WEB-INF/a.jpg真实路线,即磁盘路径:C:/tomcat6/wabapps/hello/WEB-INF/a.jpg

如:

  • InputStream getResourceAsStream(String path):获取能源的输入流

InputStream in = servletContext.getResourceAsStream("/WEB-INF/a.jpg");

回去的是a.jpg的输入流对象,能够从流中得到a.jpg的数目

  • Set<String> getResourcePaths(String
    path):获取钦定目录下的具备能源路线

Set<String> paths = servletContext.getResourcePaths("/WEB-INF");

回到的Set中含有如下字符串:

> /WEB-INF/lib/

> /WEB-INF/classes/

> /WEB-INF/web.xml

> /WEB-INF/a.jpg

生命周期与功力范围:

  1. ServletContext对象是大局生效的,服务器运维的时候,会为托管的每多少个web应用程序创造3个ServletContext对象,一个web程序中四个servlet共用同3个ServletContext对象。
  2. 当从服务器移除托管的web程序,或许是停业服务器的时候,ServletContext对象就能被销毁。

 

 


1.三.柒 获取类路线财富

能够因此Class类的对象来获取类路线下的财富,对应JavaWeb应用的类路线就是classes目录下的能源

例如:

InputStream in = cn.itcast.servlet.MyServlet.class.getResourceAsStream;

获取的是:/WEB-INF/classes/cn/itcast/servlet/a.jpg,即与MyServlet.class同目录下的能源

例如:

InputStream in = cn.itcast.servlet.MyServlet.class.getResourceAsStream;

得到的是:/WEB-INF/classes/a.jpg,即类路线的根目录下的财富,类路线的根目录便是/classes目录

IOUtils 输入出流工具类,能够转移为字符串

演练:总计网址访问量

一个门类中具有的资源被访问都要对访问量进行增多!

创办一个int类型的变量,用来保存访问量,然后把它保存到ServletContext的域中,那样能够保存全体的Servlet都足以访问到!

先前时代时,ServletContext中从不保存访问量相关的质量;

当本站第一次被访问时,创造3个变量,设置其值为1;保存到ServletContext中;

当以往的拜访时,就能够从ServletContext中赢得那个变量,然后在其基础之上加1。

得到ServletContext对象,查看是还是不是留存名叫count的天性,假使存在,表达不是率先次访问,借使不存在,表明是率先次访问;

先是次访问:调用Servletcontext的setAttribute()传递二脾性质,名字为count,值为一;

第2~N次访问:调用ServletContext的getAttribute()方法获得原来的访问量,给访问量加一,再调用Servletcontext的setAttribute()方法成功安装。

Cookie

 

  • cookies能用来积攒一些服务端的数码到地面,那些多少可见支持服务端来鉴定区别客户以及记录客户新闻。比方你浏览商品的笔录大概就存在cookie里,这使得你再次走访网址的时候,服务端能依靠cookie来给您指向性地引入商品。
  • 服务端通过再次来到响应头来积攒cookie,当浏览器开掘响应头有cookie时就能把cookie存款和储蓄起来。
  • 当用户再度做客对应网址时,浏览器会指导cookie来倡导呼吁,服务端会接受到cookie来开始展览出格管理(例如针对性广告,保持用户登陆记录等等操作)。

 

 

1.3.8 参数(parameter)和属性(Attribute)的区别

区别:

  • 源点差别:

参数(parameter)是从客户端中由用户提供的,假若GET方法是从U本田CR-VL中

提供的,借使POST方法是从请求体(request body)中提供的;

属性(attribute)是服务器端的零部件(JSP也许Servlet)利用requst.setAttribute()设置的

  • 操作不一样:

参数(parameter)的值只可以读取不可能修改,读取可以运用request.getParameter()读取;

属性(attribute)的值既能够读取亦能够修改,读取可以应用request.setAttribute(),设置可应用request.getAttribute()

  • 数据类型分歧:

参数(parameter)不管前台传来的值语义是怎样,在服务器获取时都以String类型对待,并且客户端的参数值只可以是简约类型的值,不可能是纷繁芜杂类型,比如3个指标。

属性(attribute)的值能够是自由叁个Object类型。

共同点

二者的值都被封装在request对象中。

使用模式:

  • 创制cookie:cookie能够有多少个

Cookie cookie=new Cookie(“name”,”value”)

response.addCookie(cookie) 【把cookie发给客户端存起来】

图片 22

 

  • 赢得cookie,未有一直拿走有个别cookie的函数,只好迭代查找。

获得具有cookie:Cookie[] cookies = request.getCookies();

获取cockie的名字:String cookieName = cookie.getName();

获取cockie的值:String cookieValue = c.getValue();

图片 23

 

  • 安装cookie的幸存时间(过期会被拔除):

cookie.setMaxAge(seconds);【单位是秒,暗中认可值是-一意味关闭浏览器就失效】

 

  • 给cookie赋予新值:

cookie.setValue(newValue);

 

  • 删除cookie:

cookie.setMaxAge(0);

 

 


1.4.1 Http协议与Cookie

  • Cookie是HTTP****协议创设的!先由服务器保存库克ie到浏览器,再下次浏览器请求服务器时把上一回呼吁获得Cookie再归还给服务器

  • 由服务器成立保存到客户端浏览器的2个键值对!服务器保存
    Cookie 的响应头:Set-Cookie: aaa=AAA Set-Cookie: bbb=BBB

 response.addHeader("Set-Cookie", "aaa=AAA"); response.addHeader("Set-Cookie", "bbb=BBB");
  • 当浏览器请求服务器时,会把该服务器保存的Cookie随请求发送给服务器。浏览器归还
    Cookie 的央浼头:Cookie: aaa=AAA; bbb=BBB

  • Http协议规定(保险不给浏览器太大压力):

> 1 Cookie 最大 4KB

> 1 个服务器最多向 1 个浏览器保存 20
Cookie

> 1 个浏览器最多能够保存 300 Cookie

  • 浏览器大战:因为浏览器竞争很凶猛,所以众多浏览器都会在听天由命范围内违反HTTP规定,但也不会让二个Cookie为四GB!

Session:

 

  • session原意是会话的意趣,每二次展开浏览器访问指标网址就是三回对话。关闭浏览器就是断开会话了。
  • 它一般用来与cookies同盟使用,cookie不可以储存对象并且存款和储蓄数据大小太小,而session能够积存对象,而且session存款和储蓄在服务器上。
  • cookie和session的合营:每2个session都有3个id,把session的ID作为cookie存款和储蓄到地点,下一遍就能够自行获得sessiond的ID对应的session。
    图片 24

 

 

1.4.2 Cookie的用途

  • 服务器使用Cookie来跟踪客户端状态!

  • 保留购物车(购物车中的商品无法应用request保存,因为它是二个用户向服务器发送的四个请求消息)

  • 来得上次登6名(也是3个用户多少个请求)

********** Cookie 是不能够跨浏览器的!
***********

使用:

创建session:request.getSession()

图片 25

获取session:  request.getSession(false)
【默许会做一回剖断,根据请求过来的JSESSIONID决断是不是业已有相应的session,假设已经有,那么会博得相应的充裕,如若未有,那么这一个函数是创办的意趣。而false代表获取,获取不到就回到null】

 

在session中储存数据:session.setAttribute(name, value)

 

获取数据:session.getAttribute(name)

 

移除数据:

去除钦赐:session.removeAttribute(name)

删去全部:session.invalidate()

 

设置session的可行时间:setMaxInactiveInterval(seconds)【默认30分钟】

 

cookie与session的相称:现在猛增的session会默许存款和储蓄到cookie,但在浏览器关闭之后就能免去,所以首借使给cookie设置生活时间:

图片 26那般session中存款和储蓄的数码下一遍就能够继续取了。

 

 


1.4.3 JavaWeb中使用Cookie

  • 固有方法:

    > 使用response发送Set-Cookie响应头

> 使用request获取Cookie请求头

  • 方便措施:

> 使用repsonse.addCookie()方法向浏览器保存Cookie

> 使用request.getCookies()方法赢得浏览器归还的Cookie(* 判断
null) *

Cookie第一例:

> 一个jsp保存cookie, a.jsp

> 另2个jsp获取浏览器归还的cookie! b.jsp

数据域对象:

 

从地方能够学到session能用来储存数据和读取数据。除却还应该有1对能力所能达到用来囤积数据的”数据域“对象。上边临多少个常常用来存款和储蓄数据的”数据域“对象来上课。

 

1.4.4 Cookie详解

  • 库克ie不仅name和value多个个性

  • 库克ie的maxAge:库克ie的最大生命,即Cookie可保存的最大时长。以秒为单位,举个例子:cookie.set马克斯Age表示这么些Cookie会被浏览器保存到硬盘上60秒

>
maxAge>0:浏览器会把Cookie保存到客户机硬盘上,有效时长为maxAge的值决定。

>
maxAge<0:Cookie只在浏览器内部存款和储蓄器中设有,当用户关闭浏览器时,浏览器进程截止,同时Cookie也就过逝了。

> maxAge=0:浏览器会登时删除那个Cookie!

  • Cookie的path:

> Cookie的path并不是设置这一个Cookie在客户端的保存路径!!!

> Cookie的path由服务器创设Cookie时设置

>
当浏览器访问服务器某些路线时,需求偿还哪些Cookie给服务器呢?这由Cookie的path决定。

>
浏览器访问服务器的门径,就算含有有些Cookie的门路,那么就能够还给那个Cookie。

例如:

<> aCookie.path=/day11_1/; bCookie.path=/day11_1/jsps/;
cCookie.path=/day11_1/jsps/cookie/;

<> 访问:/day11_1/index.jsp时,归还:aCookie

<> 访问:/day11_1/jsps/a.jsp时,归还:aCookie、bCookie

<>
访问:/day11_1/jsps/cookie/b.jsp时,归还:aCookie、bCookie、cCookie

Cookie的path暗中认可值:当前拜会路线的父路线。比方在拜访/day1壹_1/jsps/a.jsp时,响应的cookie,那么那个cookie的私下认可path为/day11_1/jsps/

  • Cookie的domain

> domain用来钦定Cookie的域名!当多少个二级域中国共产党享Cookie时才有用。

>
举例;www.baidu.com、zhidao.baidu.com、news.baidu.com、tieba.baidu.com之间共享Cookie时能够利用domain

> 设置domain为:cookie.setDomain(“.baidu.com”);

> 设置path为:cookie.setPath;

Cookie中不可能存在粤语!!!

// 保存Cookie c = new Cookie("username", URLEncoder.encode("张三", "utf-8"));//出错!response.addCookie;// 获取Cookie[] cs = request.getCookies();if(cs != null) {for(Cookie c : cs){if("username".equals(c.getName {String username = c.getValue();username = URLDecoder.decode(username, "utf-8");}}}

============================================

HttpServletRequest

  • 地方未有介绍到request对象也能积累数据,实际上它也是能用来积攒数据的。
  • 仓库储存数据:request.setAttribute(name, value)
  • 收取数据:request.getAttribute(name)
  • 功能范围:当次呼吁范围的,假如转载给别的Servlet,那么另1个Servlet也能获得request中的数据。

 

1.5.1 HttpSession概述

  • HttpSession是由JavaWeb提供的,用来会话追踪的类。session是服务器端对象,保存在劳务器端!!!

  • HttpSession是Servlet三大域对象之一(request、session、application(ServletContext)),所以它也是有setAttribute()、getAttribute()、removeAttribute()方法

  • HttpSession底层正视Cookie,或是URubiconL重写!

HttpSession

  • 积累数据:session.setAttribute(name, value)
  • 抽取数据:session.getAttribute(name)
  • 效用范围:多个Servlet范围的。生存时间是能够团结安装的。

 

1.5.2 HttpSession的作用

  • 对话范围:会话范围是有个别用户从第壹遍访问服务器伊始,到该用户关闭浏览器甘休!

对话:八个用户对服务器的往往连贯性请求!所谓连贯性请求,正是该用户数次伸手中间未有苏息浏览器!

  • 劳动器会为每一个客户端创制1个session对象,session就好比客户在服务器端的账户,它们被服务器保存到二个Map中,那一个Map被称之为session缓存!

Servlet中得到session对象:HttpSession session = request.getSession();

Jsp中收获session对象:session是jsp内置对象之下,不用创培育能够直接行使!

  • session域相关办法:

> void setAttribute(String name, Object value);> Object getAttribute(String name);> void removeAttribute(String name);

ServletContext

  • 积累数据:context.setAttribute(name, value)
  • 收取数据:context.getAttribute(name)
  • 移除数据:context.remoAttribute(name)
  • 功用范围与时间:全局范围的,全部的servlet都足以拿到到。保存的数据唯有主动删除,不然会不断到ServletContext对象销毁

 

 

在事实上行使中,平时要挂念效率范围来使用分化的数据域对象.比方一些”三次性的,常常索要立异“的数据,一般接纳HttpServletRequest来存储,因为它寿命相当短,开支长时间财富少。

 


1.5.3 HttpSession原理

  • request.getSession()方法:

> 获取Cookie中的JSESSIONID:

<>
假如sessionId不设有,成立session,把session保存起来,把新创设的sessionId保存到Cookie中

<>
假诺sessionId存在,通过sessionId查找session对象,要是未有查找到,创制session,把session保存起来,把新创造的sessionId保存到Cookie中

<>
如若sessionId存在,通过sessionId查找到了session对象,那么就不会再成立session对象了。

<> 返回session

即使创造了新的session,浏览器会拿走贰个涵盖了sessionId的Cookie,那几个Cookie的生命为-壹,即只在浏览器内部存款和储蓄器中留存,就算不停息浏览器,那么Cookie就一向存在。

下一次央浼时,再度施行request.getSession()方法时,因为能够由此Cookie中的sessionId找到session对象,所以与上三遍呼吁使用的是同1session对象。

  • 服务器不会马上给你创立session,在首先次获得session时,才会创制!request.getSession();

  • request.getSession、request.getSession、request.getSession(),后几个艺术效果等同,

首先个办法:假使session缓存中(即使cookie不设有),不设有session,那么再次回到null,而不会制造session对象。

一.五.四 HttpSession别的艺术:

  • String getId():获取sessionId;

  • int
    get马克斯InactiveInterval():获取session能够的最大不挪窝时间,默以为310分钟。当session在28分钟内未有动用,那么Tomcat会在session池中移除这几个session;

  • void
    invalidate():让session失效!调用这几个主意会被session失效,当session失效后,客户端再次恳请,服务器会给客户端创立五个新的session,并在响应中给客户端新session的sessionId;

  • boolean
    isNew():查看session是还是不是为新。当客户端首回呼吁时,服务器为客户端创造session,但那时服务器还未有响应客户端,也正是还尚无把sessionId响应给客户端时,那时session的图景为新。

1.伍.五 web.xml中安插session的最大不移步时间

<session-config><session-timeout>30</session-timeout></session-config>

一.5.6 案例一:演示session中对话的高频请求中国共产党享数据

  • AServlet:向session域中保存数据

  • BServlet:从session域中获取数据

  • 演示:

> 第二个请求:访问AServlet

> 第三个请求:访问BServlet

①.伍.7 案例2:演示保存用户登陆消息

  • 案例相关页面和Servlet:

> login.jsp:登6页面

> succ一.jsp:只有登60%功技术访问的页面

> succ二.jsp:唯有登陆成功工夫访问的页面

> LoginServlet:校验用户是或不是登陆成功!

  • 各页面和Servlet内容:

> login.jsp:提供登陆表单,提交表单请求LoginServlet

> LoginServlet:获取请求参数,校验用户是或不是登入成功

<>
失利:保存错误消息到request域,转载到login.jsp(login.jsp展现request域中的错误消息)

<>
成功:保存用户消息到session域中,重定向到succ一.jsp页面,显示session域中的用户音信

>
succ壹.jsp:从session域获取用户音信,假诺不存在,展现“您还不曾登入”。存在则展现用户音讯

>
succ贰.jsp:从session域获取用户音讯,借使不设有,显示“您还未有登六”。存在则显示用户消息

假诺用户未有关闭浏览器,session就径直留存,那么保存在session中的用户新闻也就一块儿存在!那么用户访问succ一和succ2就能够由此!

1.六.一 JSP三大指令

一个jsp页面中,可以有0~N个指令的概念!

  1. page –> 最复杂:%@page language=”java” info=”xxx”…%
  • pageEncoding和contentType:

>
pageEncoding:它钦点当前jsp页面包车型客车编码,只要不撒谎,就不会有乱码!在服务器要把jsp编写翻译成.java时需求使用pageEncoding!

>
contentType:它表示增加叁个响应头:Content-Type!等同与response.setContentType(“text/html;charset=utf-捌”);

> 尽管八个性格只提供二个,那么另贰个的默许值为设置那么些。

> 要是两性子子都未曾安装,那么默许为iso

  • import:导包!可以出现反复

  • errorPage和isErrorPage

>
errorPage:当前页面要是抛出特别,那么要转会到哪2个页面,由errorPage来钦点

>
isErrorPage:它钦赐当前页面是或不是为管理错误的页面!当该属性为true时,那些页面会设置状态码为500!而且这些页面能够使用玖大内置对象中的exception!

 <error-page><error-code>404</error-code><location>/error/errorPage.jsp</location></error-page><error-page><error-code>500</error-code><location>/error/errorPage.jsp</location></error-page><error-page><exception-type>java.lang.RuntimeException</exception-type><location>/index.jsp</location></error-page>
  • autoFlush和buffer

autoFlush:钦赐jsp的出口流缓冲区满时,是或不是自动刷新!默感觉true,如果为false,那么在缓冲区满时抛出1贰分!

buffer:钦赐缓冲区大大小小,暗许为八kb,常常无需修改!

  • isELIgnored:是还是不是忽略el表明式,默许值为false,不忽视,即扶助!

  • 中央未有:

language:钦点当前jsp编写翻译后的语言类型,暗许值为java。

info:信息!

isThreadSafe:当前的jsp是还是不是帮忙并发访问!

session:当前页面是或不是援救session,假诺为false,那么当前页面就不曾session那一个松开对象!

extends:让jsp生成的servlet去承袭该属性内定的类!

  1. include –> 静态包括
  • 与RequestDispatcher的include()方法的作用相似!

  • <%@include%>
    它是在jsp编写翻译成java文件时造成的!他们共同生成2个java(正是2个servlet)文件,然后再生成二个class!

  • RequestDispatcher的include()是二个办法,包括和被含有的是四个servlet,即八个.class!他们只是把响应的从头到尾的经过在运行时合并了!

  • 功用:把页面分解了,使用带有的措施结合在一块,那样二个页面中不改变的局地,正是3个独立jsp,而大家只供给处理变化的页面。

  1. taglib –> 导入标签库
  • 八个属性:

prefix:内定标签库在本页面中的前缀!由大家友好来起名称!

uri: 钦定标签库的岗位!

 <%@taglib prefix="s" uri="/struts-tags"%> 前缀的用法<s:text>

=========================================

1.6.二 JSP玖大内置对象

  • out –> jsp的输出流,用来向客户端响应

  • page –> 当前jsp对象!
    它的引用类型是Object,即真身中有如下代码:Object page = this;

  • config –> 它对应真身中的ServletConfig对象!

  • pageContext –> 一个顶9个!

  • request –> HttpServletRequest

  • response –> HttpServletResponse

  • exception –> Throwable

  • session –> HttpSession

  • application –> ServletContext

  1. pageContext
  • 一个顶9个!

  • Servlet中有3大域,而JSP中有四大域,它正是终极多个域目的!

ServletContext:整个应用程序

session:整个会话(1个会话中唯有贰个用户)

request:三个请求链!

pageContext:多个jsp页面!那个域是在现阶段jsp页面和最近jsp页面中接纳的价签之间共享数据!

域对象

代办别的域:pageContext.setAttribute(“xxx”, “XXX”,
PageContext.SESSION_SCOPE);

全域查找:pageContext.findAttribute;从小到大,信赖查找!

获得其余7个放置对象:

=========================================

一.陆.三 JSP动作标签

这个jsp的动作标签,与html提供的标签有本质的分别。

*
动作标签是由tomcat来分解施行!它与java代码同样,都是在服务器端实行的!

* html由浏览器来实践!

  • <jsp:forward>:转载!它与RequestDispatcher的forward方法是1律的,三个是在Servlet中应用,3个是在jsp中应用!

  • <jsp:include>:包括:它与RequestDispatcher的include方法是如出1辙的,2个是在Servlet中动用,七个是在jsp中接纳!

%@include和<jsp:include>有如何分化!

  • <jsp:param>:它用来作为forward和include的子标签!用来给转载或包涵的页面传递参数!

=========================================

1.7.1 JavaBean的规范:

  1. 非得要有二个私下认可构造器

  2. 提供get/set方法,如若唯有get方法,那么这几个天性是只读属性!

  3. 属性:有get/set方法的分子,还足以未有成员,唯有get/set方法。属性名称由get/set方法来支配!而不是成员名称!

  4. 艺术名称满足一定的正式,那么它正是性质!boolean类型的习性,它的读方法能够是is起始,也能够是get开首!

1.7.2 内省:

内省类 –> Bean音信 –> 属性描述符 –>
属性的get/set对应的Method! — > 能够反射了!

commons-beanutils,它是依附内省达成!

  • 导包:

commons-beanutils.jar

commons-logging.jar

BeanUtils.getProperty(Object bean, String propertyName)BeanUtils.setProperty(Object bean, String propertyName, String propertyValue)BeanUtils.populate(Map map, Object bean)CommontUtils.toBean(Map map, Class class)

在意导包的时候背后写.*

1.7.3 javaBean导航

<%Address address = new Address();address.setCity;address.setStreet;Employee emp = new Employee();emp.setName;emp.setSalary;emp.setAddress;request.setAttribute("emp", emp);%>

1.七.四 jsp中与javaBean相关的价签

  • <jsp:useBean> –> 创立或询问 bean

  • <jsp:useBean scope="session"/> session
    中找找名称叫user壹的bean,假使不设有,创制之

  • <jsp:useBean scope="session"/> 创建

  • <jsp:useBean scope="session"/> 查找

  • <jsp:setProperty>›4

  • <jsp:setProperty property="username" na=me="user1" value="admin"/>
    设置名称为user壹的这一个javabean的username属性值为admin

  • <jsp:getProperty>

  • <jsp:getProperty property="username" name="user1"/>
    获取名叫user壹的javabean的名称叫username属性值

=========================================

一.八.1 EL基本概念

EL是JSP内置的表明式语言!

  • jsp二.0开头,不让再采用java脚本,而是利用el表明式和动态标签来代替java脚本!

  • EL代替的是<%= … %>,相当于说,EL只可以做输出!

一.8.二 EL表达式读取四大域

  • ${xxx} ,全域查找名字为 xxx
    的习性,假使不存在,输出空字符串,而不是 null

* ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域获取属性!<h3>使用el获取request域的emp</h3>${requestScope.emp.address.street }<!-- request.getAttribute.getAddress().getStreet() --><br/>

一.八.3 EL表明式与内置对象

EL能够输出的事物都在拾三个放置对象中!十个放置对象,个中11个是Map!pageContext不是map,它就是PageContext类型,一个项几个。

  • 咱俩早就学习了八个

  • param:对应参数,它是3个Map,当中key参数名,value是参数值,适用于单值的参数。

  • paramValues:对应参数,它是四个Map,当中key参数名,value是多个参数值,适用于多值的参数。

  • header:对应请求头,它是一个Map,在那之中key表示第一名称,value是单个头值,适用于单值请求头

  • headerValues:对应请求头,它是1个Map,个中key表示第一名称,value是几个头值,适用于多值请求头

  • initParam:获取<context-param>内的参数!

<context-param><param-name>xxx</param-name><param-value>XXX</param-value></context-param><context-param><param-name>yyy</param-name><param-value>YYY</param-value></context-param>

${initParam.xxx}

  • cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。
    ${cookie.username.value}

  • pageContext:它是PageContext类型!${pageContext.request.contextPath}

=========================================

1.8.4 EL函数库

  • 导入标签库:

<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>String toUpperCase(String input):把参数转换成大写String toLowerCase(String input):把参数转换成小写int indexOf(String input, String substring):从大串,输出小串的位置!boolean contains(String input, String substring):查看大串中是否包含小串boolean containsIgnoreCase(String input, String substring):忽略大小写的,是否包含boolean startsWith(String input, String substring):是否以小串为前缀boolean endsWith(String input, String substring):是否以小串为后缀String substring(String input, int beginIndex, int endIndex):截取子串String substringAfter(String input, String substring):获取大串中,小串所在位置后面的字符串substringBefore(String input, String substring):获取大串中,小串所在位置前面的字符串String escapeXml(String input):把input中“<”、">"、"&"、"'"、""",进行转义String trim(String input):去除前后空格String replace(String input, String substringBefore, String substringAfter):替换String[] split(String input, String delimiters):分割字符串,得到字符串数组int length(Object obj):可以获取字符串、数组、各种集合的长度!String join(String array[], String separator):联合字符串数组!

=========================================

壹.八.5 EL自定义函数库

  • 写3个java类,类中得以定义0~N个法子,但必须是static,而且有再次来到值的!

  • 在WEB-INF目录下创办1个tld文件

<function><name>fun</name><function-class>cn.itcast.fn.MyFunction</function-class><function-signature>java.lang.String fun()</function-signature></function>
  • 在jsp页面中程导弹入标签库

<%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast.tld" %>
  • 在jsp页面中应用自定义的函数:

${it:fun() }

图片 27tobehero666.png

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注