JSP入门
1.JSP概述
1. 什么是JSP
- JSP(Java Server Pages)是JavaWeb服务器端的动态资源。它与html页面的作用是相同的,显示数据和获取数据。
2. JSP的组成
- JSP = html + Java脚本(代码片段) + JSP动态标签
- jsp中无需创建即可使用的对象一共有9个,被称之为内置对象,例如:request对象、out对象
- 3种java脚本
①<%...%>:java代码片段(常用)用于定义0–N条java语句!方法内能写什么,它就可以放什么
②<%=…%>:java表达式,用于输出一条表达式(或变量)的结果
③<%!...%>:声明,用来创建类的成员变量和成员方法(基本不用,但容易被考到)
3. Jsp和Servlet分工[掌握]
- JSP
①作为请求发起页面,例如显示表单、超链接
②作为请求结束页面,例如显示数据
- Servlet:作为请求数据的环节
4. 小案例
form.jsp
<body> <form action="/jsp/AServlet" method="post"> 整数1:<input type="text" name="num1"/></br> 整数2:<input type="text" name="num2"/><br> <input type="submit" value="提交"/> </form> </body>
AServlet
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取参数 String s1 = request.getParameter("num1"); String s2 = request.getParameter("num2"); // 转换成int类型 int num1 = Integer.parseInt(s1); int num2 = Integer.parseInt(s2); int sum = num1 + num2; // 把结果保存到request域中 request.setAttribute("result", sum); // 转换到result.jsp request.getRequestDispatcher("/jsp/result.jsp").forward(request,response); }
result.jsp
<body> <% Integer result=(Integer)request.getAttribute("result"); %> <%=result%> </body>
5. Jsp原理
①.html数据都会在out.write()中出现,而且是在双引号内,即当前字符串输入给客户端
②.<% %>中的数据会原封不动的入到"真身"中,它一定是一条合法的java语法
③.<%=…%>中的数据会放到out.println()中,但没有双引号,那么就不会输出字符串,而是输出变量
6. Jsp注释
<%-- --%>:当服务器把jsp编译成java文件已经忽略了注释部分
Cookie
- Cookie[重要] Cookie是不能跨浏览器
- Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!
1. 精通
- response.addCookie():方法向浏览器保存Cookie
- request.getCookies()方法获取浏览器归还的Cookie
- getName():得到当前Cookie的名字
- getValue():得到当前Cookie的值
2.Cookie第一例:
①一个jsp保存cookie,a.jsp
<h1>保存Cookie</h1> <% //创建cookie Cookie cookie1=new Cookie("aaa","AAA"); //往相应对象中添加cookie(服务器给浏览器) response.addCookie(cookie1); Cookie cookie2=new Cookie("bbb","BBB"); response.addCookie(cookie2); %>
②另一个jsp获取浏览器归还的Cookie b.jsp
<h1>获取Cookie</h1> <% Cookie[]cookies=request.getCookies(); if(cookies!=null){ for(Cookie c:cookies){ out.print(c.getName()+"="+c.getValue()+"<br/>"); } } %>
3.Cookie的生命 掌握
- cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失[ <0 表示只要浏览器关闭,cookie就消失]
- cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;[ 以秒为单位 ]
- cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。
4. Cookie的路径(path)
1.Cookie的path并不是设置这个Cookie在客户端保存路径!!
2.Cookie的path由服务器创建Cookie时创建
3.当浏览器访问服务器的路径,如果包含某个Cookie路径,那么久会归还这个Cookie。例如:
a. Cookie.path=/day11_1/; b. Cookie.path=/day11_1/jsps/; c. Cookie.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
Session
3HttpSession[重要]
1.HttpSession概述
- HttpSession是由JavaWeb提供的,用来会话跟踪类。session是服务器端对象,保存在服务器端!
- HttpSession是Servlet三大域对象之一(request、session、application[ServletContext])
- session底层依赖Cookie,或是URL重写
2.HttpSession的作用
- 会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束!
- 会话:一个用户对服务器的多次连贯性请求!所谓连贯性请求,就是该用户多次请求中间没有关闭浏览器!
- 服务器会为每个客户端创建一个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);注意返回一个Object
③void removeAttribute(String name);
3. 案列
案例1:演示session中会话的多次请求中共享数据[了解]
a.jsp
<h1>向session域保存数据</h1> <% session.setAttribute("aaa", "AAA"); %>
b.jsp
<h1>获取session中的数据</h1> <% String s=(String)session.getAttribute("aaa"); %> <%=s %>
4.HttpSession原理[理解]
request.getSession()方法:
> 获取Cookie中的JSESSIONID:
如果sessionId不存在,创建session,把session保存起来,把新创建的sessionId保存到Cookie中
如果sessionId存在,通过sessionId查找session对象,如果没有查找到,创建session,把session保存起来,把新创建的sessionId保存到Cookie中
如果sessionId存在,通过sessionId查找到了session对象,那么就不会再创建session对象了。
返回session
- request.getSession(false)、request.getSession(true)、request.getSession(),后两个方法效果相同
第一个方法:如果session缓存中(如果cookie不存在),不存在session,那么返回null,而不会创建session对象。
5.Session中其他方法[了解]
String getId():获取sessionId;
int getMaxInactiveInterval():获取session可以的最大不活动时间(秒),默认为30分钟。当session在30分钟内没有使用,那么Tomcat会在session池中移除这个session;
void invalidate():让session失效!调用这个方法会被session失效,当session失效后,客户端再次请求,服务器会给客户端创建一个新的session,并在响应中给客户端新session的sessionId;[重要]
boolean isNew():查看session是否为新。当客户端第一次请求时,服务器为客户端创建session,但这时服务器还没有响应客户端,也就是还没有把sessionId响应给客户端时,这时session的状态为新。
6.URL重写 [ 理解 ]
- 就是把所有的页面中的路径,都使用response.encodeURL("…")处理一下!
session依赖Cookie,目的是让客户端发出请求时归还sessionId,这样才能找到对应的session
如果客户端禁用了Cookie,那么就无法得到sessionId,那么session也就无用了!也可以使用URL重写来替代Cookie
让网站的所有超链接、表单中都添加一个特殊的请求参数,即sessionId
这样服务器可以通过获取请求参数得到sessionId,从而找到session对象。
response.encodeURL(String url) 该方法会对url进行智能的重写:当请求中没有归还sessionid这个cookie,那么该方法会重写url,否则不重写!当然url必须是指向本站的url
<body> <a href="/JavaBase/AServlet;JESSIONID=<%=session.getId()%>">点击</a> <% out.println(response.encodeURL("/JavaBase/AServlet")); %> </body>
第一次访问
第二次访问