<% String str1 = "局部变量"; // 局部代码段,这里面的代码都是局部的 %>
<%! String str1 = "全局变量"; // 全局代码段,这里面的代码都是全局的 %>
<%= //称作jsp表达式,用于将已经声明的变量或者表达式输出到网页上面。 %>
<!--
<%
System.out.println("html注释里面的代码依旧会执行");
%>
-->
<%--
System.out.println("jsp注释中的代码不会执行");
--%>
jsp本质是servlet;
jsp编译后或变成xxx_jsp.java,xxx_jsp.class;
jsp编译后放的目录:工作空间\.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\myWeb01\org\apache\jsp
final javax.servlet.http.HttpServletRequest request; // request请求对象 作用域
final javax.servlet.http.HttpServletResponse response; // response响应对象
final javax.servlet.jsp.PageContext pageContext; // pageContext 当前页面上下文 作用域
javax.servlet.http.HttpSession session = null; // session 会话 作用域
final javax.servlet.ServletContext application; // application 服务器 作用域
final javax.servlet.ServletConfig config; // config 配置对象
javax.servlet.jsp.JspWriter out = null; // out 输出对象
final java.lang.Object page = this; // page 当前页面对象
exception // exception 异常对象
request.setCharacterEncoding("utf-8");
tomcat8以后默认编码格式是utf-8,之前是iso-8859-1,所以所以现在的get请求很少有乱码问题;
//get请求乱码处理。两种方式:
//方式1:修改server.xml,强制指定参数传输中的字符集编码方式
//在修改tomcat默认端口配置项中,增加一个参数
URIEncoding="UTF-8"
//注意tomcat8.5版本后,默认对get请求已经变成了utf-8,不需要增加,以前是ISO-8859-1
//方式2:修改server.xml,在修改tomcat默认端口中,
增加useBodyEncodingForURI = "true"
//注意此配置是针对get请求乱码,让其使用post的请求处理方式(一般不需要)
//方式3:强制转码,前提你要知道来源编码,才可以转目标编码URIEncoding="ISO-8859-1" ->目标编码 UTF-8
userName = new String(userName.getBytes("ISO-8859-1"),"UTF-8");
//设置响应头的编码,页面接收响应的编码,页面以什么编码接收后端响应回来的内容
response.setHeader(“Content-Type”, “text/html;charset=UTF-8”);
//后端以什么编码响应给前端
response.setCharacterEncoding(“UTF-8”);
//转发到成功页面
//转发是客户端行为
request.getRequestDispatcher("success.jsp").forward(request, response);
//重定向到登录页面
//重定向是客户端行为
response.sendRedirect("userLogin.jsp");
转发访问的资源仅限于服务内部所有资源,不可以访问外部资源,但是重定向可以(除WIN-INFO之外);
//使用重定向跳转到百度页面 可以
response.sendRedirect("https://www.baidu.com");
//使用重定向跳转到百度页面 可以
response.sendRedirect("https://www.baidu.com");
转发可以访问到WEB-INFO下的资源,重定向不可以访问到;
//使用转发,跳转到WEB-INF安全目录中的页面 可以
request.getRequestDispatcher("../WEB-INF/OK.jsp").forward(request, response);
//使用重定向跳转到WEB-INF安全目录中的页面 不可以
response.sendRedirect("../WEB-INF/OK.jsp");
// 此处的 / 交给服务器进行解析,代表的是应用根目录(ip+端口+项目发布资源名)
request.getRequestDispatcher("/success.jsp").forward(request, response);
//导航栏跳转的路径:http://localhost:8096/kh96-01/doLogin2.jsp "/"表示ip+端口+项目发布资源名
//此处的 /交给浏览器进行解析,代表的是站点(ip+端口)
response.sendRedirect("/userLogin.jsp");
//导航栏跳转的路径:http://localhost:8096/userLogin.jsp "/"表示ip+端口 没有项目名
转发和重定向的区别(牢记:转发是服务器端行为,重定向是客户端行为):
可以转发;
方法 | 说明 |
---|---|
getParameter("name") | 获取表单提交的数据 |
setArrribute(Stirng key,Obbject value); | 保存一次请求的数据 |
getArrribute(Stirng key) | 过去请求中存放的数据 |
可以重定向;
session的会话跟踪机制:
方法 | 说明 |
---|---|
getId() | 获取sessionId |
session.setAttribute("key","value"); | 存放参数 |
session.getAttribute("keys"); | 获取参数 |
session.invalidate(); | 清除session对象 |
session.removeAttribute("key"); | 移除参数 |
session.setMaxInactiveInterval(10); | 设置session超时时间,秒 |
//通知服务器端,立刻删除当前用户的session对象,服务器中对应的session对象就不存在,之前保存的用户信息就无效,下一次就必须登录
session.invalidate();
// 方式2:程序主动删除属性,是服务器端session对象中保存的某个属性,session.removeAttribute(String key);
session.removeAttribute("sessionUser");
// 方式3:服务器主动删除,通过设置服务器端session会话对象的超时时长,达到时长,自动删除,单位是 秒
session.setMaxInactiveInterval(10);
// 方式4:服务器主动删除,通过修改服务器默认session超时时长配置,tomcat中默认session对象的超时时长是:30分钟
// tomcat的默认配置文件:tomcat目录下/conf/web.xml中有默认配置,如果需要修改,就讲如下配置,拷贝到自己项目中的web.xml中
<session-config>
<session-timeout>10</session-timeout>
</session-config>
// 注意:不是说session对象超时就是30分钟,如果在30分钟内有操作session对象,超时会顺延,只有没有操作到达30分钟,才会删除。
作用域 | 范围 |
---|---|
pageContext | 当前页面 |
request | 当前请求 |
session | 当前会话 |
application | 当前服务器(应用) |
范围大小:pageContext < request < session < application;
cookie创建:Cookie cookie = new Cookie("userRem",userName+"-"+userPwd);
方法 | 说明 |
---|---|
cookie.setMaxAge(10 * 60); | 设置过期时间,单位:秒 |
response.addCookie(cookie); | 响应返回cookie |
request.getCookies(); | 从请求中获取cookie数组 |
cookie.getName(); | 获取cookie的name |
cookie.getValue(); | 获取cookie的value |
<!-- 可能会发生错误的页面 -->
<%@page errorPage="500.jsp" %>
<!-- 定制的错误页面 -->
<%@ isErrorPage = "true"%> <!-- 只用写了这个才能使用exception对象 -->
<%=exception.getMessage() %> <!-- 通过ecxeption对象输出错误信息 -->
先将页面jsp导入,再将两个页面合成的jsp再编译;(注意变量冲突,引入页面的变量和本页面的变量会冲突)
<%@ include file="top.jsp"%>
举例:
main.jsp
<!--引入顶部页面 -->
<%@ include file="top.jsp"%>
top.jsp
<h2>顶部页面</h2>
先编译你两个页面,再引入页面;(不会产生变量冲突)
<jsp:include page="botton.jsp"/>
举例:
main.jsp
<!--引入顶部页面 -->
<jsp:include page="botton.jsp"/>
botton.jsp
<h2>底部页面</h2>
被编译后的文件目录: