前言
Java基础语法的坑补上了,开始学JSP啦
希望头发不会少...QWQ
Begin
JSP页面元素
<%局部变量、java语句%>
<%!全局变量、定义方法%>
<%=输出表达式 %>
page指令
page指定的属性:
language
:jsp页面使用的脚本语言import
:导入类pageEncoding
:jsp文件自身编码contentType
:浏览器解析jsp的编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
注释
- html注释
<!-- -->
,用户可通过浏览器查看源码查看。 - java注释
//
,/*...*/
- jsp注释
<%-- --%>
常见状态码
200:一切正常
300/301: 页面重定向 (跳转)
404: 资源不存在
403:权限不足 (如果访问a目录,但是a目录设置 不可见)
500:服务器内部错误(代码有误)
设置初始页面
在项目/WEB-INF/web.xml
中设置 默认的 初始页面
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
虚拟路径
方法一:将web项目配置到webapps以外的目录
在conf/server.xml中配置
host标签中:<Context docBase="D:\study\JspProject" path="/JspProject" />
docBase:实际路径
path:虚拟路径 (绝对路径、相对路径(相对于webapps))
重启
方式二:
在apacheconfCatalinalocalhost中新建“项目名.xml”中新增一行:<Context docBase="D:\study\JspProject" path="/JspProject" />
虚拟主机
通过www.test.com访问本机
方法一:
修改 conf/server.xml
<Engine name="Catalina" defaultHost="www.test.com">
<Host appBase="D:\study\JspProject" name="www.test.com">
<Context docBase="D:\study\JspProject" path="/"/>
</Host>
方法二:
在C:WindowsSystem32driversetchost增加127.0.0.1 www.test.com
内置对象
out
输出对象,向客户端输出内容
request
请求对象;存储“客户端向服务端发送的请求信息”
- 常见方法:
String getParameter(String name)
:根据请求的字段名key (input标签的name属性值) ,返回字段值value (input标签的value属性值)String[] getParameterValues(String name)
: 根据请求的字段名key ,返回多个字段值value (checkbox)void setCharacterEncoding("编码格式utf-8")
:设置post方式的请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)getRequestDispatcher("b.jsp").forward(request,response)
; :请求转发 的方式跳转页面 A - > BServletContext getServerContext()
:获取项目的ServletContext对象
- 注意:
get与post请求方式的区别:
- get方式 在地址栏显示 请求信息 (但是地址栏能够容纳的 信息有限,4-5KB;如果请求数据存在大文件,图片等 会出现地址栏无法容纳全部的数据而出错),post不会显示
- 文件上传操作,必须是post
- 修改server.xml ,一次性的 更改tomcat默认get提交方式的编码 (utf-8)建议 使用tomcat时,首先在server.xml中统一get方式的编码
URIEncoding="UTF-8"
- 推荐使用post。
response:响应对象
常见方法:
- void addCookie( Cookie cookie ); 服务端向客户端增加cookie对象
- void sendRedirect(String location ) throws IOException; :页面跳转的一种方式(重定向)
- void setContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)
请求转发 | 重定向 | |
---|---|---|
地址栏是否改变 | 不变 | 改变 |
是否保留第一次请求数据 | 保留 | 不保留 |
请求次数 | 1 | 2 |
跳转发生位置 | 服务端 | 客户端发出的第二次跳转 |
session会话
- 存在于服务端,cookie由服务端生成,发送给客户端保存,不是内置对象,需要
new
cookie:
- K-V对
- 作用:提高访问服务端的效率,但是安全性较差。
javax.servlet.http.Cookie
提供public Cookie(String name,String value)
String getName()
:获取nameString getValue()
:获取valuevoid setMaxAge(int)
;最大有效期(秒)
如何使用cookie:
- 服务端准备Cookie:response.addCookie(Cookie cookie)
- 页面跳转(转发,重定向)
- 客户端获取cookie: request.getCookies();
- 服务端增加cookie通过response对象
- 客户端获取对象通过request对象
- 不能直接获取某一个单独对象,只能一次性将 全部的cookie拿到
- 建议cookie只保存英文数字,否则需要进行编码、解码
request.setCharacterEncoding("utf-8");
Cookie[] cookies = request.getCookies();
Cookie cookie = new Cookie();
cookie.setMaxAge(30 * 24 * 60 * 60);
//cookie.setPath("/");
response.addCookie(cookie);
for (Cookie tmp : cookies) {
if (tmp.getName().equals(name)) {
}
}
session
session机制:
- 客户端第一次请求服务端时,(jsessionid-sessionid匹配,不存在)服务端会产生一个session对象(用于保存该客户的信息)。并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
- 服务端由会产生一个cookie,并且该cookie的name=JSESSIONID ,value=服务端sessionId的值;然后服务端会在响应客户端的同时将该cookie发送给客户端,至此客户端就有了一个cookie(JSESSIONID);
- 因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)
- 客户端第二/n次请求服务端时: 服务端会先用客户端cookie的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),说明此用户不是第一次访问,无需登录;
session方法:
String getId()
:获取sessionIdboolean isNew()
:判断是否是新用户(第一次访问)void invalidate()
:使session失效(退出登录、注销)void setAttribute()
Object getAttribute()
void setMaxInactiveInterval(秒)
:设置最大有效非活动时间int getMaxInactiveInterval()
:获取最大有效非活动时间
cookie和session的区别
session | cookie | |
---|---|---|
保存的位置 | 服务端 | 客户端 |
安全性 | 较安全 | 较不安全 |
保存的内容 | Object | String |
application
- 全局对象
String getContextPath()
获取虚拟路径String getRealPath(String name)
: 获取绝对路径(虚拟路径相对的绝对路径)application.setAttribute(k, v)
application.getAttribute(k)
pageContext
JSP页面容器
config
配置对象(服务器配置信息)
page
当前JSP页面对象(相当于Java中的this)
exception
异常对象
四大范围对象
- 小->大
对象 | 作用范围 |
---|---|
pageContext JSP页面容器(有时称为page对象) | 当前页面有效 |
request 请求对象 | 同一次请求有效 |
session 会话对象 | 同一次会话有效 |
appliation 全局对象 | 全局有效(整个项目有效) |
- 以上4个对象共有的方法:
Object getAttribute(String name)
:根据属性名,或者属性值void setAttribute(String name,Object obj)
:设置属性值(新增,修改)setAttribute("a","b")
:如果a对象之前不存在,则新建一个a对象。如果a之前已经存在,则将a的值改为bvoid removeAttribute(String name)
:根据属性名,删除对象
- 范围详解
- pageContext 当前页面有效 (页面跳转后无效)
- request 同一次请求有效;其他请求无效 (请求转发后有效;重定向后无效)
- session 同一次会话有效 (无论怎么跳转,都有效;关闭/切换浏览器后无效 ; 从 登陆->退出 之间 全部有效)
- application 全局变量;整个项目运行期间 都有效 (切换浏览器 仍然有效);关闭服务、其他项目无效
- 如果需要多个项目共享、重启后仍然有效:JNDI
- 以上的4个范围对象,通过
setAttribute()
赋值,通过getAttribute()
取值。 - 以上范围对象,尽量使用最小的范围。因为对象的范围越大,造成的性能损耗越大。
版权属于:moluuser
本文链接:https://archive.moluuser.com/archives/30/
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。