代码改变世界

jsp

2018-07-10 18:48  yelena  阅读(204)  评论(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层:与数据库进行交互