一、JSP的由来

   1、Servlet诞生以来,在系统维护,变更及其预览视图效果时,比较繁琐(HTML部分)。后来,Sun公司推出了JSP来解决这个麻烦。JSP的作用就是将Servlet里的HTML部分抽取出来,单独封装。

   2、什么是JSP技术

      就是Sun公司提供的服务端动态页面的一个组件规范。

      JSP先转成Servlet,再执行。

二、JSP编写规范

   1、是一个以.jsp为后缀的文件

   2、jsp里可以书写

      (1)HTML代码(包含html,css,javaScript)

      (2)注释

      (3)java代码

        java表达式

        java片段

        java声明

      (4)JSP指令

         常用的指令:page,include,taglib

      (5)隐含对象(内置对象)            

三、书写HTML代码

       在运行JSP组件时,先转成Servlet组件,然后html代码会调用out对象的write方法进行书写

四、书写java代码   

位置:是jsp文件中的任意位置

    1、java表达式

             书写格式:<%=    %>  

          可以是变量,运算表达式,也可以是带有返回值的方法

          转成servlet时,调用out.print()书写内容                       

    2、java代码片段

             书写格式:<%    %>

              转成servlet的位置为 service方法中的java代码  

    3、java声明  

              书写格式:<%!     %>

              里面可以:  定义方法  ,声明变量   

              转成servlet时

       (1)方法的位置为servlet组件的方法声明的位置        

       (2)变量是Servlet组件的成员变量

五、JSP指令

       书写格式:

      <%@指令名      %>        

       常用的指令:page,include,taglib  

       

   1、page:

           简化java代码的书写

          属性有

     import:导包

           例如:  import="java.util.Date"

            import="java.util.*,java.io.*"

         转成Servlet组件的位置在类名之上       

           

     pageEncoding:设置编码集

         例如:   pageEncoding="utf-8"

         转成Servlet组件里的

     response.setContentType("text/html;charset=utf-8");

     

    2、include

             在JSP转成Servlet组件前,引用其他的JSP/HTML文件。

      <%@include  file="引用文件的路径"%>                               

            例如:

      <%@include  file="second.jsp"%>

六、隐含对象

   1、什么是隐含对象

     jsp在转成Servlet组件时,容器自动创建的对象。

   2、作用

           简化服务器的请求和响应数据的处理。

   3、隐含对象的分类(九大内置对象)

           输入输出对象: request,response,out

           作用域对象:  session,application,pageContext

           Servlet对象:  page,config

           异常对象:    exception  

  • jsp的运行原理(见JSP01里的图片)   

jsp页面怎么写java代码 jsp示例_jsp页面怎么写java代码

 

八、转发

    web组件将未完成的数据处理,转交给另外一个web组件继续处理。

    如:servlet组件通过dao查询数据,将查到的数据转交给jsp组件,由jsp组件负责显示。

 1、转发的步骤:

      (1)将数据绑定到request对象上

        void request.setAttribute(String name,Object obj)

        name:绑定名

        obj:要转发的数据对象

         获取绑定数据

        Object request.getAttribute(String name)

        name:绑定名

      (2)获取转发器

         RequestDispatcher rd =  request.getRequestDispatcher(String url)

        url:要转发到的目的地地址

      (3)进行转发

         rd.forward(request,response)

    2、转发的原理

jsp页面怎么写java代码 jsp示例_jsp页面怎么写java代码_02

 

 

  3、转发的特点:

       (1)一个组件将未完成的处理转交给另一个组件

       (2)因为都是在服务器端,浏览器不知道,所以地址栏的地址不变

       (3)转发的后续可以执行(但是不能提前关闭流对象)

       (4)转发的目的地,必须是同一个应用内的组件

    4、与重定向的区别

        (1)重定向是浏览器收到302和location后,再次向服务器发送请求

             转发是服务器内部组件间转发

        (2)重定向的地址可以是任意地址

            转发的目的地必须是同一应用内   

        (3)重定向地址栏会发生改变

             转发不变

                     

练习:使用转发修改emp_jsp项目

目的:将dao层从jsp中撤出来   

 

用户通过网页(JSP)输入用户名、真名和密码,Servlet接收后通过JDBC将信息保存到MySQL中。

--------------------------------------------------------------------------------------9.21------------------------------------------------------------------------------

一、完成注册和登录功能

   建表:

create table user_info(
   uid int primary key auto_increment,
   username varchar(20) unique,
   password varchar(50) not null,
   realName varchar(20),
   gender enum('f','m')
   );

1、完成注册功能   

.....

 

二、状态管理

   1、为什么要有状态管理

     web项目使用HTTP协议,HTTP协议也叫"无状态协议"。浏览器发送一次请求,服务器进行一次响应。响应后,断开连接。下一次请求会重新连接。(多次请求之间没有关系)有的时候,我们需要跟踪多次请求,判断是不是同一个用户的操作。

    比如:用户选购商品,添加到购物车

   2、什么是状态管理

     我们将浏览器与服务器之间的多次交互看成一个整体,进行管理交互产生的状态(数据)。状态即数据。

    比如:

        汽车                      洗车店               

                         

       ID:888888

       1,2,3,4,5,6.......

       

       ID:666666

       1,2,3,4,5,6.......

   3、状态管理的技术

       在客户端进行状态管理的技术:代表Cookie技术

       在服务端进行状态管理的技术: 代表Session技术

三、状态管理之Session技术(中文:会话)

 1、概念

     当浏览器向服务器发送请求时,服务器会在服务端单独给浏览器开辟一个存储空间,用来存储一个Session对象。session对象有自己的唯一标识符,

SessionId,当服务器做出响应时,会以set_Cookie消息头的形式发送给浏览器,当浏览器再次发送请求时,以将sessionid以cookie消息头的形式发送给服务器,服务器进行查找此sessionid的session对象。

2、session原理

 3、如何获取Session对象

     (1) HttpSession session = request.getSession(boolean flag)

      HttpSession是一个接口,方法的返回值为此接口的实现类对象。

      当形参为true时,服务器收到请求后,如果没有接收到sessionID,服务器就会自动创建Session对象,如果接收到sessionId,会查找是否有此sessionId的session对象。如果没有找到,创建。如果找到了,就重用。   

      形参为false时,没有sessionID,或者有sessionID没有找到,不创建

      有sessionId,找到后,就返回。    

     

      (2)reguest.getSession();

       相当于request.getSession(true).

       写起来方便。通常我们都是需要Session对象的。

 4、如何绑定数据。

     session.setAttribute(String name,Object obj)

     session.getAttribute(String name)

     

 练习:编写一个CountServlet组件,

      统计浏览器是第几次访问这个组件。

          

 5、session的有效时间

   

   session在服务端的默认超时时间为30分钟

   可以在conf/web.xml中查看或修改

   也可以在项目中的web.xml中进行设置

     <session-config>

   <session-timeout>单位分钟</session-timeout>

    </session-config>

   在代码中:

   session.setMaxInactiveInterval(int seconds);  //单位是秒

  

 session的应用场景:

    如:在访问主页面等页面时,需要我们校验用户是否登录过。

       没有登录,不能访问有效页面。需要进行跳转登录

  练习:

  

验证码:

   原理:

         当浏览器向服务器发送请求后,服务器端生成一串字符,将验证码保存在session对象里,在生成一张图片,图片上绘制这一串字符,将图片发送到浏览器。浏览器再次发送请求时,将浏览器端人工输入的字符串发送给服务器上,获取session里绑定的真实字符串,与之校验

     

  案例3:分页查询:

     首页,上一页  【1】 下一页  末页