JSP&Servlet

一、HTTP请求:客户端向服务器提交的一个超文本文件(包含请求的URL路径)
请求方式:
 (一)GET请求:
     (1)格式
  get /资源名?参数名=参数值&参数名=参数值... HTTP/1.1
  请求头
  (空行)
  消息体(空的)
     (2)特点:
  请求的消息体(Key-Value)添加到URL结尾,不适合传输敏感信息。
  请求URL串的总长不能超过1K
     (3)总结:传输的长度有限制,并且不适合传输敏感信息(如密码)
 (二)POST请求:
     (1)格式
  post /资源名 HTTP/1.1
  请求头
  (空行)
  消息体(Key-Value)
      (2)特点:
  请求的内容放到了消息体中,这样不仅比GET请求更安全一些,而且解决了传输大小的限制
      (3)总结:POST请求比GET请求安全一些,而且没有传输限制。
二、HTTP响应:
 (1)响应代码:
  200-----请求得到了正确的响应
  404-----请求的网页不存在
  500-----服务器异常
  503-----服务器不可用(超载或服务器停机维护)
 (2)格式:
  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  Content-Type: text/html
  空行
  具体的内容
三、Java Web 的目录结构
 根目录(上下文根)
      |-- 动态网页:*.jsp
      |-- 静态文件:*.html、*.gif、*.avi.....
      |-- WEB_INF
            |-- class目录:存放经过编译的源文件的字节码
            |-- lib目录:存放本应用程序需要的jar包
            |-- *.tld文件:标签描述文件
            |-- web.xml  本应用程序的配置文件
四、Servlet
 1、定义:运行在服务器端的小程序,专门用来接收客户端发提交的请求,并作出响应
 2、创建一个Servlet
  a)创建一个继承HttpServlet的类
  b)重写该类的doGet()和doPost()方法
  c)在web.xml中完成相应的配置信息
 3、流程:
  a)客户端提交请求URL路径
  b)服务器接收到请求之后,截取请求的资源的路径
  c)服务器到web.xml中区寻找能与该路径匹配的Servlet
  d)如果存在,那么就创建该Servlet的实例,并为该请求启动一个线程
  e)封装两个对象
   HttpServletRequest 和 HttpServletResponse对象
   HttpServletRequest  请求对象,用户提交的请求信息都保存在该对象中
   HttpServletResponse 响应对象,服务器要返回的信息放在该对象中
  f)根据请求方式,调用相应的处理方法doGet()或者doPost(); 或者直接调用service()方法
  g)结束该线程,释放相应资源。
 4、ServletConfig:每个Servlet对象都有自己的ServletConfig对象
  ServletConfig config=this.getServletConfig();//获取ServletConfig对象
  config.getInitParameter(/*参数名*/);//获取初始化参数
 5、ServletContext:每个web应用程序都有自己的ServletContext对象(当Web应用运行之后,会为该Web应用程序创建一个ServletContext对象)
  ServletContext context=this.getServletContext();//获取ServletContext对象
  context.getInitParameter(/*参数名*/);//获取初始花参数
  context.setAttribute(/*参数名*/,/*参数值*/);//添加参数到ServletContext对象中。
  context.getAttribute(/*参数名*/);//获取相应参数的值
  /*类似Session,都内置了一个Map对象*/
五、请求分派(服务器跳转)和重定向(客户端跳转)
 1、区别:
  a)请求分派在服务器端完成,重定向在客户端完成
  b)请求分派会把请求对象和响应对象传递给下一个资源,请求信息不会丢失
  c)重定向是由客户端发起的一次请求,会使请求信息丢失
  /*请求对象和相应对象是存在于为该请求创建的线程中的,当该线程结束之后,对应的请求和响应对象也会销毁*/
  d)对请求分派来说,浏览器地址栏只会显示第一次请求的地址,而重定向会显示最终请求的路径
六、JSP:HTML+java代码
 1、JSP的组成:
  a)静态内容:  HTML  ---展示结果
  b)表达式: <%=/*java表达式*/ %> 在转译是作为 out.println() 的参数
  c) Scriptlet代码段:<% /*java代码*/ %>  用来将java代码嵌入到JSP页面中
   在转译时直接将该段代码放进service()中
  d)声明:<%! /*声明变量或者方法*/ %>
   转译为该Servlet的成员变量和成员方法
  e)注释: <%-- /*注释的内容*/--%>  转译时会被忽略
  f)指令:<%@ /*指令名  属性名="属性值" */%>
   (1)page指令:<%@page language="java"
     import="导入指定包下的类"
     pageEncoding="指定页面内容的字符集编码"
     contentType="内容的类型和编码"
     errorPage="错误处理页面的路径"
     isErrorPage="false | true" %>
   (2) include: <%@include file="要包含的页面的路径" %> 静态包含:在转译过程中就把目标页面内容包含进来了。
   (3) taglib: <%@taglib uri="标签描述符的路径" prefix="前缀" %> 用来导入要使用的自定义标签
  g)动作:
   (1) <jsp:useBean id="别名" class="包名.类名" scope=""></jsp:useBean>
   (2) <jsp:setProperty name="要操作的实例别名" property="属性" value="值" [param=""] />
   (3) <jsp:getProperty name="" property="属性" />
    配合JavaBean来使用的,JavaBean就一个类:公有类,不带参的构造方法,私有属性,公开get和set方法。
    这个类必须要有包。属性名至少要是两个小写字母开头。
    scope(域): page        --> PageContext  页面上下文
      request     --> HttpServletRequest 请求       
      session     --> HttpSession  会话      
      application --> ServletContext  应用上下文
   (4) <jsp:include page="要包含的文件的路径" flush="true | false" /> 动态包含:在真正执行到这行代码时才把目标文件的内容包含进来。
   (5) <jsp:param name="" value="" />  传参数
   (6) <jsp:forward page="目标页面" flush="true" />
    相当于request.getRequestDispatcher("目标").forward(request, response);
  h)内置对象:
   输入输出对象: out、request、response
   通信对象:  pageContext、session、application
   servlet对象: page、config
   异常对象: exception 只有在页面的page指令中指定isErrorPage=true时才可以使用
 2、JSP的执行过程: JSP--->转译为java代码--->编译--->Servlet实例
  客户端--请求-->index.jsp
  --->Web服务器(Tomcat)-->找这个页面对应的Servlet实例是否存在
   --->该页面的实例还不存在时 ,将index.jsp转译index_jsp.java (成为一个Servlet) -->编译
   --> 创建一个此Servlet的实例
                        --> 用这个实例来处理用户的请求并作出响应
 3、EL表达式:
  a)语法: ${ /*表达式*/ }   EL可用于所有HTML和JSP标签中
  b)有效表达式可以包含变量、文字常量、操作符、函数调用
   (1) 变量用于存储和访问JSP程序中的值。EL表达式中的变量可以引用存储在标准范围(page,request,session,application)中的属性。
    变量在标准范围中的搜索顺序是page、request、session、application。
    隐式对象:
     pageContext:  ${pageContext.request.contextPath}
      相当于<%= request.getContextPath%> 获取Web应用路径,以/开头
     pageScope:
      pageContext.setAttribute("name", "Test");
      ${pageScope.name}或${pageScope["name"]}
     requestScope:
      request.setAttribute("name", "Test");
      ${requestScope["name"]}
     sessionScope:
      session.setAttribute("name", "Test");
      ${sessionScope.name}
     applicationScope:       
      ${name}
     param:
      ${param.pwd}  <---> request.getParameter("pwd");
     paramValue:
      ${paramValue.Test} <---> request.getParameterValues("Test");
     initParam:
      ${initParam.count} <---> servletConfig.getInitParameter("count");
     head:
      ${head.name}<---> request.getHeader("name")
     headValues:
      ${headValues.name}<---> request.getHeaderValues("name")
     cookie:
      ${cookie.SESSIONID}
   (2)常量: 布尔 , 整型 , 浮点 , 字符串 , null
   c)运算符:
     算术: + 、- 、* 、/(DIV)、 %(MOD)
     逻辑:&&(and) 、 ||(or)、 !(not)
     比较:>(gt) 、>=(ge) 、<(lt) 、<=(le)、 ==(eq) 、!=(ne)
     条件:表达式 ? 值1 : 值2
     empty: 判断空值或null ${empty null} ${empty ''} ${empty ""} ${!empty null}
 4、JSTL:JSP标准标签库
   1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 完成一些通用的功能
      1). <c:out value="${}" /> 会把一些HTML的特殊字符进行转换
      2). <c:set value="..." var="变量" scope=""/>
      3). <c:if test="布尔表达式" var="">....</c:if>
      4). <c:choose>
             <c:when test="">...</c:when>
             <c:when test="">...</c:when>
             <c:otherwise>...</c:otherwise>
          </c:choose>
    5). <c:forEach var="i" begin="1" end="100" step="1">${i}</c:forEach>
           <c:forEach var="str" items="${requestScope.list}"> ${str}</c:forEach>
           <c:forEach var="str" items="${requestScope.list}" varStatus="s">
               ${s.index}-${s.count}-${str}
           </c:forEach>
      6). <c:forTokens />

      7). <c:url value="URL路径" var="" scope="">
             <c:param name="名" value="值"/>
           </c:url>   --> URL路径?名=值 ;不支持Cookie: URL路径;sessionid=xxxx?名=值
 5、相关管理
  会话管理:
   (1)原理:WEB服务器将会话ID作为响应的一部分返回给客户端,客户端必须把会话ID作为请求的一部分提交给服务器。
   (2)会话状态是服务器端保存的。HttpSession对象,也叫会话作用域。
   (3)HttpSession:
     1) 获取:request.getSession();  //getSession(boolean flag);
     2) boolean isNew();  //是否为新建的会话
     3) String getId();   //会话ID
     4) long getCreationTime();  //得到会话创建的时间
     5) void setAttribute(/*name*/,/*value*/);
     6) Object getAttribute(/*name*/);
     7) void removeAttribute(/*name*/);
     8) public long getLastAccessedTime(); //得到最后一次访问此会话的时间毫秒值
     9) void invalidate();   //使会话失效

   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值