一、tomcat解压后目录
bin: 可执行文件(startup.bat 、shutdown.bat)
conf: 配置文件(server.xml)
lib: tomcat依赖的jar文件
logs: 日志文件
temp: 临时文件
webapps: 可执行的项目
work: 由jsp翻译成的java,编辑成的class文件(jsp ->java ->class)
二、常见状态码:
200: 正常
300/301: 页面重定向 (跳转)
404: 资源不存在
403: 权限不足
500: 服务器内部错误(代码有误,页面会提示错误之处)
三、JSP的页面元素:
指令、HTML java代码(脚本Scriptlet)、注释
(1)page指令:<%@ page …%>
Language: jsp页面使用的脚本语言
contentType: 浏览器解析jsp的编码
pageEncoding: jsp文件自身编码,jsp ->java
import: 导入类
(2)脚本Scriptlet
<% 局部变量、java语句 %>
<%! 全局变量、定义方法 %>
<%=输出表达式 %>
需要重启tomcat服务:修改web.xml、配置文件、java 代码
不需要重启:修改 Jsp\html\css\js 代码
注意:回车:<br/>
(3)注释
jsp注释<%-- --%>
四、JSP9大内置对象:
pageContext JSP页面容器.
request 请求对象
response 响应对象
session 会话对象
appliation 全局对象
config 配置对象(服务器配置信息)
out 输出对象
page 当前JSP页面对象(相当于java中的this)
exception 异常对象
1.request对象的常见方法:
String getParameter(String name) : 根据key,得value
String[] getParameterValues(String name): 根据请key ,返回多个字段值value (checkbox)
void setCharacterEncoding(“编码格式utf-8”) : 设置post方式的请求编码
getRequestDispatcher(“xxx.jsp”).forward(request,response) ; 请求转发
ServletContext getServerContext(): 获取项目的ServletContext对象
(1)get与post请求方式
get提交方式:
method=“get”
地址栏请求
超链接,a标签<a href="xx">
get与post请求方式的区别:
a. 是否 在地址栏 显示
get方式 请求信息 会显示 (地址栏容量有限,数据过大可能会出错)
post不显示
b. 文件上传操作:post
(2)统一请求的编码(解决乱码)
get:
在server.xml中 ,URIEncoding=“UTF-8”
post:
request.setCharacterEncoding(“utf-8”) ;
或者在 tomcat\apache-tomcat-8.5.50\conf\logging.properties文件中加一句话:
java.util.logging.ConsoleHandler.encoding = GBK
若为新建jsp文件想修改为 UTF-8 格式,例如
解决方法: window->Preferences->Web->JSP Files,如下页面
在此页面Encoding选中ISO 10646,应用即可
2.response 提供的方法:
void addCookie( Cookie cookie ); 服务端向客户端增加cookie对象
void sendRedirect(String location ) throws IOException; 页面跳转(重定向)
void setContetType(String type): 设置服务端响应的编码(设置服务端的contentType类型)
(1)请求转发与重定向比较
| 请求转发 重定向
地址栏是否改变 不变(现地址栏) 改变(跳转的地址)
是否保留第一次 保留 不保留
请求时的数据
请求的次数 1 2
跳转发生的位置 服务端 客户端发出的第二次跳转
请求转发:
客户端 -> 服务端 A -> 服务端 B
重定向:
客户端 ->服务端A->告诉客户端去找B
客户端->服务端B
3.session
(1)session方法:
String getId(): 获取sessionId
boolean isNew() : 判断是否为第一次访问
void invalidate() : 使session失效 ,全部删除
void setAttribute(); 设置属性
Object getAttribute() ; 获取属性值
void setMaxInactiveInterval() :设置最大有效非活动时间,单位秒
int getMax InactiveInterval () :获取最大有效非活动时间
(2)Cookie方法:
javax.servlet.http.Cookie
public Cookie(String name,String value)
String getName()
String getValue()
void setMaxAge(int expiry);最大有效期(秒)
(3)
cookie存储在客户端(产生于服务端)
session存储在服务端
(4)实现机制
客户端第一次请求: 服务端产生一个sessionid(包含该客户信息),并赋值给cookie的jsessionid ,响应请求时将cookie发送给客户端。
cookie(JSESSIONID,sessionid的值)
多次登陆: 匹配服务端的sessionid和客户端的JSESSIONID,成功则直接登录。
服务端增加Cookie: response.addCookie(Cookie cookie)
页面跳转(请求转发,重定向)
客户端获取cookie: request.getCookies();
注意:客户端一次获取全部cookie,且cookie保存中文名时需编码、解码,所以最好为英文/数字
五、四种范围对象
pageContext JSP页面容器 当前页面有效 (其他地方看到page对象指的是此)
request 请求对象 同一次请求有效
session 会话对象 同一次会话有效
application 全局对象 全局有效(整个项目有效)
注意:从上到下为从小到大,尽量使用小的范围
. 若想多个项目共享、重启后仍然有效 JNDI 是好的选择
1.共有方法:
0bject getAttribute (String name) : 根据属性名,获得属性值
void setAttribute (String name, Object obj) : 设置属性值
eg: setAttribute(“a”,“b”) ;//若a不存在,则新建
若存在,则将a的值改为b
void removeAttribute (String name): 根据属性名,删除对象
2.模拟示例
运行环境:eclipse.exe
tomcat-8.5.50
(1)pageContext 当前页面有效(页面跳转后无效)
p1.jsp:
<%
pageContext.setAttribute("a", "b") ;
request.getRequestDispatcher("p2.jsp").forward(request, response) ;
%>
p2.jsp:
<%=pageContext.getAttribute("a") %>
测试结果:
(2)request 同一次请求有效;其他请求无效(请求转发有效,重定向无效)
<%
request.setAttribute("a", "b") ;
request.getRequestDispatcher("p2.jsp").forward(request, response) ;
%>
<%=request.getAttribute("a") %>
请求转发结果测试:
(3)session 同一次会话有效(无论怎么跳转都有效;关闭/切换浏览器
后无效;生命周期:登陆-退出)
<%
session.setAttribute("a", "b") ;
//request.getRequestDispatcher("p2.jsp").forward(request, response) ;
response.sendRedirect("p2.jsp");
%>
<%=session.getAttribute("a") %>
测试结果:
(4)application 全局有效;整个项目运行期间都有效(切换浏览器仍然有效);
关闭浏览器、其他项目内均无效
见scope/application.jsp + ap1.js
<%
application.setAttribute("a", "b") ;
//request.getRequestDispatcher("p2.jsp").forward(request, response) ;
response.sendRedirect("p2.jsp");
%>
<%=application.getAttribute("a") %>
测试结果: