一、介绍
1. 定义:用于开发动态web资源地1 技术,jsp实际上就是servlet
jsp = html + jsp
2.
html: 静态内容
servlet: 适合编写java逻辑代码,不是和写界面显示部分
jsp:适合编写输出动态内容,但是不适合编写java逻辑
3. 原理:将jsp页面先翻译成.java 代码,然后在将.java 代码编译成.class
三、基础语法
1.html标签
2.
a)<% %> 小脚本,里面填写Java代码
b)<%= %> 表达式,相当于out.print();
c)<%! %> :表示将里面的代码,翻译到类的里面,也就是可以将变量变成全局变量,还可以声明方法和静态块
3.jsp的注释:
jsp注释:<%--注释的内容--%> :安全
网页注释::不安全
四、jsp的三个指令
1. <%@ page import ="所要导入的包名"%>
注:
1)
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
2 )session默认值是true ,不需要我们去开启
errorPage:表示如果页面有错误,就跳转到指定资源
isErrorPage:是否创建throwable对象,默认是false
contextType:等同于response.setContextType("text/html;charset=utf-8" );
2. Inclue
1 ).静态包含:把其他资源包含到前页面中
<%@ include file ="/其他页面的名称.jsp"%>
2)动态包含:
<jsp:include page="/其他页面的名称.jsp"></jsp:include >
3)区别:
1.翻译的时间段不同
静态:翻译时就把两个文件合并
动态:不会合并文件,当代码执行到include 时,才包含1另一个文件的内容
注:使用原则就是能用静态的就不用动态的
3.taglib
1)作用:在jsp页面中导入jstl标签库。替换jsp中的java代码片段。
这里我们需要导入jar包
a)jstl.jar standard.jar
b)https://mvnrepository.com/
格式:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
五、jsp的六个动作
<jsp:include > 动态包含
<jsp:forward > 请求转发
<jsp:param > 设置请求参数
<jsp:useBean > 创建一个对象
<jsp:setProperty > 给指定的对象属性赋值
<jsp:getProperty > 取出指定对象的属性值
1.jsp动作标签---转发
携带参数相当于,在网址后面进行拼接:
/2.jsp?username=ws&passowrd=123
注:转发的同时还可以携带请求的参数,不要在<jsp:forward动作中间加注释(会编译出错)
2.代码:
<%@ page language ="java" contentType ="text/html; charset=UTF-8"
pageEncoding ="UTF-8" % >
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html >
<head >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<title > Insert title here</title >
</head >
<body >
<%
pageContext.setAttribute("page" , "pageContex" );
%>
<jsp:forward page ="/2.jsp" >
<jsp:param value ="ws" name ="username" />
<jsp:param value ="123" name ="password" />
</jsp:forward >
</body >
</html >
2.jsp中的代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%=
/*该域对象,只在本页面有效,出了页面获取不到 */
pageContext.getAttribute("page" )
%>
<%=request .getParameter("username" ) %>
<%=request .getParameter("password" ) %>
六、九个内置对象
1. request
2. response
3. session
4. application
5. exception
6. page
7. config
8. out
9. pageContext
1.查看pageContext中的方法
public void fun(PageContext pageContext) {
//强大的pageContext可以获取任何域对象
//从小到大
pageContext.getRequest();
pageContext.getSession();
pageContext.getServletContext();
//强大的方法(el表达式,就依赖这个方法)
//这个方法可以搜索所有域对象,用key去取值
//按域的大小,从小到大,进行搜索,找到为止,找到就输出对应的value
//request session context 这个顺序搜索
pageContext.findAttribute("key");
}
2.测试域中的查找顺序
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html >
<head >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<title > Insert title here</title >
</head >
<body >
<%
/*一般系统方法中,需要一个int 参数,一般会是常量 */
/*向pageContext域中添加一对键值对 */
/* 只要有pageContext,就能向各个域中添加值,
参数三,表示对应域的常量 */
pageContext.setAttribute("p" , "pageContext" ,PageContext.PAGE_SCOPE);
pageContext.setAttribute("p" , "request" ,PageContext.REQUEST_SCOPE);
pageContext.setAttribute("p" , "session" ,PageContext.SESSION_SCOPE);
pageContext.setAttribute("p" , "appliction" ,PageContext.APPLICATION_SCOPE);
%>
<%=
/*从小到大找的 */
pageContext.findAttribute("p" )
%>
</body >
</html >
七、el(expression language表达式
1 .定义:表达式语言,要简化jsp中java代码开发,他不是一种开发语言,而是jsp中获取数据的一种规范
2 .功能
el表达式能获取存在4 个作用域中的数据
${u} 相当于 pageContext.findAttribute("u" );
el获取对于null这样的数据,在页面中表现为空字符串
代码:
4.jsp:测试把对象存到域对象中是否能获取
<%@page import="com.lanou3g.Address" %>
<%@page import="com.lanou3g.User" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html >
<head >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<title > Insert title here</title >
</head >
<body >
<%
User user = new User();
user.setUsername("ws" );
user.setPassword("123" );
//添加地址对象
Address address = new Address();
address.setCity("zh" );
user.setAddress(address);
out.print(user.getAddress());
request .setAttribute("u" , user);
%>
${u.username }
${u.address.city}
${u["username"] }
${u['username'] }
<%-- ${u[username] } --%>
</body >
</html >
5.jsp
测试:空字符串和没有元素的集合
<%@page import="java.util.ArrayList" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html >
<head >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<title > Insert title here</title >
</head >
<body >
<%
String str1 = null ;
request .setAttribute("str1" , str1);
String str2 = "" ;
request .setAttribute("str2" , str2);
ArrayList list1 = new ArrayList();
list1.add("aaaa" );
ArrayList list2 = new ArrayList();
request .setAttribute("list1" , list1);
request .setAttribute("list2" , list2);
ArrayList list3 = null ;
request .setAttribute("list3" , list3);
%>
${empty str1 }
${empty str2 }
${empty list1[0] }
${empty list2}
${empty list3}
${empty list3 ? "我是前面的":"我是后面的" }
<br >
</body >
</html >
八、测试隐式对象可以直接在el表达式中使用
<%
pageContext.setAttribute ("p" , "pageContext" ,PageContext.PAGE _SCOPE)
pageContext.setAttribute ("p" , "request" ,PageContext.REQUEST _SCOPE)
pageContext.setAttribute ("p" , "session" ,PageContext.SESSION _SCOPE)
pageContext.setAttribute ("p" , "appliction" ,PageContext.APPLICATION _SCOPE)
%>
${pageScope.p }
${requestScope.p }
${sessionScope.p }
${applicationScope.p }
8.jsp:pageContext代表对象,使用方法
${www }
<form action ="${pageContext.request.contextPath }/9.jsp" method ="post" > <br >
<input type ="text" name ="username" > <br >
<input type ="checkbox" name ="hobby" value ="唱歌" > 唱歌
<input type ="checkbox" name ="hobby" value ="篮球" > 篮球<br >
<input type ="submit" value ="提交" >
</form >
9.jsp
<%
response .setContentType("text/html;charset=utf-8" );
request .setCharacterEncoding("utf-8" );
%>
${param.username }
${paramValues.hobby[0] }
${paramValues.hobby[1] }
${header["User-Agent"] }<br >
${cookie.JSESSIONID.value }
九、JSTL(JavaServerPages Standard Tag Library)表达式
1.jsp标准标签库
2.JSTL的作用
使用JSTL实现JSP页面中逻辑处理。如判断、循环等。
注:使用JSTL需要在JSP页面添加taglib指令 添加核心库
3.通用标签: set、 out、 remove
代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html >
<head >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<title > Insert title here</title >
</head >
<body >
<c:set var ="num" value ="10" scope ="session" > </c:set >
<c:out value ="${num }" default ="aaaa" > </c:out > <br >
${num }
<c:remove var ="num" />
${num }
11.jsp:if choose条件标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html >
<head >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<title > Insert title here</title >
</head >
<body >
<c:set var ="n" value ="10" > </c:set >
<c:if test ="${n<5}" >
aaaaa
</c:if >
<c:if test ="${n>5 }" >
bbbb
</c:if >
<c:choose >
<c:when test ="${n==5 }" > 5</c:when >
<c:when test ="${n==10 }" > 10</c:when >
<c:otherwise > mm</c:otherwise >
</c:choose >
</body >
</html >
12.jsp:循环
<%@page import="java.util.ArrayList" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html >
<head >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<title > Insert title here</title >
</head >
<body >
<%
ArrayList<String > list = new ArrayList();
list.add("aaaa" );
list.add("bbbb" );
list.add("cccc" );
list.add("dddd" );
request .setAttribute("list" , list);
%>
<c:forEach items ="${list }" var ="l" step ="1" >
${l}<br >
</c:forEach >
<%
%>
</body >
</html >
3.13.jsp:值,索引,计数,第一个元素 最后一个元素
<%@page import="java.util.ArrayList" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html >
<head >
<meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
<title > Insert title here</title >
</head >
<body >
<%
ArrayList<String >list = new ArrayList();
list.add("aaaa" );
list.add("bbbb" );
list.add("cccc" );
list.add("dddd" );
request .setAttribute("list" , list);
%>
<table border ="1" >
<tr >
<th > 值</th >
<th > 索引</th >
<th > 计数</th >
<th > 第一个元素</th >
<th > 最后一个元素</th >
</tr >
<c:forEach items ="${list }" var ="l" varStatus ="vs" >
<tr >
<th > ${l }</th >
<th > ${vs.index }</th >
<th > ${vs.count }</th >
<th > ${vs.first }</th >
<th > ${vs.last }</th >
</tr >
</c:forEach >
</table >
</body >
</html >
十、MVC
代码的设计模式(编写代码)
1 .Model1 模式
jsp + javaBean<jsp: useBean/> 模式
2 .Model2 模式(模拟MVC 模式)
jsp(尽量写页面和展示数据) + servlet(逻辑处理) + javaBean(实体类) 模式
M :Model (数据模型)
V :View (视图界面)
C :Controller (控制器)