jsp用法和代码例子,和解析跳转的过程

jsp :

生命周期 :
            1 先执行当前类的构造方法
            2 再执行init()方法
            3 执行service()/doGet()方法
            4 关闭的时候执行destroy()方法

jsp 是javaServletPage的缩写
   
   jsp 的本质,是一个Servlet,是个特殊的java文件
   Servlet : 平常的.java类,继承于HttpServlet类,且,必须覆写它的service()或doGet()方法
    
   jsp 是在html中写java语句

jsp 在tomcat运行时的解析过程 :
    
        **.jsp ---> tomcat 解析掉**.jsp中的<% %>,<%@ %>,<%= %>,<%! %>,并生成java(servlet)文件 --- > **.java ---> javac编译,生成**.class ---> **.class --->加载到jvm虚拟机,解析出一个虚拟的html表---->浏览器显示虚拟的html表--->当我们提交的时候,是在浏览器去找的,加载到jvm虚拟机里面的**.class(servlet文件)--->再执行操作

四种形式 :
        <% %> , <%! %> , <%@ %> , <%= %>
    
    1 <% %> : //里面可以写任意Java代码  就是doGet()方法 或Service()方法(一样这两个方法) (java代码要加";"分号,因为是方法体,该怎么写还怎么写)   
        里面的内容就是在写doGet()方法的方法体
        int accessCount=0;//就是局部变量

2 <%! %> : //类构成元素
        // 这里声明的变量是成员变量   
        // 声明的方法是成员方法
        // 相当于servlet类里面的类构成元素
        // 成员变量 , 多个客户端访问同一份   每个线程都有一个成员变量的缓存  然后这个缓存 会定期和主线程同步
        // 所以说  尽量不要使用成员变量!!!!
     int accessCount=0;//成员变量

3 <%@ %> : //用来导包和设置编码格式
            如 :
                <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
    
    4 <%= %> : //用来直接输出,就是out.println();
        里面的内容就是out.println("内容")要输出内容的字符串,(所以不用加分号---";")
        <%= request.getParameter("name")%>
        ↓↓↓↓↓↓
        <% out.println(   request.getParameter("name")   ); %>

Servlet :

Servlet 是 在java中写html语句

include_file : //静态包含

静态包含 :  jsp编译器编译的时候,已经包含好了相应的文件 并且只生成一个java(servlet)文件 -- javac 同一个class文件 在jvm运行的时候 他两个之间就不能传参了,他们使用同一个request,reponse(相当于把两个文件合并为一个文件)

<%@ include file="文件名.jsp"%>;//在哪里静态包含,就把指定文件合并到哪里(位置)

errorPage : //网页错误/跳转文件/跳转网页

错误网页 : 当当前文件出错的时候,跳转到指定文件中,但是指定文件的设置(编码...),必须和当前文件一致,而且必须指明,那就是指定文件
    如 : <%@ page errorPage="文件.jsp"%>//错误网页
    
    被包含文件(被指定文件) : <%@ page isErrorPage="true"%> //指明,我就是指定文件(要跳转到的文件)IUserService

include_page : //动态加载
    
        注意: 1 jsp标签需要自己闭合
              2 jsp:include 是动态加载! 在jsp编译的时候 加载页面和被加载页面 会被解析成两个java(servlet)文件!
              3 javac 编译器会编译两次  生成两个class文件
                   然后在jvm虚拟机中运行的过程中,这个时候包含甲文件才回去调用乙class文件
                    这就是动态加载
              4 他们不是同一个request对象了!!!!!!!
              5 肯定需要flush
              6 传值问题

如 :
        <jsp:include page="_02_date.jsp" flush="true" />//动态加载
        <jsp:param value="<%=value1 %>" name="v1"/>//传参

sendRedirect :
    
    跳转
    //使用答应(response)调用的,所以就已经出了jvm虚拟机,再过去指定页面 地址栏会改变
         不会阻止下面的运行
            就相当于在生成的那个java文件的doget()方法里面写了
                response.sendRedirect("指定文件.jsp");//使用答应(response)调用的,所以就已经出了jvm虚拟机,再过去指定页面
            因为他是在浏览器周转了一下  所以  浏览器会显示第二个页面的 地址
            同样也说明了 他们肯定不是同一个对象
            他们是不同的request对象

forward :
    
    跳转
    //使用请求(request)调用的,所以在jvm虚拟机里面,直接把指定页面拿过来,使用,地址栏不会改变,是动态加载概念
        <jsp:forward/>  
            会阻止下面的运行
            相当于在doget方法里面写了:
                this.getServletConfig().getServletContext()----这里是通过当前servlet
                获得了servlet配置属性 然后获得servlet上下文
                    .getRequestDispatcher(URL)-- 调用 分发器
                    传递到指定的URL路径去    forward方法才是真正的跳转
                    携带了当前的request  response对象
                    .forward(request, response);
                虽然他们的内存地址不一样  但是他们的对象里面的属性是相同的

他们两个页面之间的周转没有经过浏览器  一直在虚拟机里面
                所以说他是比较快的
                
                用法<forward>
                    <jsp:param 键值对>
                    这里相当于在原来的request对象基础上添加了键值对
                    </jsp:forward>  --注意没有空格

useBean :

<jsp:useBean id="变量" class="文件名"></jsp:useBean>
        //这里是获得Bean的对象的引用  就是new bean.CounterBean
    <jsp:useBean id="cd" class="CounterBean"></jsp:useBean>
    //实例化bean文件夹里面的CounterBean类文件,把对象引用赋值给 变量 cd

page :
    
    //范围 page 是当前页面有效
    <jsp:useBean id="变量" scope="page" class"文件名" />
    <jsp:useBean id="conuterBean" scope="page" class"bean.CounterBean" />
    
 request :

//范围 当前request对象有效
    <jsp:useBean id="变量" scope="request" class"文件名" />
    <jsp:useBean id="counterBean" scope="request" class="bean.CounterBean" />

application :

//范围 所有的访问,都能访问
     <jsp:useBean id="变量" scope="application" class"文件名" />
    <jsp:useBean id="counterBean" scope="application" class="bean.CounterBean" />

session :

//范围 当前浏览器
     <jsp:useBean id="变量" scope="session" class"文件名" />
     <jsp:useBean id="counterBean" scope="session" class="bean.CounterBean" />

setProperty :

<jsp:setProperty name="变量(以获取的对象引用)" property="属性(成员变量)" value="值(要设置的值)" />
    //设置值
    <jsp:setProperty name="cd" property="count" value="23" />
    //给cd这个引用里面的count变量赋值为23  底层调用的setCount()方法(自己写的),用于让外界设置私有的成员属性的值

getProperty :

//获得值
    <jsp:getProperty name="变量(以获取的对象引用)" property="属性(成员变量)" />
    <jsp:getProperty name="cd" property="count" />
    ///获取cd这个引用里面的count变量的值, 底层调用的是getCount()方法(自己写的),用于让外界获取私有的成员属性的值

this_getServletConfig_getServletContext_getRequestDispatcher :

this.getServletConfig().getServletContext()
                    .getRequestDispatcher("/_12_Servlet_Jsp/_01_ServletUseJsp.jsp")
                    .forward(request, response);
                    //当前类对象(this),调用getServletConfig()先获得配置,在调用getServletContext()方法获得上下文,在调用getRequestDispatcher()分发器,分发到指定文件中,在把当前的request和response传入
 getServletConfig :

this.getServletConfig();//获得配置属性

getServletContext : 

this.getServletConfig().getServletContext();//获得上下文

getRequestDispatcher :  

this.getServletConfig().getServletContext()
                    .getRequestDispatcher("/_12_Servlet_Jsp/_01_ServletUseJsp.jsp")
                    .forward(request, response);//分发器,分发到指定位置;

时间: 2024-08-26 02:24:23

jsp用法和代码例子,和解析跳转的过程的相关文章

jsp如何在“用&lt;jsp:include&gt;包含的页面中“实现跳转

因为系统中的页面几乎都需要当前有用户登录才能有效访问,所以想在header中判断是否有用户登录,未登录实现跳转.能达到的效果是,未登录状态下访问所有包含header.jsp的页面时,可以自动跳转到登录页面.我在header.jsp中加入如下代码没有作用. <% if (session.getAttribute("loginedUser") == null) { response.sendRedirect("signin.html"); return; } %&

30 个 php 操作 redis 常用方法代码例子

这篇文章主要介绍了 30 个 php 操作 redis 常用方法代码例子 , 本文其实不止 30 个方法 , 可以操作 string 类型. list 类型和 set 类型的数据 , 需要的朋友可以参考下redis 的操作很多的,以前看到一个比较全的博客,但是现在找不到了.查个东西搜半天,下面整理一下php 处理 redis 的例子,个人觉得常用一些例子.下面的例子都是基于 php-redis 这个扩展的.1 , connect描述:实例连接到一个 Redis.参数: host: string

可以放在html代码中的自动跳转代码

可以放在html代码中的自动跳转代码 有3种方法可以实现html的页面跳转,1,refresh   2,onload事件中加入代码  3,js实现 1.<html><body><meta http-equiv="refresh" content="0;url=http://www.baidu.cn"></body></html> 2.<html><head><meta http

java swing高仿酷我音乐界面代码例子下载

原文:java swing高仿酷我音乐界面代码例子下载 代码下载地址:http://www.zuidaima.com/share/1550463245044736.htm 高仿酷我音乐界面尽情欣赏 java swing高仿酷我音乐界面代码例子下载,布布扣,bubuko.com

JS 实现2+2=5的代码 实现原理解析

当我在http://segmentfault.com/q/1010000000531302 看到的时候 先是一惊. 这是代码 g = function () { H = 3 return H + H } f = function () { Η = 2 return Η + H } // 3 + 3 = 6 alert(g()) // 2 + 2 = 5 alert(f()) 演示地址:http://jsfiddle.net/qhRJY/light/ 当第二个方法执行的时候 alert 弹出的居然

《一个操作系统的实现》读书笔记--第三章---不同特权级代码段之间的跳转

http://blog.csdn.net/begginghard/article/details/7262901 1.特权级 2.一致代码段和非一致代码段 3.DPL.RPL.CPL分别代表的含义,存储在什么位置,以及它们之间的关系 4.不同特权级数据段之间的访问规则 5.不同特权级代码段之间的转移 6.代码段之间的转移对堆栈的影响 7.结合pmtest5.asm来见证不同特权级代码段之间的跳转 一.特权级在IA32的分段机制下,特权级总共有4个特权级别,从高到低分别是0.1.2.3.数字越小表

Java代码工具箱之解析Excel

1. 使用开源工具 jxl.jar 2. 功能:解析常规Excel.xls格式测试可行,xlsx未测试.Excel测试格式为常规类似table这种简单布局文件.第一行为标题,后面行为内容.代码 可正确解析内容,会自动丢掉第一行(标题). 3. 示例代码(自行导入必要库) 1 public static void readExcel() throws BiffException, IOException{ 2 //创建一个list 用来存储读取的内容 3 List list = new Array

放在jsp头部的代码

String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 一般放在jsp头部的代码,用于绝对路径.

Java泛型代码例子

Java泛型代码例子 一篇代码胜过千言万语 package com.apkkids.javalanguage; import java.util.ArrayList; import java.util.List; /** * @author wxb * Java泛型例子 */ public class GenericTest { //泛型接口 public interface MyCollection<T>{ public T get(int position ); public T add(