jsp个人笔记
静态网页 html/css
动态网页 jsp,asp,php
安装tomcat服务器
配置环境变量
#set tomcat
export TOMCAT_HOME=/home/juedaiyuer/apache-tomcat-9.0.0.M4
启动
startup.sh
测试是否启动成功
http://localhost:8080/
tomcat的目录结构
bin 命令文件
conf 配置文件
lib 所需的各种JAR文件
logs 日志文件
temp 临时文件
webapp 发布web应用时,默认会将Web应用的文件发布到此目录中
work 由jsp生成的servelet存放在此目录下
WEB-INF目录结构
是web应用的安全目录,客户端无法访问,只有服务端可以访问的目录
web.xml项目部署文件
默认欢迎页面:index.jsp
/**
1.配置默认欢迎页面
2.web.xml上面添加下面的代码
*/
<welcome-file-list>
<welcome-file>/yourfile.jsp</welcome-file>
</welcome-file-list>
classes文件夹,用以放置*.class文件
lib文件夹,用于存放需要的jar包
myEclipse
配置
配置JRE
preferences-java-Installed JRES 自行add,添加你想要的jdk安装目录即可
集成Tomcat服务器
preferences-myEclipse-servers-tomcat 设置你想要的tomcat目录即可
虚拟路径
修改tomcat服务器默认端口
/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
javaEE方向:电子银行,网上证券交易所,铁路,中国移动…
jsp指令
page指令,通常位于jsp页面的顶部,同一个页面可以有多个page指令
include指令,外部文件嵌入当前jsp页面的指令
taglib指令,使用标签库定义新的自定义标签,在jsp页面启动定制行为
<%@page
属性1 = "属性值" 属性2 = "属性值"...
%>
属性:
language ;
import 通过该属性来引用脚本语言中使用到的类文件
contentType 用来指定jsp页面所采用的编码方式,默认text/html,ISO-8859-1
jsp注释:
使用html注释 ,客户端可见
使用jsp注释,客户端不可见
<%–html注释–%>
jsp脚本注释
//单行注释
/**/多行注释
jsp脚本:
在jsp页面中执行的java代码
<% java 代码 %>
jsp声明:
在jsp页面中定义变量或者方法
<%! java 代码 %>
jsp表达式:
<% =表达式 %> 表达式不以分号结束
生命周期:
jsp页面生命周期:
- 用户发出请求index.jsp
- 是否是第一次请求
- 如果是第一次请求,jsp引擎把该jsp文件转换成为一个servlet,生成字节码文件,并执行jspInit()
- 生成字节码文件(如果不是第一次请求,直接访问该字节码文件)
- 解析执行,jspService()
Jsp内置对象
jsp内置对象是web容器创建的一组对象,不使用new关键字就可以使用的内置对象
例子
<%
int[] value = {60,70,80};
for(int i:value){
out.println(i);
}
%>
out对象
jspWriter类的实例,向客户端输出内容
常用方法
println() 向客户端打印字符串
flush() 将缓存区内容输出到客户端
clear() 清除缓冲区的内容,在flush调用会抛出异常
clearBuffer() …不会抛出异常
getBufferSize() 返回缓冲区大小(字节数)
getRemaining() 缓存区剩余
isAutoFlush() 缓存区满,自动清空或者抛出异常
close() 关闭输出流
表单提交方式
get
以明文的方式通过URL提交数据,数据在URL中可以看到,提交的数据最多不超过2KB,安全性较低效率较高.适合提交数据量不大,安全性不高的数据.比如:搜索,查询功能
post
将用户提交的信息封装在HTML HEADER内.适合提交数据量大,安全性高的用户信息.比如:注册,修改,上传等功能
<form name="regForm.jsp" action="动作" method="get/post">
</form>
request对象
客户端请求信息封装在request对象中,通过它了解客户的需求,做出响应.
它是HttpServletRequest的实例
具有请求域,完成请求之前一直有效
request对象的方法:
getParameter(string name) 返回指定参数的参数值
getParameterValues(string name) 返回包含参数name的所有值数组,比如checkbox复选表单
//解决中文乱码问题,无法解决URL传递参数的中文乱码问题
<%
request.setCharacterEncoding("UTF-8");
%>
//URL传递参数中文乱码,conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
setAttribute(string,obj)
getAttribute(string)
getContentType() 请求体的MIME类型
getProtocol() 返回请求的协议类型及版本号
getServerName() 返回接受请求的服务器主机名
getServerPort() 服务器端口号
getCharacterEncoding() 字符编码方式
setCharacterEncoding() 设定请求字符编码方式
getContentLength() 请求体长度
getRemoteAddr() 返回发送此请求体的客户端IP地址
getRealPath() 返回虚拟路径的真实地址
getContextPath() 上下文路径
reponse对象
reponse对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它
HttpServletResponse类的实例
具有页面作用域
reponse对象常用方法
PrintWriter getWriter() 向客户端输出字符的一个对象
sendRedirect(java.lang.String location) 重新定向客户端的请求
PrintWriter outer = reponse.getWriter(); //提前于内置out对象
outer.println("---string---");
请求转发与请求重定向
请求重定向:
客户端行为,本质上等于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变
请求转发:
服务器行为,是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变
request.getRequestDispatcher().forward(req,resp);
面试经常问到的问题,方向javaEE
session
客户端和服务器的一次会话
在服务器内存中保存着不同用户的session
jsp内置对象
在第一个JSP页面被装载时自动创建,完成会话期管理
当一个客户访问一个服务器时,可能在服务器的不同页面之间切换,需要session对象管理
session对象是httpsession类的实例
long getCreationTime()
getId()
setAttribute(string name,Obj value) 属性保存,类似于key-value
getAttribute(string name)
String[] getValueNames() 所有可用属性的数组
getMaxInactiveInterval() 两次请求间隔多长时间session被取消,存活时间
setMaxInactiveInterval()
程序demo:
<%
SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss");//需要倒入java.text.*
Date d = new Date(session.getCreateTime());
%>
Session创建时间: <%=sdf.format(d)%>
session的生命周期
创建
当客户端第一次访问某个jsp或者Servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求,都会将此id携带过去,服务器进行校验
活动
- 通过超链接打开的是同一会话
- 当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时,属于同一次会话
销毁
- 调用了session.invalidate()方法
- session过期
服务器重新启动
//设置session存活时间,web.xml
10
application对象
实现了用户间数据的共享,可存放全局变量
开始于服务器的启动,终止于服务器的关闭
在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
是ServletContext类的实例
常用方法
setAttribute(string name,obj value) 属性 K-V
getAttribute(string name)
getAttributeNames() 返回所有可用属性名的枚举
getServletInfo() 返回JSP(servlet)引擎名及版本号
page对象
指向当前JSP页面本身,类似类中的this指针.
java.lang.Object类的实例
getClass()
hashCode()
equals(Object obj)
copy(Object obj)
clone()
toString()
notify() 唤醒一个等待的线程
notifyAll() 唤醒所有等待的线程
wait(int taimeout) 线程等待,直到timeout结束或者唤醒
wati()
pageContext对象
提供了对JSP页面内所有对象及名字空间的访问
可以访问到本页所在的sessio,也可以取本页面所在的application的某一属性值
页面中所有功能的集大成者
类名叫pageContext
常用方法
getOut() 当前客户端响应被使用的JspWriter流(out)
getSession()
getPage()
getRequest()
getResponse()
setAttribute()
getAttribute(String name,int scope) 在指定范围内取属性的值
getAttributeScope() 返回某属性的作用范围
forward(String relativeUrlPath) 重导到另一页面(相对路径)
include(String relativeUrlPath) 在当前页面包含另一页面
config对象
在一个servlet初始化时,jsp引擎向它传递信息用的.此信息包含Servlet初始化时所要用到的参数以及服务器相关信息.
常用方法
ServletContext getServletContext() 服务器相关信息
String getInitParameter(Sting name) 返回初始化参数的值
Enumeration getInitParameterNames() 返回Servlet初始化所需要参数的枚举
exception对象
是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象.如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译.是java.lang.Throwable的对象.
常用方法
getMessage() 描述异常的信息
toString() 关于异常的简短描述消息
printSrackTrace() 显示异常及其栈轨迹
FillInStackTrace() 重写异常的执行栈轨迹
程序demo
<%@page
属性1 = "属性值" 属性2 = "属性值"...errorPage="yourfile.jsp"
%>
//yourfile.jsp
TODO...
javabean
设计原则
1. 公有类
2. 无参的共有构造方法
3. 属性私有
4. getter和setter方法
创建getter和setter的快捷方法—MyEclipse
source-generator getters and setters 选项
使用普通方式创建javabean的实例
<%@ page import="包.类名" %>
new方法->get/set方式
使用jsp动作标签创建实例
<jsp:useBean id="标识符(实例化的对象名)" class="java类名" scope="作用范围" />
jsp:setProperty 给已经实例化的javabean对象的属性赋值
<jsp:setProperty name="id" property="*"/> 跟表单关联
<jsp:setProperty name="id" property="属性名"/>
<jsp:setProperty name="id" property="属性名" value="数值"/> 手工设置
<jsp:setProperty name="id" property="propertyName" param="request对象中的参数名"/> 跟request参数关联
jsp:getProperty
获取javabean对象的属性
作用域范围
page 当前页面有效
request 可以通过HttpRequest.getAttribute()方法取得Javabean对象
session HttpSession.getAttribute()
application application.getAttribute(),全局范围
各个变量的生存周期
Model1
状态管理
http协议的无状态性
保存用户状态的两大机制
1. Session
2. Cookie
Cookie
是web服务器保存在客户端的一系列文本信息
典型应用
1. 判定注册用户是否已经登陆网站
2. 购物车的处理
3. 系统自动记录已经浏览过的视频
4. 登陆是否记住登陆状态
JSP创建与使用Cookie
Cookie newCookie = new Cookie(String key,Object value);
response.addCookie(newCookie); //写入cookie对象
Cookie[] cookies = request.getCookies(); //读取Cookie对象
常用方法
setMaxAge(int expiry) 设置有效期,以秒为单位
setValue(String value) cookie赋值
getName() 获取cookie的名称
getValue() 获取cookie的值
getMaxAge() 获取cookie的有效时间
cookie 登陆示例
使用URLEncode解决无法在Cookie中保存中文字符串问题
URLDecoder函数
Session与Cookie对比
Session
1. 在服务器保存用户信息
2. 保存的是Object类型
3. 随会话的结束而将其存储的数据销毁
4. 保存重要的信息
cookie
1. 在客户端保存用户信息
2. cookie保存的是String类型
3. 可以长期保存在客户端
4. 保存不重要的用户信息
jsp动作元素
动作标签
指令与动作
指令
<%@ include file="URL" %>
- 发生作用的时间:页面转换期间
- 包含内容:文件的实际内容
- 转换成Servlet,主页面和包含页面转换为一个Servlet
- 编译时间 较慢,资源必须被解析
- 执行时间 较快
动作
<jsp:include page="" />
- 发生动作时间:请求期间
- 包含内容:页面的输出
- 主页面和包含页面分别转换成独立的Servlet
- 编译时间 较快
- 执行时间 较慢,每次资源必须被解析
<jsp:forward page="" />
等同于request.getRequestDispatcher("/url").forward(request,response);
<jsp:param name="" value="" />
通常与forward动作一起使用,作为其子标签;传递参数,可以覆盖掉表单提交
myEclipse使用技巧
alt+/ 自动提示
按钮 deploy Myeclipse j2ee project to server 发布项目
tomcat用户名和密码配置
conf/tomcat-users.xml
tomcat处理静态Html的能力不如apache
集成方式:apache处理html;tomcat处理jsp和servlet
tomcat在线管理