一、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里的图片)
八、转发
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、转发的原理
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】 下一页 末页