jsp期末复习重点!!!易错知识点!!!

目录

什么时候使用字节流什么时候使用字符流

request和response介绍

一个完整的HTTP请求包括:请求行、请求头、请求体

Tomcat目录与使用

域 作用范围

<%-- --%>,<%= %>,<% %>,<%! %>,<%@ %>的作用与不同

一个完整的URL包括以下几部分:

getParameter和getAttribute区别

getServletContext的介绍以及简单使用

Tomcat的介绍

Servlet 本质:

servlet的默认(缺省)

Get与Post请求的区别

事件捕获和事件冒泡的区别

JavaBean中的易错点

isErrorPage 和errorPage属性及不同

requset.getRequestDisepatcher()与sendRedirect的不同/转发和重定向的区别和介绍

response.getWriter().write()与out.print()的不同及介绍

Synchronized的介绍及用处

form标签中action的作用

选择题易错点


什么时候使用字节流什么时候使用字符流

当拷贝文件时建议用字节流,无论文件时文本文件或者其他格式的文件。

当文件只读或者只写时建议用字符流。另外字符流是无法拷贝非纯文本文件的。
原因: 字符流在读取字符的时候需要把字节转换成字符,如果在码表中找不到对应的字符,该位置就会显示“?”, 在写出的时候“?”也会写出,有可能损坏文件。


request和response介绍

request是代表HTTP请求信息的对象,response是代表HTTP响应信息的对象。

当浏览器发请求访问服务器中的某一个Servlet时,服务器将会调用Servlet中的service方法来处理请求。在调用service方法之前会创建出request和response对象。

其中request对象中封装了浏览器发送给服务器的请求信息(请求行、请求头、请求实体等),response对象中将会封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体),在service方法执行完后,服务器再将response中的数据取出,按照HTTP协议的格式发送给浏览器。

每次浏览器访问服务器,服务器在调用service方法处理请求之前都会创建request和response对象。(即,服务器每次处理请求都会创建request和response对象)

在请求处理完,响应结束时,服务器会销毁request和response对象。

一个完整的HTTP请求包括:请求行、请求头、请求体

这里面最常用到的就是状态码,很多时候都是通过状态码来判断,如(列举几个最常见的):

    200–表明请求被成功的完成,所请求的资源发送回客户端 304–自从上次请i去后,请求的网页没有修改,请客户端使用本地缓存
    400–客户端请求有错误(可能是安全等模块拦截了) 401–请求未经授权 403–禁止访问(比如未登录时的禁止访问)
    404–资源找不到 500–服务器内部错误 503–服务不可用

再列举一下大致范围内状态码的意义

    1xx——指示信息,表示请求已接收,继续处理 2xx——成功,表示请求已被成功接收、理解、接受
    3xx——重定向,要完成请求必须进行更进一步的 操作 4xx——客户端错误,请求有语法错误或请求无法实现
    5xx——服务器端错误,服务器未能实现合法的请求

常用的请求头部(部分):

  •     Accept: 接收类型,表示浏览器支持的MIME类型 (对标服务端返回的Content-Type)
  •     Accept-Encoding:浏览器支持的压缩类型,如gzip等,超出类型不能接收
  •     Content-Type:客户端发送出去实体内容的类型
  •     Cache-Control: 指定请求和响应遵循的缓存机制,如no-cache
  •     If-Modified-Since:对应服务端的Last-Modified,用来匹配看文件是否变动,只能精确到1s之内,http1.0中
  •     Expires:缓存控制,在这个时间内不会请求,直接使用缓存,http1.0,而且是服务端时间
  •     Max-age:代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存,http1.1中
  •     If-None-Match:对应服务端的ETag,用来匹配文件内容是否改变(非常精确),http1.1中
  •     Cookie: 有cookie并且同域访问时会自动带上
  •     Connection: 当浏览器与服务器通信时对于长连接如何进行处理,如keep-alive
  •     Host:请求的服务器URL
  •     Origin:最初的请求是从哪里发起的(只会精确到端口),Origin比Referer更尊重隐私
  •     Referer:该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址,csrf拦截常用到这个字段)
  •     User-Agent:用户客户端的一些必要信息,如UA头部等

常用的响应头部(部分):

  •     Access-Control-Allow-Headers: 服务器端允许的请求Headers
  •     Access-Control-Allow-Methods: 服务器端允许的请求方法
  •     Access-Control-Allow-Origin: 服务器端允许的请求Origin头部(譬如为*)
  •     Content-Type:服务端返回的实体内容的类型
  •     Date:数据从服务器发送的时间
  •     Cache-Control:告诉浏览器或其他客户,什么环境可以安全的缓存文档
  •     Last-Modified:请求资源的最后修改时间
  •     Expires:应该在什么时候认为文档已经过期,从而不再缓存它
  •     Max-age:客户端的本地资源应该缓存多少秒,开启了Cache-Control后有效
  •     ETag:请求变量的实体标签的当前值
  •     Set-Cookie:设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
  •     Keep-Alive:如果客户端有keep-alive,服务端也会有响应(如timeout=38)
  •     Server:服务器的一些相关信息

如下图是对某请求的http报文结构的简要分析:
在这里插入图片描述"E:\桌面\jisuanji\web jsp css javascript\202104141724438.png"
Request Method: GET, POST, PUT,DELETE, OPTIONS, HEAD
接下来就是其他报文头,常见的请求报头有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent等。

Tomcat目录与使用

目录介绍:

  •     bin 专门用来存放 Tomcat 服务器的可执行程序
  •     conf 专门用来存放 Tocmat 服务器的配置文件
  •     lib 专门用来存放 Tomcat 服务器的 jar 包
  •     logs 专门用来存放 Tomcat 服务器运行时输出的日记信息
  •     temp 专门用来存放 Tomcdat 运行时产生的临时数据
  •     webapps 专门用来存放部署的 Web 工程。
  •     work 是 Tomcat 工作时的目录,用来存放 Tomcat 运行时 jsp 翻译为 Servlet 的源码,和   Session钝化的目录。

webapps目录下提供了几个web应用:

  •     docs:tomcat文档页面
  •     examples:tomcat案例页面
  •     host-manager:web主机管理页面
  •     manager:web应用管理页面
  •     ROOT:tomcat主页页面

域 作用范围

  • PageContext域 当前JSP页面范围
  • request域 一次请求
  • session域 一次会话
  • application域 整个web应用

page
为pageContext.setAttribute(“”,”");它只能在同一个页面中有效。

Request
作用范围在一次请求间有效,请求完毕则失效。
一次请求可以从一个页面跳转到另一个页面或者servlet,
只有响应返回到客户单浏览器,则本次请求结束。
只要将数据存入request对象,数据的范围就为Request。

Session
作用范围为一段用户持续和服务器所连接的时间,
但与服务器断线,这个属性就无效。
只要将数据存入session对象,数据的范围就为Session。

Application
作用范围在服务器一开始执行服务,到服务器关闭为止Application
范围最、停留的时间也最久,
所以使用时要特别注意,不然可能会造成服务器负载越来越重。
只要将数据存入application对象,数据的范围范围(Scope) 就为Application。

<%-- --%>,<%= %>,<% %>,<%! %>,<%@ %>的作用与不同

<%-- --%>:用来注释jsp代码的。
<%= %>:用来插入java表达式的。
<% %>:用来插入java代码的。
<%! %>:是用来声明的,声明应用程序的全局变量或者当前页面的方法。
<%@ %>:这表示指令,主要用来提供整个jsp页面相关的信息,并且用来设定jsp页面的相关属性,例如网页的编码格式、语法、信息等。目前有三种指令:page、include、taglib。page指令是最复杂的jsp指令,它的主要功能为设定整个jsp页面的的属性和相关功能。include指令表示在jsp编译时引入一个文件包,这个引入过程是静态的,而引入的文件可以是jsp页面、html页面、文本文件或是一段java程序。taglib能让用户自定义新的标签。

一个完整的URL包括以下几部分:


1.协议部分

该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
2.域名部分

该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
3.端口部分

跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
4.虚拟目录部分

从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是/news/
5.文件名部分

从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是index.asp。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名
6.参数部分

从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为boardID=5&ID=24618&page=1。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
7.锚部分

从“#”开始到最后,都是锚部分。本例中的锚部分是name。锚部分也不是一个URL必须的部分

getParameter和getAttribute区别

两者区别:
①getParameter()获取的是客户端设置的数据。
getAttribute()获取的是服务器设置的数据。
②getParameter()永远返回字符串
getAttribute()返回值是任意类型

既然parameter和attribute都是传递参数,为什么不直接使用parameter呢?
①服务器端不能通过setParameter(key, value)来添加参数,因为没有这个函数
所以如果需要在服务器端进行跳转,并需要想下个页面发送新的参数时,则没法实现。但是Attribute可以,可以通过setAttribute(),将值放入到request对象,然后在其他页面使用getAttribute获取对应的值,这样就达到一次请求可以在多个页面共享一些对象信息
②parameter返回值是字符串,意味着不能传递其他的对象,如Map,List,但是attribute则可以存放任意类型的Java对象

getServletContext的介绍以及简单使用

web.xml参数设置:

<上下文参数>
<参数名称>地址</参数名称>
    <param-value>中国深圳</param-value>
</上下文参数>

公共类 ServletContext01 扩展了 HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 抛出 ServletException, IOException {
        //1.获取对象
        ServletContext context = getServletContext();
    字符串地址 = context.getInitParameter(“address”);
    System.out.println(address);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) 抛出 ServletException, IOException {
    doGet(request, response);
}

}

这个是一个比较经典的doGet和doPost方法的案例,继承了httpservlet类,

我觉得可能刚接触的人应该是  ServletContext context = getServletContext(); 这句话不是很懂,其实我们可以这么理解,一个servlet可以使用getservletcontext()方法得到了web应用中的servletcontext,从而使用servletcontext接口的一些方法:比如我们可以看到后面的那句话 String address = context.getInitParameter("address"); 实际上就是用了servletcontext接口里面的getInitParameter()方法:而address就是参数的名称,获得的值为中国深圳,所以有没有觉得这样很方便?
一个 servlet 上下文是servlet引擎提供用来服务于Web应用的接口。 Servlet上下文具有名字(它属于Web应用的名字)唯一映射到文件系统的一个目录。
一个servlet可以通过ServletConfig对象的getServletContext()方法得到servlet上下文的引用,如果servlet直接或间接调用子类GenericServlet,则可以使用getServletContext()方法。
Web应用中servlet可以使用servlet上下文得到:
1.在调用期间保存和检索属性的功能,并与其他servlet共享这些属性。
2.读取Web应用中文件内容和其他静态资源的功能。
3.互相发送请求的方式。
4.记录错误和信息化消息的功能。

1.String getInitParameter(String name)    返回指定上下文范围的初始化参数值。

2.Object getAttribute(String name)    返回servlet上下文中具有指定名字的对象,或使用已指定名捆绑一个对象。 从Web应用的标准观点看,这样的对象是全局对象,因为它们可以被同一servlet在另一时刻访问。 或上下文中任意其他servlet访问。  

Tomcat的介绍

Tomcat:早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎,Apache+Tomcat就相当于IIS+ASP。后来的Tomcat已不再嵌入Apache内,Tomcat进程独立于Apache进程运行。而且,Tomcat已经是一个独立的Servlet和JSP容器,业务逻辑层代码和界面交互层代码可以分离了。因此,有人把Tomcat叫做轻量级应用服务器。

为什么说Tomcat是一个Web服务器而不是一个应用服务器:

    如果你把你的企业级应用程序(就是指使用到JPA,EJB或者其他JavaEE组件功能的应用程序)部署到一个符合JavaEE规范的服务器上,那么真正的应用服务器本身是不需要你的部署包包含对JavaEE组件进行实现的类库的。如果部署的时候你必须要通过自己的应用程序中自带jar文件来支持这些JavaEE组件,那你用的就是Web服务器,就像是Tomcat。
    举个例子,如果你在你的程序里使用了JPA,然后你打算把程序部署到JBoss AS7服务器上,你的程序本身是不需要包含支持JPA实现的jar包的。但是如果你想把程序部署到Tomcat服务器上,你就必须要把实现JPA功能的jar包放到你的lib库中,然后再一起部署过去。这就是为什么JBoss AS7是应用服务器而Tomcat是Web服务器的原因。另一个关键的区别是,Tomcat上不能部署EAR文件,而只能部署WAR文件。
    ①Ear文件(扩展名为.Ear,Enterprise Application Archive)包含全部企业应用程序。在这种情形下,一个企业应用程序被定义为多个jar文件、资源、类和Web应用程序的集合。

Servlet 本质:

servlet是一个规范,实现servlet规范的类处理请求逻辑。
tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。

Servlet(Server Applet)服务器的小程序。是用java编写的一个服务器程序,目的是和浏览器交互并且生成动态的web内容。Servlet广义上来讲指的是servlet接口,狭义上来讲指的是所有实现接口的实现类。

Servlet的Mapping
一个Servlet指向一个映射路径/
一个Servlet指向多个映射路径
一个Servlet指向通用的映射路径
优先级问题

getParameter()详解

getParametrt():
通过getParametrt()得到客户端数据
getParametrt()是客户端如浏览器端将请求参数送给服务器端
永远返回字符串

getParameter()是获取POST/GET传递的参数值。getParameter:用于客户端重定向时,即点击了链接或提交按钮时传值用,即用于在用表单或url重定向传值时接收数据用。getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。
当两个Web组件之间为链接关系时,被链接的组件通过 getParameter()方法来获得请求参数。从 更深的层次考虑,request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()取得是通过容器的实现 来取得通过类似post,get等方式传入的数据。
getParameter系列的方法主要用于处理“请求数据”,是服务器端程序获取浏览器所传递参数的主要接口。而getAttribute和setAttribute方法则向我们展示了HttpServletRequest对象如何在一次请求生命周期中完成对数据值的存储和访问的管理过程。其实该接口方式都是ServletRequest接口定义的,并不是Http仅有的。

1.request.getSession()
这是常用的方式,从当前request中获取session,如果获取不到session,则会自动创建一个session,默认为true,并返回新创建的session;如果获取到,则返回获取到的session;
2.request.getSession(true)
这种方法和第一种一样,只是增家了一个true参数,告诉它在获取不到的时候自动创建session;
3.request.getSession(false)
这种方法与上两种的区别,就是在获取不到session的时候,不会自动创建session,而是会返回null。

getAttribute():
通过getParametrt()得到客户端数据,服务器通过setAttribute()设置服务器resp数据
服务器通过getAttribute()获取服务器resp数据
getParaneter()在请求到达服务器端之后,在服务器进行存放进去
返回值是任意类型

Servlet生命周期:从创建到销毁的全过程,共分为三个阶段

初始化init方法: 只会执行一次(启动tomcat的时候默认是不执行的,在访问的时候才会执行)
服务方法service: 可以执行多次
销毁方法destory: 只执行一次(停止服务器)

Servlet是指实现了Servlet接口类,Servlet运行于支持java的应用服务器(tomcat,Servlet是tomcat的一个组件)中。从原理上来讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务。

Servlet是Tomcat的一个组件。Servlet的功能需要依赖一个servlet-api.jar,这个包是由tomcat提供的。

Tomcat在初始化Servlet时,首先读取web.xml文件,根据web.xml文件中的参数信息初始化ServletConfig、ServletContext对象,同时帮助我们创建HttpServletRequest和HttpServletResponse对象一并交给Servlet实例,此时,Servlet就具有了相关的功能。
Servlet API 包含以下4个Java包:

     1.javax.servlet:定义了servlet接口、GenericServlet抽象类等相关的通用接口和类。

     2.javax.servlet.http: 主要定义了与HTTP协议相关的HttpServlet类,HttpServletRequest接口和HttpServletResponse接口。

     3.javax.servlet.annotation:包含标注servlet,Filter,Listener的标注。它还为被标注元件定义元数据。

     4.javax.servlet.descriptor:提供程序化登录Web应用程序的配置信息的类型。

    实现Servlet接口
    继承GenericServelt抽象类(这个类是Servlet接口的一级实现类)
    继承HttpServlet抽象类就可以间接的实现Servlet接口(位于javax.servlet.http包中的HttpServlet抽象类继承自GenericServlet类,是Servlet接口的二级实现类)

ServletConfig对象
ServletConfig是javax.servlet.包下的一个接口,ServletConfig它是Servlet的一个配置对象;

ServletConfig是由tomcat容器创建,通过init方法传入给Servlet;

作用:
  获取Servlet的名称servlet-name标签内容,getServletName
  获取Servlet的初始化参数,getInitParameter getInitParameterNames
  获取ServletContext域对象

  getInitParameter(String parameterName):根据参数名称获取指定的参数值
  getInitParameterNames():获取所有的参数名称

ServletContext对象

ServletContext是javax.servlet包下的一个接口,又称上下文对象,ServletConfig对象中维护了ServletContext对象,我们可以通过ServletConfig对象来获取ServletContext对象;当服务器启动时,会为服务器中的每一个web应用程序创建一个ServletContext对象,一个ServletContext对象对应的就是一个web应用程序;在web应用中的servlet要想实现资源的共享,可以通过ServletContext来完成,ServletContext也叫做域对象;
用来存储数据

ServletContext是一个域对象,可以用来存储数据;

ServletContext域对象作用范围:在应用程序中的任何位置都能够访问;

常用方法:
getAttribute(String parameterName) : 获取ServletContext域中指定名称的参数值;
setAttribute(String paramterName,Object parameterValue):存储参数到ServletContext域中;
removeAttribute(String parameterNam):将ServletContext域中指定名称的参数移除

会随着服务器的启动而初始化,SpringMVC框架中会有应用,在web.xml中配置的全局初始化参数,可以通过ServletContext对象获取;

全局初始化参数:整个应用程序,当服务器启动时,就可以有一个变量可以用,就用全局初始化参数 ;
Servlet的初始化参数:Servlet初始化时所用携带的变量,当使用一个Servlet时,需要在Servlet初始化就有一个初始化参数可以使用;

常用方法:
getInitParameter():获取指定参数名称的全局参数值
getInitParameterNames():获取所有的全局初始化参数名称

servlet的默认(缺省)

如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前web应用程序的缺省servlet。
默认(缺省)servlet是用于处理别人处理不了的请求。(处理写错的或者没有匹配的路径)

凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省servlet处理,也就是说,缺省servlet用于处理所有其他servlet都不处理的访问请求。

在<tomcat的安装目录>\conf\web.xml文件(这是服务器的配置文件,自己所有工程的web.xml文件都相当于继承了这个文件)中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为了缺省Servlet。

当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是访问这个缺省Servlet。

当访问web工程下内容下,都是web.xml文件中的<url-pattern>去查找资源。而我们在访问a.txt时,在xml文件中没有与其对应的资源,这时,是默认的servlet处理。默认servlet搜索一下,有没有a.txt,如果有,就读出来,显示在浏览器中。没有就404。我们看到的404都是默认servlet处理的。默认servlet怎么读,怎么写另学。
如果自己写了默认servlet,Tomcat中的servlet失效。

Get与Post请求的区别

1. 参数传递方式
  Get:通过Url传递参数,Url与参数之间用?隔开,多个参数之间用&隔开,也是表单的默认提交参数。
  Post:所有操作对用户来说都是不可见的,相对于get方式更安全。
2. 传递数据量大小不同
  Get传送的数据量较小,这主要是因为受URL长度限制2kb-6kb;
  Post传送的数据量较大,一般被默认为不受限制。
3. 信息缓存
  Get提交的信息能被缓存,请求保留在浏览器历史记录中
  Post提交的数据一般不能被缓存,请求不会保留在浏览器历史中
 

事件捕获和事件冒泡的区别

(1)事件捕获:由微软公司提出来的,事件从文档根节点(Document 对象)流向目标节点,途中会经过目标节点的各个父级节点,并在这些节点上触发捕获事件,直至到达事件的目标节点

(2)事件冒泡:由网景公司提出,与事件捕获相反,事件会从目标节点流向文档根节点,途中会经过目标节点的各个父级节点,并在这些节点上触发捕获事件,直至到达文档的根节点。整个过程就像水中的气泡一样,从水底向上运动

JavaBean中的易错点

在<jsp:setProperty>标签中,用于指定JavaBean实例对象的属性名的是property
<jsp:setProperty>标签中用于指定JavaBean实例对象的名称的属性是name
属于<jsp:useBean>标签默认查找的域是page
property="*"比如说你要做个用户登录页面,里面肯定得要用户名,密码之类的信息,那个*的意思就是将从页面中收集来的全部信息传递给javabean

application
getServletContext().setAttribute(“keyword”,bean);或者
application.setAttribute(“keyword”,bean);

session
HttpSession session = request.getSession(true);
session.setAttribute(“keyword”,bean );

request
request.setAttribute(“keyword”,bean );

<jsp:useBean>声明的对象默认的的有效范围是page

isErrorPage 和errorPage属性及不同

默认是false
在错误处理界面内
若isErrorpage= "true", jsp内置对象exception可以捕捉到错误信息 exception.toString().
errorPage属性
errorPage= "jsp文件的相对路径"

errorPage和isErrorPage属性需一起使用,用于指定错误页
errorPage属性:指定错误出现时要跳转的页面
isErrorPage属性:设置该页面是错误页

Class.getResource(String path)
path不以'/'开头时,默认是从此类所在的包下取资源;
path以'/'开头时,则是从项目的ClassPath根下获取资源。在这里'/'表示ClassPath的根目录。
JDK设置这样的规则,是很好理解的,path不以'/'开头时,我们就能获取与当前类所在的路径相同的资源文件,而以'/'开头时可以获取ClassPath根下任意路径的资源。

getRealPath,计算机术语。返回一个字符串,包含一个给定虚拟路径的真实路径。
getResource(String path) 返回映射到某个资源的文件的URL对象。 InputStream getResourceAsStream(String path) 返回映射到某个资源文件

requset.getRequestDisepatcher()与sendRedirect的不同/转发和重定向的区别和介绍

request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 这个是在服务端运行的,对浏览器来说是透明的。
response.sendRedirect()是重新定向,前后页面不是一个request。而这个是在浏览器端运行的。

RequestDispatcher.forward()方法与HttpServletResponse.sendRedirect()方法的区别

RequestDispatcher.forward()方法仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址。
HttpServletResponse.sendRedirect()方法则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。

转发和重定向的区别(总结)

转发的地址栏不变,而重定向变成转发后的资源。
转发是一次请求,而重定向是两次请求。所以一般可以说重定向是2次转发。
转发只能在自己内部服务器资源内相互转发,而重定向可以访问其他站点。

在web.xml中使用<filter>和<filter-mapping>标签配置过滤器。

response.getWriter().write()与out.print()的不同及介绍

PrintWriter与out对象的区别 (response.getWriter().write()与out.print())
   1. 这两个对象的类型是完全不同的:内置对象out的类型是JspWriter;response.getWrite()返回的类型是PrintWriter 。
    2. 获取方式不同:JspWriter是JSP的内置对象,直接使用即可,对象名out是保留字,也只能通过out来调用其相关方法。此外还可以通过内置对象pageContext.getOut();获得;PrintWriter则是在用的时候需要通过内置对象response.getWriter();获得。
    3. JspWriter的print()方法会抛出IOException;而PrintWriter则不会 。
    4. JspWriter和PrintWriter都继承自Java.io.Writer,但JspWriter是抽象类,而PrintWriter不是。

然而最最主要的区别是:如果在同一jsp或Servlet文件中同时使用了JspWriter对象和PrintWriter对象,在调用print或者println方法后的执行情况不同。

    5.执行原理不同:JspWriter相当于一个带缓存功能的printWriter,它不是直接将数据输出到页面,而是将数据刷新到response的缓冲区后再输出,response.getWriter直接输出数据(response.print()),所以(out.print)只能在其后输出。

    6.out为jsp的内置对象,刷新jsp页面,自动初始化获得out对象,所以使用out对象是需要刷新页面的,而response.getWriter()响应信息通过out对象输出到网页上,当响应结束时它自动被关闭,与jsp页面无关,无需刷新页面;

形象的比喻:当我们调用response.getWriter()这个对象同时获得了网页的画笔,这时你就可以通过这个画笔在网页上画任何你想要显示的东西。

out.println(""); 方法并不能也页面布局换行,只能领html代码换行,要实现页面布局换行可以:out.println("</br>");

在访问Servlet时,在浏览器地址栏中输入的路径是在()地方配置的。
<url-pattern/>

Synchronized的介绍及用处

当一个客户线程执行某个方法时,其他客户必须等待,直到这个客户线程调用执行完毕该方法后,其他客户线程才能执行,这样的方法在定义时必须使用关键字synchronized
 synchronized是Java的一个关键字。来自官方的解释:Synchronized方法支持一种简单的策略,用于防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读或写操作都通过Synchronized方法完成。

Synchronized保证同一时刻有且只有一条线程在操作共享数据,其他线程必须等待该线程处理完数据后再对共享数据进行操作。此时便产生了互斥锁,互斥锁的特性如下:

互斥性:即在同一时刻只允许一个线程持有某个对象锁,通过这种特性来实现多线程协调机制,这样在同一时刻只有一个线程对所需要的同步的代码块(复合操作)进行访问。互斥性也成为了操作的原子性。

可见性:必须确保在锁释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程可见(即在获得锁时应获得最新共享变量的值),否则另一个线程可能是在本地缓存的某个副本上继续操作,从而引起数据不一致。

Synchronized是最基本的互斥手段,保证同一时刻最多只有1个线程执行被Synchronized修饰的方法 / 代码,其他线程 必须等待当前线程执行完该方法 / 代码块后才能执行该方法 / 代码块。

form标签中action的作用

 <form action="URL">
属性值
值     描述
URL     当表单提交时向何处发送表单数据。

    可能的值:

        绝对 URL - 指向另一个网站(比如 action="http://www.example.com/example.htm")
        相对 URL - 指向网站内的一个文件(比如 action="example.htm")

选择题易错点

假设在helloapp应用中有一个Javabean文件HelloServlet,它位于org.javathinker包下,那么这个bean的class文件应该放在什么目录下helloapp/WEB-INF/classes/org/javathinker/HelloServlet.class

假设在helloapp应用中有一个HelloServet.java类,它位于com.itheima包中,那么这个类的.class文件的存放路径应该是什么helloapp/WEB-INF/classes/com/itheima/HelloServlet.class

DefaultServlet先根据客户端的访问路径,获取资源路径,然后找到服务器上资源绝对路径,再判断是否存在,如果不存在,则返回404或做其他处理,如果存在,则进行一个io读取操作返回给客户端。

<init-param>配置中的<param-name>listing</param-name>和<param-value>false</param-value>作用:如果当前访问的是一个目录,会将目录以列表形式展示文件夹下的内容,前提value是true,如果为false,则会报404。这个配置会根据不同版本的Tomcat有区别。

在浏览器中输入http://localhost:8080/myWebApp/start/,就会调用itcast包中名为Student的Servlet,那么在web.xml中配置正确的是student itcast.Student   student /start

页面page1.jsp要把请求转发给page2.jsp,在转发的时候,希望把用户名"李明"传给page2.jsp,<a href="page2.jsp?username=李明">转发</a>

JSP页面可以在“<%=”和“%>”标记之间放置Java表达式,直接输出Java表达式的值。组成“<%=”标记的各字符之间不可以有空格

Jsp期末复习资料 习题部分 第一章 JSP概述 1.JSP技术是由 A 语言作为脚本语言。 A.Java B.C++ C.C# D.C 2.Web是与平台无关、分布式的、图形化的和易于导航的,定义了客户端和服务器端如何通信。 3.HTTP(超文本传输协议)是一种Internet上常见的协议,用于传输超文本标记语言(HTML)编写的文件,也就是通常所说的网页。 4.网站一般分为3层,分别是用户界面交互层、应用程序层、数据库层。 5.Servlet的生命周期是载入、初始化、执行和删除。 6.JSP技术是在传统的网页文件HTML中加入java程序片段和JSP标记构建的JSP网页 7.什么是C/S结构?什么是B/S结构?两者由什么区别? 答:C/S是Client/Server(客户机/服务器)结构,B/S是Browser/Server(浏览器/服务器)结构。B/S结构是三层体系结构,B/S结构要求客户端只需要安装一个浏览器(Browser),客户端通过浏览器将请求发送给Web服务器,Web服务器负责与后端数据库服务器进行数据通信;C/S结构是二层结构平台模式,C/S结构要求客户端要安装指定的软件,客户端负责执行前端的数据处理,服务端进行后端的服务处理。 8.简述JSP技术和Servlet技术的区别和联系。 ♦区别:⑴JSP技术主要用来表现页面,而Servlet技术主要用来完成大量的逻辑处理。 ⑵JSP主要用来发送给前端的用户,而Servlet主要来响应用户的请求,完成请求 的逻辑处理。 ♦联系:在实际开发中,往往先把JSP页面开发出来,然后再将JSP代码转换成Servlet。 实验三: <%=1+1 %>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你我我他

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值