Java Web学习笔记(2)

JSP内置对象

JSP中的9个内置对象:

pageContext:javax.servlet.jsp.PageContext:JSP的页面容器

request:javax.servlet.http.HttpServletRequest:得到用户的请求信息

response:javax.servlet.http:HttpServletResponse:服务器向客户端的回应信息

session:javax.servlet.http.HttpSession:用来保存每一个用户的信息

application:javax.servlet.ServletContext:表示所有用户的共享信息

config:javax.servlet.ServletConfig:服务器配置、可以取得初始化参数

out:javax.servlet.jsp.JspWriter:页面输出

page:java.lang.Object:表示从页面中表示出来的一个Servlet实例

exception:java.lang.Throwable:表示JSP页面所发生的异常,在错误页面中才起作用

4中属性范围

所谓的属性保存范围,指的是一个内置的对象,可以在多少个页面中保存并继续使用。

page:只在一个页面中保存属性,跳转之后无效

request:只在一次请求中保存属性,服务器跳转后依然有效

session:在一次会话范围中保存,无论何种跳转都可以使用,但是新开浏览器无法使用

application:在整个服务器上保存,所有用户都可以使用。

关于request属性范围的理解:request表示客户端的请求。正常情况下,一次请求服务器只会给予一次回应,那么这时如果是服务器端跳转,请求的地址栏没有改变,所以也就相当于回应了一次;而如果地址栏改变了,就相当于是发出了第二次请求,则第一次请求的内容肯定就已经消失了,所以无法取得。

通过超链接跳转后,地址栏改变,属于客户端跳转。

每一个新的浏览器连接上服务器后就是一个新的session。

application范围的属性设置过多会影响服务器的性能。

实际上,pageContext对象可以设置任意范围的属性。

如遇到提交中文产生乱码问题,可尝试使用setCharacterEncoding()方法设置一个统一的编码解决。

单一的参数都可以使用getPatameter()接收,而一组参数要用getPatameterValues()接收,另外在使用时最好判断接收来的参数是否为null

在web开发中,所有参数不一定非要由表单传递过来,也可以使用地址重写的方式进行传递。

动态页面地址?参数名称1=参数内容1&参数名称2=参数内容2&。。。

表单提交的get和post有什么不同?表单上的两种提交方式分别是get和post,但是两者在使用时有一个明显的区别就是:使用get提交时,提交的内容会显示在地址栏上之后;而使用post提交,提交的内容是不会显示在地址栏上。

要想取得头信息的名称,可以直接通过request内置对象getHeaderNames()方法;而要想取出每一个头信息的内容,则需要使用getHeader()方法。

既然在JSP和HTML中都可以完成定时跳转的功能,那么使用哪种更好呢?根据页面情况选择。如果一个请求的页面是动态页,则肯定要经过Web Container进行代码的拼凑操作;而如果是静态请求,则直接读取文件系统,所以只有当一个页面中没有JSP代码而又想执行定时跳转时才使用HTML形式的设置跳转头信息的操作。

还可以使用response对象的sendRedirect()方法直接完成页面的跳转。

<jsp:forward>属于服务器端跳转,跳转之后地址栏的信息并不会有任何的改变;而response.sendRedirect()属于客户端跳转,跳转之后地址栏是会改变的,变为跳转之后的页面地址。而且在使用request属性范围时,只有服务器端跳转才能够将request范围的属性保存到跳转页;而如果是客户端跳转,则无法进行request属性的传递;另外,如果使用的是服务器端跳转,则执行到跳转语句时会立刻进行跳转;如果使用的是客户端跳转,则是在整个页面执行完之后才执行跳转。

在使用JDBC的操作中,一定要在<jsp:forward>语句执行之前关闭数据库的连接,否则数据库连接将再也无法关闭。而如果数据库连接始终没有关闭,当达到一定程序时将出现“数据库连接已经达到最大的异常”,此时就只能重新启动服务器了。而且,如果使用了<jsp:forward>,可以通过<jsp:param>方便地进行参数的传递;而如果使用了response.sendRedirect()传递参数,则只能通过地址重写的方式完成。

在使用session操作时实际上都使用了Cookie的处理机制,即在客户端的Cookie中要保存着每一个Session Id,这样用户在每次发出请求时都会将此Session Id发送到服务器端,服务器端依靠此Session Id区分每一个不同的客户端。

session是否可以在服务器重新启动后继续使用?可以通过序列化的方式保存session继续使用。在session对象中可以使用isNew()方法判断一个用户是否是第一次访问页面。当用户第一次连接到服务器上时,服务器就会自动保留一个session的创建时间。

WEB-INF的安全性是最高的。<servlet-name>节点是在web.xml内部起作用。<servlet-name>节点的主要功能是连接<servlet>和<servlet-mapping>节点,此节点名称只在配置文件的内部起作用,并且多个配置不能重名。必须通过映射路径才能取得初始化参数。

pageContext对象中的getRequest()和getResponse()两个方法返回的是ServletRequest和ServletResponse,而常用的request和response分别是HttpServletRequest和HttpServletResponse接口的实例。

application对象可以直接通过this.getServletContext()方法替代,也可以通过getRealPath()方法取得虚拟目录所对应的真实路径。

使用config对象中的getInitParameter()方法可以取得初始化的配置参数,所有配置参数在web.xml文件中进行配置。

猜你喜欢

转载自blog.csdn.net/ARPOSPF/article/details/80248804