jsp
2018-07-10 18:48 yelena 阅读(203) 评论(0) 编辑 收藏 举报jsp技术(本质是一个servlet)
jsp脚本和注释
jsp脚本:1、<%java代码%>:翻译到service方法内部
2、<%=java变量和表达式%>:翻译到service方法内部out.print()
3、<%!java代码%>:翻译成service的成员内容
<% int i=0; System.out.println(i); %> <%=i %> <%! String str ="nihao China"; %> <%=str %>
jsp注释:1、html注释:<!--注释内容--> ,可见范围 jsp源码、翻译后的servlet、页面 显示html源码
2、java注释://单行注释 /*多行注释*/ ,可见范围 jsp源码 翻译后的servlet
3、jsp注释:<%--注释内容--%> ----- 可见范围 jsp源码可见
注释一般是给开发人员自己看的,所以选用可见范围最少的注释方法,用jsp注释
jsp运行原理:jsp本质就是一个servlet
运行过程:jsp在第一次被访问时会被Web容器翻译成servlet,第一次访问---->helloServlet.jsp---->helloServlet_jsp.java---->编译运行
被翻译后的servlet在Tomcat的work目录中可以找到
jsp指令:page指令(一般系统自己写好),errorPage和isErrorPage指令,错误调转
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="/error.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
include指令:静态包含(直接把网页内容复制到本页)
<%@ include file="/header.jsp" %>
taglib指令:标签库指令
jsp9大内置对象
out request response config page pagecontext application session exception
out:输出流类型,有out缓冲区(默认8kb),里面的东西再存到response缓冲区
aaaaaaaaaaaa <div>nihao</div> out.write("bbbbbbb"); <%out.write("bbbbbbb"); response.getWriter().write("cccccc"); %> <%="dddddddd" %>
输出顺序为 c a b d
pageContext:jsp页面的上下文对象,一个域对象,可以向指定的其他域中存取数据
<% request.setAttribute("name", "zhangsan"); pageContext.setAttribute("name", "lisi",pageContext.REQUEST_SCOPE); pageContext.setAttribute("name", "wangwu",pageContext.SESSION_SCOPE); pageContext.setAttribute("name", "wangrongchen",pageContext.APPLICATION_SCOPE); %> <%=request.getAttribute("name") %> <%=pageContext.getAttribute("name",pageContext.SESSION_SCOPE) %> <!-- findAttribute()如果域中有同名的key,会从小到大搜索域中的值 --> <%=pageContext.findAttribute("name") %>
四大域的作用范围:
pageContext:当前jsp页面
request域:一次请求
session域:一次会话
application域:整个web应用
jsp标签:
动态包含(本质是跳转)
<jsp:include page="/header.jsp"></jsp:include>
请求转发
<jsp:forward page="/demo05.jsp"></jsp:forward>
EL技术:写在jsp页面内部,减少jsp脚本的编写
作用:从四大域中取出数据
<% pageContext.setAttribute("name", "张锐"); request.setAttribute("name", "王荣成"); session.setAttribute("name", "董斌"); application.setAttribute("name", "韩凯"); %> ${pageScope.name } ${requestScope.name } ${sessionScope.name } ${applicationScope.name } ${name }
<% request.setAttribute("name", "王荣臣"); Student stu = new Student(); stu.setId(1); stu.setName("王荣臣"); stu.setFace(true); session.setAttribute("Student1", stu); Student stu2 = new Student(); stu2.setId(2); stu2.setName("韩凯"); stu2.setFace(true); Student stu3 = new Student(); stu3.setId(3); stu3.setName("董斌"); stu3.setFace(false); ArrayList<Student> studentlist = new ArrayList<Student>(); studentlist.add(stu2); studentlist.add(stu3); application.setAttribute("StudentList", studentlist); %> ${name } ${Student1.name } ${StudentList[1].name }
EL11大内置对象(了解)
<%request.setCharacterEncoding("utf-8"); %>
${param.username }......${param.pwd }
${header['User-Agent'] }
<% Cookie cookie = new Cookie("name","aaa"); response.addCookie(cookie); %> ${cookie.name.value }
<% Student s1 = new Student(); s1.setName("小猪佩奇"); session.setAttribute("s1", s1); %> ${1+2 } <!-- empty判断的是域中是否有该对象,如果有,返回false,如果没有,返回true --> ${!empty s1 } ${s1==null?true:false }
JSTL技术:jsp标准标签库,业务逻辑功能(if和for),一般使用核心库就可以
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- test后面必须接true或false --> <c:if test="${1==1 }"> xxxxxxxx </c:if> <!-- 普通for循环 --> <c:forEach begin ="0" end="5" var="i"> ${i } </c:forEach> <!-- 增强for --> <c:forEach items="${StudentList }" var="stu"> ${stu.name }......${stu.face } </c:forEach> <% Student stu2 = new Student(); stu2.setId(2); stu2.setName("韩凯"); stu2.setFace(true); HashMap<String,Student> map= new HashMap<String,Student>(); map.put("name", stu2); map.put("age", stu2); session.setAttribute("xiaonaigou", map); Map<Student,Map<String,Student>> m = new HashMap<Student,Map<String,Student>>(); m.put(stu2,map); session.setAttribute("m", m); %> <!-- 增强for遍历map集合 --> <c:forEach items="${xiaonaigou }" var="entry"> ${entry.key } ${entry.value } </c:forEach> <!-- 增强for遍历map中套用的map的集合 --> <c:forEach items="${m }" var="entry"> ${entry.key} <c:forEach items="${entry.value }" var="entry1"> ${entry1.key } ${entry1.value } </c:forEach> </c:forEach>
开发模式:开发过程中总结出的“套路”,约定俗成的设计模式
web开发的设计模式:mvc
model:模型 javabean实体类 封装数据
view:视图 jsp 页面显示
controller:控制器 servlet 获取数据---对数据进行封装---传递数据--- 指派显示的jsp页面
javaEE的三层架构:服务器开发
web层:与客户端交互
service层:业务处理
dao层:与数据库进行交互