首页 > 代码库 > JSP

JSP

Servlet是运行在服务器的,专门用于处理客户端发来的各种请求

之前了解了整个浏览器到服务器之间交互的过程,交互的开始从请求开始,结束到响应结束,那么Servlet程序同样存在自己的声明周期,服务器虽然在一直运行,但是Servlet程序可不能一直运行啊。

    Servlet生命周期:
    开始----》实例化----》初始化---》服务---》销毁---》不可用---》结束
    1,第一次请求,创建Servlet对象
    2,执行init方法初始化
    3,根据相应的请求执行服务Service
    4,处理完请求执行destroy销毁方法
    5,结束
    
    Servlet是多线程的~
    
    ServletAPI结构:
        Servlet 接口
        实现类:GenericServlet通用基类
                HttpServlet拥有Http协议特性类
                
    编写的任意Servlet类都继承与HttpServlet
                
    处理服务的方式:
        doGet
        doPost
        
        两个处理方式都存在解析请求和响应的能力:
            request  请求
            response 响应
            
            两种Java响应页面的方式:(跳转)
            request.getRequestDispatcher("index.jsp").forward(request, response);请求转发(可以往下一级传递这一级的信息)
            response.sendRedirect("index.jsp");重定向(不可以往下一级传递这一级的信息,将上一级的信息清零,清除缓存)
        
        字符集问题:
            Java中接收相同的字符集文本
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("utf-8");
            
            页面中先要确定好字符集:
            html<meta http-equiv="content-type" content="text/html; charset=UTF-8">
            JSP<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
            
            
        JSP标签   <%@     %>声明标签
                  <%      %>方法标签
                  <%=     %>赋值标签
                  <%!     %>注释标签

        JSP中下面的两个标签,如果不写,使用的是相对路径,如果写了是绝对路径:
        <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
        %>
        
        <base href="http://www.mamicode.com/">
        
        而在项目中常用的是绝对路径,相对路径用的少
        
        使用el表达式来编写代码:
        1,现在JSP中声明那句话下面一行添加上:
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
        2,想要往浏览器中传递数据:就需要在Java代码中放置已有的作用于的传递范围
        request.setAttribute("aaa", user);
        引号里面的是浏览器展现的那么名字${aaa},user写的是Java中传递的变量或者确切的值。
        
        
        request域,只在当前页面中使用,不可向下传递,一旦servlet生命终止,那么之前的数据只活在当时。
        session域,可以在整个服务中使用,但是不能脱离开浏览器。
        cooke域,可以活在所有的浏览器中
        
        要想从域中获取信息,那么就要先把信息放入到域中setAttribute
        想要获取getAttribute存在域当中的信息
       
    <c:forEach var="list" items="${clientList}">
    
             使用set可以改变session的值
         <c:set var="idnameValue" value="http://www.mamicode.com/${fn:split(temp.supplier,‘/‘)}" ></c:set>
              使用if做判断
         <c:if test="${idnameValue[0] == list.clientId}">
              option选择
        <option value="http://www.mamicode.com/${temp.supplier}">${list.clientName}</option>

        </c:if>

        </c:forEach>
    
            
        if(xml.readyState==4)    
    0 - (未初始化)还没有调用send()方法
    1 - (载入)已调用send()方法,正在发送请求
    2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
    3 - (交互)正在解析响应内容
    4 - (完成)响应内容解析完成,可以在客户端调用了

JSP