JSP笔记
1.jsp页面元素
2.for循环
<%@ page language="java" contentType="text/html; charset=UTF-8"
``pageEncoding="UTF-8" import="java.util.*"%>
<%
List<String> words = new ArrayList<String>();
words.add("today");
words.add("is");
words.add("a");
words.add("great");
words.add("day");
%>
<table width = "200px" align = "center" border = "1" cellspacing = "0">
<%
for(String word : words){
%>
<tr>
<td><%=word%></td>
</tr>
<%}%>
</table>
3.工具版本兼容问题
每个页面最下方都有版权声明等信息,如果不使用包含,那么每个页面都需要单独写,如果版权声明要修改,则需要很大的工作量。
使用include的办法,只需要准备一个footer.jsp,然后在其他页面包含footer.jsp即可。
修改的时候,只需要修改footer.jsp,所有的页面就都修改好了,维护成本降低了很多。
4.指令include和动作include的区别
我们知道jsp最后会被编译成Servlet,如果是指令include:footer.jsp的内容会被插入到当前jsp中然后编译成一个Servlet。而如果是动作include:footer.jsp的内容不会被插入到当前JSP中。当被访问时,主页面会在服务端访问footer.jsp,然后把返回的结果嵌入到响应中。
5.传参
因为指令<%@include file = “footer.jsp”%>会导致两个jsp文件合并成一个jsp文件,所以就不存在传参问题。
而动作<jsp:include page = “footer.jsp”/>其实是对footer.jsp进行了一次独立的访问,那么就有传参的需要。
动作include传参
<jsp:include page = "footer.jsp">
<jsp:param name = "year" value = "2017"/>
</ jsp:include>
footer.jsp 取参
</hr>
<p style = "text-align:center">
copyright@<%=request.getParameter("year")%>
</p>
6.JSP跳转
客户端跳转
<%
response.sendRedirect("hello.jsp")
%>
<%--跳转的状态码是302--%>
服务器端跳转
与Servlet服务器端跳转一样,也可以使用
request.getRequestDispatcher("hello.jsp").forward(request,response);
或者使用动作,简化代码
<jsp:forward page="hello.jsp"/>
7.cookie
什么是cookie
cookie是一种浏览器和服务器交互数据的方式。
cookie是由服务器创建,然后发送给浏览器,最后由浏览器保存在用户本地。
用户下次访问网站时,浏览器就会把该cookie发送给服务器。
如何创建cookie
在web目录下创建一个setCookie.jsp
<%@ page language="java" contentType="text/html";charset="UTF-8";pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
Cookie c = new Cookie("name","Gareen");
<%--创建了一个cookie,key是name;value是"Gareen"--%>
c.setMaxAge(60*24*60);
<%--表示这个cookie可以保留一天--%>
c.setPath("/");
<%--表示所有访问这个服务器的请求都需要提交这个cookie到服务器--%>
response.addCookie(c);
<%--通过response把这个Cookie发送给客户端,客户端会保存此Cookie--%>
<a href="getCookie.jsp">跳转到获取cookie的页面</a>
在web目录下创建getCookie.jsp
<%@ page language="java" contentType="text/html";charset="UTF-8";pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%>
<%
Cookie[] cookies = request.getCookies();
if(null != cookies){
for (int d = 0;d <= cookies.length-1;d++){
out.print(cookies[d].getName()+":"+cookies[d].getValue()+"<br>")
}
}
%>
8.Session
Session对应的中文翻译是会话,会话是指从用户打开浏览器访问一个网站开始,无论在这个网站中访问了多少页面,点击了多少链接,都属于同一个会话。知道该用户关闭浏览器为止。
创建setSession.jpg
<%page language="text/html";charset="UTF-8";pageEncoding="utf-8" import = "javax.servlet.http.Cookie"%>
<%
session.setAttribute("name","teemo");
%>
<a href = "getSession.jsp">跳转到获取session的页面</a>
创建getSession.jsp
<%page language="text/html";charset="UTF-8";pageEncoding="utf-8" import = "javax.servlet.http.Cookie"%>
<%
String name = (String)session.getAttribute("name");
%>
session中的name:<%=name%>
如果没有cookie,session如何工作
如果浏览器把cookie功能关闭,那么服务端就无法获取jsessionid,每一次访问,都会生成一个新的session对象。
为了解决这个问题,可以使用
response.encodeURL("getSession.jsp")
response.encodeURL方法会把getSession.jsp这个url转换为
getSession.jsp;jsessionid=*****
通过这个方式,提交jsessionid到服务器。服务器根据这个jsessionid匹配到对应的session。与session相关的功能就可以正常工作了。
session的有效期
比如登陆一个网站,登陆后在短时间内,依然可以继续访问而不用重新登陆。但是较长时间不登陆,依然会要求重新登陆,这是因为服务端的session在一段时间不使用后,就失效了。
这个时间在Tomcat默认配置下是 30分钟,可以通过 可以通过d:/tomcat/conf/ web.xml 中的session-config 配置进行调整 。
JSP作用域
JSP有4个作用域
pageContext
准备setContext.jsp和getContext.jsp分别表示想作用域设置设置数据和从作用域获取数据。
通过pageContext.setAttribute(key,value)的数据,只能在当前页面访问,在其他页面就不能访问了。
**setContext.jsp **
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("name","gareen");
%>
<%=pageContext.getAttribute("name")%>
requestContext
requestContext表示一次请求。随着本次请求结束,其中的数据就被回收。
常用写法
request.setAttribute("name","gareen");
request.getAtrtibute("name");
requestContext与服务器端跳转
requestContext指的是一次请求,如果发生了服务端跳转,这其实还是一次请求。这也是一种页面间传递数据的方式。
setContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setAttribute("name","gareen");
%>
<jsp:forward page="getContext.jsp"/>
getContext.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%=request.getAttribute("name")%>
requestContext与客户端跳转
客户端跳转,浏览器会发生一次新的访问,新的访问会产生一个新的request对象。所以页面间客户端跳转的情况下是无法通过request传递数据的。
sessionContext
sessionContext指的是会话,从一个用户打开网站那一刻开始,无论访问了多少网页链接都属于同一个会话,直到浏览器关闭。
所以页面间传递数据也是可以通过session传递的。
但是,不同用户对应的session是不一样的,所以session无法在不同用户之间共享数据。
applicationContext
applicationContext指的是全局,所以用户共享同一个数据。在JSP中使用application对象,application对象是ServletContext接口的实例。application映射的就是web应用本身。 application = request.getServletContext()) 。
JDBC
//注册驱动DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//获取链接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名字");
//获取操作数据库的与处理对象
PreparedStatement psmt = connection.prepareStatement("select * from 数据表名字");
//执行sql语句并接受结果
ResultSet result = psmt.executeQuery();
//读结果while(result.next()){
System.out.println(result.getString("列名"));
}
//关闭资源
result.close();
psmt.close();
connection.close();
flowchat
st=>start:kaishi
<%@ … %>,比如<%@page import=“java.util.*”%> ↩︎
<%= … %>,用于输出一段html ↩︎
<% … %>,中间可以写任何java代码 ↩︎
<%! … %>,可以声明字段或者方法。但是不建议这样做。 ↩︎
<jsp:include page = “Filename”/>,在jsp中包含另一个页面。
[^静态内容 ]: 普通HTML 、Js、css、代码 ↩︎<%-- … --%>,不同于html注释 ,浏览器也看不到相应的代码。 ↩︎
<%@include file= “footer.jsp”%> ↩︎
<jsp:include page = “footer.jsp”/> ↩︎
当前页面 ↩︎
一次请求 ↩︎
当前会话 ↩︎
全局,所有用户共享 ↩︎