一. 基本搭建
1.新建动态WEB项目(Dynamic Web Project)
2.WebContent目录下新建文件夹01 创建一个JSP文件 hello.jps
3.添加JSP程序段,可以添加java代码
jsp表达式:<%="hello world"%>
<%
String str="hello world";
%>
<%
out.println(str);
%>
这里jsp报错javax.servlet
解决办法:改路径 Build Path 添加jar libery 加入tomcat7 在order and export 中勾选tomcat7保存,错误解决
修改jsp模板默认编码集 这里进windows--preference 点击web--jspfile--将默认的编码改成UTF-8
jsp中声明代码 ,可以单独放一个jsp程序段中 可以在jsp页面的其他地方使用这些声明的定义
jsp表达式:<%="hello world"%> 这里可以直接在页面输出hello world
二.项目导出和部署
1.工程项目名后右键 点export 选择war 导出war文件到指定文件夹
2.将压缩好的war文件部署到tomcat上 将文件复制到tomcat目录下的webapps文件夹下
3.这里将tomcat整个文件夹从WINDOWS发送到虚拟机的centos上测试,前提是centos上已经安装配置好了java 然后在linux下进入tomcat的bin目录下,执行./startup.sh 终端返回结果tomcat started 表示部署成功
可以测试下,这里在linux环境下打开浏览器输入localhost:8888/JSPStudy/01/hello.jsp 返回正确的页面表示部署成功,如果是设置其他机器访问该机,发现无法访问,则要修改防火墙的配置,防火墙设置中将8888端口添加并应用,这时即可访问
如果需要关闭tomcat 则在bin路径下输入./shutdown.sh 此时关闭了该tomcat
三.jsp注释
html注释
<!-- -->
这样的注释特点是完全暴露给客户端用户,用户可以通过查看源代码看到注释的内容,如果在这样的html注释中加入了敏感信息,具有危险性 所以这里推荐使用jsp的注释功能,在客户端查看源代码是看不到的
jsp注释
<%-- this is JSP comments--%>
在jsp的程序段中 java的单行注释和多行注释都是可以正常使用的,如下
<% // String str="abc" %> 单行注释
<% /* String str="abc" */ %> 多行注释
四.JSP配置编译指令
1.page指令
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.ArrayList,java.util.LinkedList"
%>
language默认是java 也可以不指定
contentTpye属性 设置生成网页的编码
charset属性 编码这里默认的是ISO8859-1 一般改成UTF-8
pageEncoding属性 用于设置jsp本身的编码
import 属性 导入java类,如果没有导入,在jsp程序段中必须输入完全限定名,要加上包名
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.LinkedList" %>
errorPage属性 用来指定处理错误页面的路径
isErrorPage属性 设置当前页面是否为错误页面 设置为true
设置成功后,如果某一个页面发生了异常,则会跳转到该错误页面
如果不设置,则会直接将报错信息输出在页面
2.JSP include编译指令
建一个include.jsp 再建两个footer.jsp 和header.txt文件 或者是header.html 添加如下指令,则可以将其他几个页面或者文件的内容包含到include.jsp页面中输出
<%@ include file="header.txt" %>
<%@ include file="footer.jsp" %>
这里需要注意的是,如果包含的jsp中声明的变量不能和include文件中的变量重名,不然会报错
3.JSP 动作指令
只在jsp转化成servlet的过程中起作用
3.1 forword指令
分为带参数和不带参数
重定向
3.2 include动作指令
index.jsp中加入如下代码
body.jsp代码
">
这里将index.jsp页面的颜色改成了红色,通过request.getParameter调用jsp:param中的参数
3.3 usebean指令
首先创建一个javabean实体类 这里创建了一个UserEntity.java
创建register.jsp body中的代码如下
用户名:
密码:
提交" />
创建do_register.jsp
然后通过下面代码,可以调用javabean来实现
这里等价于
<%
String userName=request.getParameter("userName");
String password=request.getParameter("password");
out.println(userName);
out.println("
");
out.println(password);
%>
输出结果是一致的
五.JSP内置对象
out对象 向浏览器输出各种数据
request对象 封装了来自浏览器客户端的各种信息 客户端向服务器发出的请求信息
response对象 封装了来自服务器的响应信息
exception对象 封装了JSP程序执行过程中的错误异常信息
config对象 封装了应用程序的配置信息
page对象 指向了当前jsp程序本身
session对象 用来保存会话信息 在同一用户的不同请求下共享数据
application对象 当前应用程序的上下文,可以在不同的用户下共享信息
pageContext对象 对所有jsp页面和命名空间的访问
5.1 out对象
out.println("abc");//换行输出
out.newLine();//换行
out.print("ccc");//不换行
out对象除了一般的输出,还负责对输出缓冲区进行管理
out.println("获取当前缓冲区大小:"+out.getBufferSize());
out.println("
");
out.println("获取当前缓冲区剩余字节数目:"+out.getRemaining());
out.println("
");
输出是8192 即默认为8kb
这里可以修改默认缓冲区大小
在jsp中加入
<%@ page buffer="10kb" %> 这里将缓冲区大小改为了10kb
out.flash(); 强制刷新缓冲区里的数据
out.clearBuffer(); 清空缓冲区中的数据 在此代码前的所有输出的数据都会被清空不会输出出来
out.clean();清空缓冲区
这里区别在 如果clean() 前用过flash方法,则会抛异常,而使用cleanBuffer方法不会出现这个异常
5.2 request对象
提交" />
请求方法名:<%= request.getMethod() %>
请求的资源:<%= request.getRequestURI() %>
请求使用的协议:<%= request.getProtocol() %>
请求的服务器IP:<%=request.getServerName() %>
请求的服务器端口:<%=request.getServerPort() %>
客户端的IP地址:<%=request.getRemoteAddr() %>
客户端的主机名:<%=request.getRemoteHost() %>
表单提交来的值:<%=request.getParameter("userName") %>
页面显示所有的相关信息
处理数组形式的表单信息
新建register.jsp
用户名:
技能:
java
python
php
linux
ruby
提交" />
重置" />
新建do_register.jsp
<%
String userName=request.getParameter("userName");
String skills="";
String[] skillArr=request.getParameterValues("skills");
if(skillArr !=null && skillArr.length>0){
for(String skill:skillArr){
skills=skills+skill+" ";
}
}
request.setAttribute("userName", userName);
request.setAttribute("skills", skills);
%>
新建welcome.jsp
信息展示界面
用户名:<%=request.getAttribute("userName") %>
技能:<%=request.getAttribute("skills") %>
这里在 do_register.jsp中通过 request.setAttribute方法 将遍历出的数组信息和用户名信息绑定
在welcome.jsp中通过request.getAttribute方法取得对应的数组信息展示
5.3 response对象
Cache-Control 用于设置网页缓存的策略 no-cache 数据内容不会被存储
<%
response.setHeader("Cache-Control", "no-cache");
response.setIntHeader("Refresh", 2);//网页每隔两秒钟刷新一次
out.println("date is "+ new java.util.Date().toString()+"
");
%>
<%
response.sendRedirect("http://www.baidu.com");// 直接跳转到指定的网页
%>
<%
Cookie myCookie=new Cookie("admin","test123456");
myCookie.setMaxAge(3600);//设置cookie最大存活时间为3600s
response.addCookie(myCookie);
%>
5.4 session对象
tomcat conf文件夹下的 tomcat-users.xml中配置管理员用户
将工程打war包放入tomcat,并启动tomcat
在tomcat-users 标签内 添加
进入localhost:8080 页面 进入manager
输入设置好的账号密码登陆
这里可以测试观察session的情况
访问任意一个JSPStudy工程下的页面 刷新管理页面,session由0变成了1 点击进去可以查看session信息
session的唯一标识符:<%= session.getId() %>
session的创建时间:<%= new java.util.Date(session.getCreationTime()).toString() %>
session的最后访问时间:<%= new java.util.Date(session.getLastAccessedTime()).toString() %>
session的失效时间 :<%= session.getMaxInactiveInterval() %>
WEB-INF下如果没有web.xml文件,工程右键 选择javaee工具,选择部署服务描述文件 即可
打开web.xml
加入
对session的生效时间进行设置,这里设置为10分钟
然后清理tomcat重启进入页面,可以发现生效时间由默认的1800改为600即10分钟
通过一个登陆示例来综合运用session
login.jsp 一个简单的登陆表单
userName:
password:
提交" />
重置" />
do_login.jsp 对提交的表单进行处理
<%
String userName=request.getParameter("userName");
String password=request.getParameter("password");
if(userName !=null && password !=null){
session.setAttribute("userName", userName);
response.setHeader("refresh", "2;URL=welcome.jsp");
}
%>
welcome.jsp 欢迎界面
<%
if(session.getAttribute("userName")!=null){%>
欢迎:<%=session.getAttribute("userName") %>
<%}else{%>
请先登录
<% }
%>
<%if(session.isNew()){ %>
欢迎新用户!
<% }else{ %>
欢迎老用户!
<% } %>
logout.jsp 退出界面
<%
session.invalidate();//直接清楚session对象
response.setHeader("refresh", "2;URL=welcome.jsp");
%>
5.5 application对象
application对象代表了当前的应用程序,存在于服务器的内存空间中,应用一旦启动就会生成一个application对象,直到应用被关闭application才会被销毁,相对于session对象
application的生命周期更长
<%=application.getServerInfo() %> 返回当前的服务器信息
创建一个计数器示例
<%
Object obj=application.getAttribute("counter");
if(obj == null){
application.setAttribute("counter", new Integer(1));
out.println("该页面被访问了1次
");
}else{
int counterValue=Integer.parseInt(obj.toString());
counterValue++;
out.println("该页面被访问了" + counterValue+"次
");
application.setAttribute("counter", counterValue);
}
%>
5.6 config对象(很少使用)
在web.xml中插入如下
新建config.jsp
body中加入如下
用户名:<%= config.getInitParameter("username") %>
密码: <%=config.getInitParameter("password") %>
登录页面显示配置文件中的相应用户名密码
5.7 page对象
指向了当前jsp页面本身 它是java.lang.object的一个实例
都是继承自object对象
<%
out.println("page对象的字符串:" +page.toString());
page.getClass(); //返回当前的object类
page.hashCode(); //返回当前的page对象的hashcode值
//page.equals(obj); //比较与指定的对象是否相等
%>
5.8 exception对象
建立throw_error.jsp 加入错误页面跳转
<%@ page errorPage="handle_errors.jsp" %>
body中插入一个异常
<%
int a=1/0;
%>
新建handle_errors.jsp
page指令中添加
isErrorPage="true"
body中插入
异常描述信息:
<%
out.println(exception.getMessage());
%>
excepiton对象的字符串描述:
<%
out.println(exception.toString());
%>
<%
exception.printStackTrace();
%>
访问throw_error.jsp则跳转到handle_error.jsp页面并打印出错误信息
5.9 pageContext对象
可以访问其他所有的jsp内置对象
<%
// JspWriter myOut=pageContext.getOut();
// myOut.println("hello world");
pageContext.setAttribute("admin", "123456",pageContext.SESSION_SCOPE); //将一组键值对保存到session对象中
String value=session.getAttribute("admin").toString();
out.println(value);
out.println("
");