jsp
1.java web
web服务器有
tomcat(apache)
weblogic (oracle)
jboss (redcat)
webphere IBM
....
2.tomcat 目录结构
bin :存放二进制文件,启动,关闭tomcat
conf:存放配置文件
--server.xml 修改端口 (端口默认是8080)
lib:存放依赖的jar包
logs :存放日志文件
work : 存放运行时生成的文件
webapps :web项目的存放目录
temp : 存放tomcat临时文件
3.静态网站和动态网站
静态网站: 数据都是写死在源代码中的,无法实现内容的实时更新
动态网站:数据是从数据库得到的,涉及到后台
4.B/S C/S
jsp Java Server Pages
在HTML中嵌入Java脚本代码(HTML+java)
jsp的组成部分
jsp的执行过程
5.内置对象
不需要手动创建,可以直接使用的对象,是web容器创建好的。
1.request 客户端的请求
返回类型 | 方法 | 描述 |
---|---|---|
String |
getParameter(name) |
根据name属性获取value |
String[] |
getParameterValues(name) |
根据name获取value,用于获取复选框的值 |
Map<String,String[]> |
getParameterMap() |
获取所有的name和value,得到的是键值对 |
void |
setCharacterEncoding("utf-8") |
设置编码 |
String |
getRemoteAddr() |
获取请求端的ip |
2.response 用于响应客户端的请求
重定向:地址栏会改变,不能通过request传数据
response.sendRedirect("index.jsp")
转发:地址栏地址不会改变,可以通过request传数据
request.getRequestDispatcher("index.jsp").forward(request,response);
3.out 输出流对象
out对象是JspWrite类的实例,是向浏览器输出内容常用的对象。
4.config javax.servlet.ServletConfig
获取服务器配置(web.xml)信息
config.getInitParameter("") 获取web.xml中的初始参数
5.session javax.servlet.http.HttpSession 会话 从用户访问服务器开始到用户关闭浏览器离开服务器结束。
session数据是保存在服务端,一般用来保存用户的身份信息。
整个会话期间,保存在session中的数据是多个页面共享。
四大域对象(page域,request域,session域,application域)之一。
session.setAttribute(name,value)
向session中设置值
session.getAttribute(name)
从session中获取值
session.getId();//获取sessionid
session.invalidate();//清除session中的数据
当用户第一次访问服务器时,会创建一个session,保存在服务器上,服务器会创建一个cookie,将cookie 返回到浏览器上(cookie里有一个jsessionid),
jsessionid作用:标识用户身份
应用场景:用户登录成功后,将用户的身份信息保存到session中,在访问登陆后才能访问的页面时,都会先判断session中是否有用户的登录信息。
cookie 保存在浏览器端
//创建cookie
Cookie cookie = new Cookie(name,value)
//设置有效时间
cookie.setMaxAge(2);//单位是s
//获取cookie的name
cookie.getName();
//获取cookie的值
cookie.getValue();
//向浏览器添加cookie
response.addCookie(cookie);
//获取保存在浏览器上的cookie
Cookie cookies[] = request.getCookies();
-----------------------------------------------
//cookie不能直接保存中文
new Cookie("age", URLEncoder.encode("水电费","utf-8"));//编码
URLDecoder.decode(cookie.getValue(),"utf-8");//解码
参考宝典:session和cookie的区别?
6.application javax.servlet.ServletContext 服务器应用,所有用户共享数据
应用场景:统计网站的浏览量
Object object = application.getAttribute("count");
int count = 0;
if(object != null){
count = (Integer)object;
count++;
}
out.print(count);
application.setAttribute("count",count);
7.exception java.lang.Throwable 异常
要使用exception 对象,必须先加指令
<%@page isErrorPage="true" %>
作用:获取异常信息
8.page 代表页面本身,相当于this
9.pageContext javax.servlet.jsp.PageContext 页面上下文,能通过此对象获取其他八大内置对象。
6.四大域
PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。(page域)
ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。
HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。
1)域对象作用:
保存数据 和 获取数据 ,用于数据共享
2)域对象方法:
setAttribute("name",Object)
保存数据
getAttribute("name")
获取数据
removeAttribute("name")
清除数据
3)域对象作用范围:
page域: 只能在当前jsp页面中使用(当前页面)
request域: 只能在同一个请求中使用(转发)
session域: 只能在同一个会话(session对象)中使用(私有的)
application域: 只能在同一个web应用中使用。(全局的)
7.EL表达式
Expression language
是jsp2.0引入的一种计算和输出的java 对象的简单语言。
作用:简化jsp中java 代码
使用: ${}
a:获取四个域中的数据
取数据时默认是从小到大取(现从page域--》application域)
比如:
${num} 先从page域中找name为num的数据,没有找到就去request域中找.....
如果指定域: (jsp文件)
${sessionScope.num}//从session域中找,如果session中没有,那就找不到
${pageScope.num}
${requestScope.num}
${applicationScope.num}
<%
//向域中设置数据
pageContext.setAttribute("num",15);
//------寂寞的分割线--------
Emp emp = new Emp();
emp.setEname("张三");
pageContext.setAttribute("emp",emp);
//------寂寞的分割线--------
String[] s = {"abc","efg"};
pageContext.setAttribute("strs",s);
//------寂寞的分割线--------
List<String> list = new ArrayList<>();
list.add("eee");
list.add("fff");
pageContext.setAttribute("list",list);
//------寂寞的分割线--------
Map<String,String> map = new HashMap<>();
map.put("key1","ppp");
map.put("key2","yyy");
map.put("key3","kkk");
pageContext.setAttribute("m",map);
%>
<h1>获取简单数据类型的值:${sessionScope.num}</h1>
<h1>获取对象的属性:${emp.ename}</h1>
<h1>获取数组中的值:${strs[0]}</h1>
<h1>获取list中的值:${list[0]}</h1>
<h1>获取map中的值:${m.key1}</h1>
b.运算
术语 | 定义 |
---|---|
算术型 | +、-(二元)、*、/、div、%、mod、-(一元) |
逻辑型 | and、&&、or、|| |
关系型 | ==、eq、!=、ne、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。 |
空 | empty。空操作符是前缀操作,可用于确定值是否为空。(null和“”都返回true) |
条件型 | A ?B :C。A为true,结果为B,否则为C。 |
8.jstl
1.jsp标准标签库(jsp standard tag Library) 简称 jstl
2.作用:实现逻辑处理,判断,循环,格式化,字符串各种操作等等....
3.使用:
a) 导jar包
jstl-xx.jar
b)添加指令
(jsp文件)
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
c)使用
<c:if test="${5<4}">
<h1>hello</h1>
</c:if>
<c:choose>
<c:when test="${5<4}">
<h1>11111</h1>
</c:when>
<c:otherwise>
<h1>22222</h1>
</c:otherwise>
</c:choose>
<%
List<String> list = new ArrayList<>();
list.add("wwww");
list.add("sss");
list.add("wssgdfgwww");
list.add("ppp");
pageContext.setAttribute("li",list);
%>
<c:forEach var="my" items="${li}">
<h1 style="color: red;">${my}</h1>
</c:forEach>
9.核心标签库
<c:if test="${5<4}">
<h1>hello</h1>
</c:if>
<c:choose>
<c:when test="${5<4}">
<h1>11111</h1>
</c:when>
<c:otherwise>
<h1>22222</h1>
</c:otherwise>
</c:choose>
<%
List<String> list = new ArrayList<>();
list.add("wwww");
list.add("sss");
list.add("wssgdfgwww");
list.add("ppp");
pageContext.setAttribute("li",list);
%>
<c:forEach var="my" items="${li}">
<h1 style="color: red;">${my}</h1>
</c:forEach>
<c:forEach var="my" items="${li}" begin="0"
end="2" varStatus="mm">
<h1 style="color: red;">${my} ----${mm.index} </h1>
</c:forEach>
<%--向页面输出--%>
<c:out value="123"></c:out>
<%--向域中设置key - value 可以指定域--%>
<c:set value="zhangsan" var="user" scope="page"></c:set>
${user}
10.国际化标签库(格式化标签库)
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
11.函数标签库
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
//加了函数标签库就可以使用方法
${fn:trim(" s ")}//去除两端的空格
...
12.jsp指令
1.page 设置页面属性
2.taglib 引入标签库
3.include 导入(包含)页面
·@include
· <<jsp:include>>