jsp笔记

JSP笔记

1.jsp页面元素

[^静态内容 ] 1 2 3 4 5 6

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,所有的页面就都修改好了,维护成本降低了很多。

include有两种方式78

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个作用域

9 10 11 12

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


  1. <%@ … %>,比如<%@page import=“java.util.*”%> ↩︎

  2. <%= … %>,用于输出一段html ↩︎

  3. <% … %>,中间可以写任何java代码 ↩︎

  4. <%! … %>,可以声明字段或者方法。但是不建议这样做。 ↩︎

  5. <jsp:include page = “Filename”/>,在jsp中包含另一个页面。
    [^静态内容 ]: 普通HTML 、Js、css、代码 ↩︎

  6. <%-- … --%>,不同于html注释 ,浏览器也看不到相应的代码。 ↩︎

  7. <%@include file= “footer.jsp”%> ↩︎

  8. <jsp:include page = “footer.jsp”/> ↩︎

  9. 当前页面 ↩︎

  10. 一次请求 ↩︎

  11. 当前会话 ↩︎

  12. 全局,所有用户共享 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值