javaweb基础

Servlet总结(说出大概意思)

在Java Web程序中,Servlet主要负责接收用户请求HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet可以设置初始化参数,供Servlet内部使用。一个Servlet类只会有一个实例,在它初始化时调用init()方法,销毁时调用destroy()方法Servlet需要在web.xml中配置(MyEclipse中创建Servlet会自动配置),一个Servlet可以设置多个URL访问Servlet不是线程安全,因此要谨慎使用类变量。

转发(Forward)和重定向(Redirect)的区别(说出大概意思)

转发是服务器行为,重定向是客户端行为。

转发(Forword)

通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。RequestDispatcher可以通过HttpServletRequest 的getRequestDispatcher()方法获得。例如下面的代码就是跳转到login_success.jsp页面。

request.getRequestDispatcher("login_success.jsp").forward(request,response);

重定向(Redirect) 是利用服务器返回的状态吗来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletRequestResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。

从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

从效率来说

forward:高.

redirect:低.

JSP和Servlet是什么关系

其实这个问题在上面已经阐述过了,Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容。JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然这个说法是很片面且不够准确的。JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller)。

JSP的内置对象及方法?

request表示HttpServletRequest对象。

它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。

response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)

out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

session表示一个请求的javax.servlet.http.HttpSession对象。 Session可以存贮用户的状态信息

applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息

config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page表示从该页面产生的一个servlet实例

exception 表示异常对象

session和cookie的区别 【必会】

session是存储在服务器端,

cookie是存储在客户端的,

所以安全来讲session的安全性要比cookie高,

然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。

又由于session是存放在服务器的内存中,

所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,

会话cookie确切的说是存放在客户端浏览器的内存中,

所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,

而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session会不会丢失,从上面叙述分析session的信息是通过sessionid获取的,而sessionid是存放在会话cookie当中的,当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在。 那么,session在什么情况下丢失,就是在服务器关闭的时候,或者是sessio过期,再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,然后session在什么时候被创建呢,确切的说是通过调用session.getsession来创建,这就是

session与cookie的区别

Cookie禁用的情况下,使用所有的访问路径url后面,带一个sessionid的参数

说一说Servlet的生命周期?

Servlet有良好的生存期的定义,

包括加载和实例化、初始化、处理请求以及服务结束。

这个生存期由 javax.servlet.Servlet接口的init(), service ()和destroy方法表达。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法 自动派 遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destr oy方 web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。

通过 调用 service()方法实现,根据请求的不同调用不同的do*()方法。结束服务,web容器调用servlet的 destroy ()方法。

HTTPS和HTTP的区别【必会】

http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议

https协议需要到ca申请证书,一般免费证书很少,需要交费。

http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。

http的连接很简单,是无状态的

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

Get和Post的区别【必会】

get是从服务器上获取数据(Http与服务器交互的查),post是向服务器传送数据(Http与服务器交互的改),

get传送的数据量较小,不能大于2KB。

post传送的数据量较大,一般被默认为不受限制。

【Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。】

之前我们有一个项目开发,遇到了在其他人的电脑上访问是正常的,但是到了他的电脑上就返回400的错误,这个就很奇怪了,之后我们采用了用 fiddler 抓包,发现url超长,他用的是IE浏览器,会对超长的url进行截取,所以会返回400的错误,所以我们表单提交的时候必须用post请求。

get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

在进行文件上传时只能使用post而不能是get。

.表单提交默认是用get.

JSP9大隐视对象中四个作用域的大小与作用范围

四个作用域从大到小:

appliaction>session>request>page application:全局作用范围,整个应用程序共享.

生命周期为:应用程序启动到停止。

session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记 住这个会话状态。

request:请求作用域,就是客户端的一次请求。

page:一个JSP页面。 以上作用范围使越来越小,

request和page的生命周期都是短暂的,他们之间的区别就是:

一个request可以包含多个page页(include,forward)。 Jsp的

sevlet过滤器

filter是一个过滤器,用来在请求前和响应后进行数据的处理。 filter的生命周期是:

实例化--->初始化(init)-->进行过滤(doFilter)--->销毁(destroy)-->释放资源

一个Filter必须实现javax.servlet.Filter接口 在项目中我们通常通过filter进行编码转换, 进行安全验证,

进行重复提交的判断。

web.xml 中的listener、filter、servlet 加载顺序

真正的加载顺序为:context-param -> listener -> filter -> servlet

JSP 标准标签库(JSTL)

1. 1.用于在JSP中显示数据,就像<%=...>1. 1.用于保存数据1. 1.用于删除数据1. 1.用来处理产生错误的异常状况,并且将错误信息储存起来1. 1.与我们在一般程序中用的if一样1. 1.本身只当做和的父标签1. 1.的子标签,用来判断条件是否成立1. 1.的子标签,接在标签后,当标签判断为false时被执行1. 1.检索一个绝对或相对 URL,然后将其内容暴露给页面1. 1.基础迭代标签,接受多种集合类型1. 1.根据指定的分隔符来分隔内容并迭代输出1. 1.用来给包含或重定向的页面传递参数1. 1.重定向至一个新的URL.1. 1.使用可选的查询参数来创造一个URL

Request对象的主要方法有哪些

setAttribute(String name,Object):设置名字为name的request 的参数值

getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组

getCharacterEncoding() :返回请求中的字符编码方式 = getContentLength() :返回请求的 Body的长度

getHeader(String name) :获得HTTP协议定义的文件头信息

getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例

getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例

getInputStream() :返回请求的输入流,用于获得请求中的数据

getMethod() :获得客户端向服务器端传送数据的方法

getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值

getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString() :获得查询字符串

getRequestURI() :获取发出请求字符串的客户端地址

getRemoteAddr():获取客户端的 IP 地址

getRemoteHost() :获取客户端的名字

getSession([Boolean create]) :返回和请求相关 Session

getServerName() :获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性

request.getAttribute()和 request.getParameter()有何区别

从获取方向来看:

getParameter()是获取 POST/GET 传递的参数值;

getAttribute()是获取对象容器中的数据值;

从用途来看:

getParameter用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。

getAttribute用于服务器端重定向时,即在 sevlet 中使用了 forward 函数,或 struts 中使用了

mapping.findForward。 getAttribute 只能收到程序用 setAttribute 传过来的值。

另外,可以用 setAttribute,getAttribute 发送接收对象.而 getParameter 显然只能传字符串。

setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。getParameter只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。

总结:

getParameter 返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)

getAttribute 返回的是Object,需进行转换,可用setAttribute 设置成任意对象,使用很灵活,可随时用

你可能感兴趣的:(javaweb基础)