第三章 JSP动态网页设计

HTTP

概念:HyperText Transfer Protocol,超文本传输协议,规定浏览器和服务其之间的数据传输规则。
特点:
1.基于TCP协议:面向连接,安全
2.基于请求、响应模型:一次请求对应一次响应。
3.HTTP协议是无状态的协议:对于事物处理没有记忆能力。
使用会话技术(Cookie、Session)来解决多次请求不能共享数据的特点。

HTTP请求数据格式:
1.GET请求请求参数在请求行中,没有请求体。POST请求请求参数在请求体中。
2.GET请求请求参数有大小限制,而POST没有。

JSP

概念:Java服务端页面,Java Server Pages
jsp=HTML+Java,本质上是一个Servlet
JSP在被访问时,由JSP容器(Tomcat)将其转换为Java文件(Servlet),在由JSP容器将其编译,最终对外提供服务的就是这个字节码文件。

脚本分类:
1.<%…%>:内容直接放到_jspService方法之中
2.<%=…%>:内容会放到out.print()中,作为out.print()的参数
3.<%!..%>:内容直接放到_jspService方法之外,被类直接包含。
说明:
①JSP页面转译为servlet源代码时,JSP页面内的java代码块按先后顺序合并到服务方法中。
②每一次请求一个JSP页面时 , 服务方法被执行,但声明部分则只在第一次请求页面时执行。
③在语句中定义的变量作为服务方法的局部变量,在声明中定义的变量是servlet类的成员变量。

说明:

①include为“包含”(合并两个页面内容),forward称为“转发”或“跳转”(跳转前内容看不到了),都发生在服务器端,客户端地址不变,还是1.jsp。

<body>
	<%
		request.setCharacterEncoding("UTF-8");
	%>
	1.jsp
	<br>
	<jsp:forward page="2.jsp">
		<jsp:param name="param1" value="你好" />
	jsp:forward>
body>

include指令(<%@ include file="..."%>)和标签的区别:前者为静态包含,源文件合并成一个再编译,效率较高。后者为动态包含,两个页面分别编译,可以传递参数。对于导航、页脚等多个页面都有的内容可以单独写在一个页面中,其它页面利用包含指令或标签使用它们。

参数的传递和获取:
1.通过表单提交
2.直接在地址后面追加(*.jsp?p1=aa&p2=bb,表示向jsp页面传递参数p1和p2,p1参数值为aa,p2参数值为bb,参数之间用&分隔)
3.的方式
get方式下,参数信息作为地址的一部分显现,内容长度受限于网址的长度限制。
post方式下,参数信息不外显,更为安全且长度无限制,用于文件上传等情形

post方式下,参数值为中文时,直接获取会得到乱码
需要获取前执行:request.setCharacterEncoding("UTF-8");

重定向:sendRedirect(String url),将当前地址跳转到指定地址url。与链接相似,只是后者需要用户手动点击链接才会跳转。

**转发:**直接在服务器端跳转,客户端地址不变,先前的请求(request)传递到转发的页面,只能跳转到本应用的地址;
**重定向:**是客户端重新请求新的地址,产生新的请求(request),可以跳转到任意地址。

session

会话对象,用于保存用户的一次“会话”信息。当用户第一次访问应用时,服务器端会创建一个与之关联的session对象,并将其独一无二的sessionId以cookie的形式保存到客户端内存中,以后访问应用时,sessionId会自动传给服务器端标识用户身份。

下列几种情形下,session会消亡:
1.执行session.invalidate()手动销毁session对象。
2.用户长时间(MaxInactiveInterval,最大非活动间隔,默认半小时)没有与应用交互,服务器会认为用户离开了而销毁服务器端session对象。
3.用户关闭浏览器,这时客户端sessionId丢失而与服务器端session失去联系,服务器端session终将在最大非活动间隔到来后被销毁。

application

应用对象,保存应用的全局信息,服务器启动时该对象创建,只要不关闭服务器,application对象将一直存在。

pageContext

页面上下文对象,提供对各种内置对象的访问

<body>
<%
		pageContext.setAttribute("p", "pagestr");
		request.setAttribute("r", "requeststr");
		session.setAttribute("s", "sessionstr");
		application.setAttribute("a", "applicationstr")		
%>
body>
<body>
	<%
		out.print(pageContext.getAttribute("p") + "<br/>");
		out.print(request.getAttribute("r") + "<br/>");
		out.print(session.getAttribute("s") + "<br/>");
		out.print(application.getAttribute("a"));
	%>
body>

四种方式:
重定向,结果如下:null、null、sessionstr、applicationstr
链接,结果如下:null、requeststr、sessionstr、applicationstr
换一个浏览器窗口访问,结果如下:null、null、null、applicationstr
重启服务器后访问:null、null、sessionstr、applicationstr

Cookie对象

查看结果中多了一个cookie对象,为什么?
答:JSESSIONID是一个Cookie,Servlet容器用来记录用户sessionId.

EL表达式

${brands}:获取域中存储的key为brands的数据
page:当前页面有效
request:当前请求有效
session:当前会话有效
application:当前应用有效
EL表达式依次从这四个域中开始找。

JSTL标签

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%
		session.setAttribute("first",111);
	%>
	<c:if test="${first!=0}">
		启用
	c:if>
	<c:if test="${first==0}">
		禁用
c:if>

Servlet

Request():获取请求数据
Response():设置响应数据
请求参数的获取方式:
1.GET方式:String getQueryString()
2.POST方式:BufferedReader getReader()

MapgetParameterMap():获取所有参数Map集合
String[] getParameterValues(String name):根据名称获取参数值(数组)
String getParameter(String name):根据名称获取参数值(单个值)

你可能感兴趣的:(JavaWeb,java,servlet,开发语言)