理解JSP内置对象的概念
掌握request和response的使用
掌握转发和重定向的区别
掌握out对象的使用
掌握session的使用
掌握include指令的使用
掌握application的使用
掌握Cookie存取数据
web开发步骤
1.后端——前端
先有接口,前端用的时候直接调用
后端已实现注册接口,接口名为zhuce.do
前端此时:
假如前端的注册是一个form表单,前端的提交地址就只能写zhuce.do
即:form中的action=“zhuce.do”
2.前端——后端
先有前端(需求),后端去实现前端指定的请求接口
现在前端是index.jsp,里面有一个注册的form表单,但是当前action未指定
所以要先指定action的地址,假如是:servlet/doRegister.jsp
后端此时:
1.先要创建一个servlet的文件夹
2.在servlet的文件夹中doRegister.jsp的页面
3.在doRegister.jsp中写注册的实现逻辑
整个web的请求流程,几个角色的分工
三层架构:表示层——业务层——数据访问层
MVC模式:表示层(视图层)——请求层——模型层(业务层+数据访问层)
二合一结果:前端(表示层)——请求层——业务层——数据访问层
以注册为例:
前端:form:只收集数据然后提交,此时数据提交给了请求API(servlet),比如request
请求层:servlet,来解析API中保存的数据,然后发给业务层
业务逻辑层:service,调用dao层,获取数据访问结果,并对数据进行逻辑处理加工
数据访问层:dao,编写SQL语句,并解析结果
一、HTML页面转成JSP页面
- 方法一:直接修改HTML页面
- 直接在HTML页面最顶端添加page指令
- 修改文件后缀名为jsp
- 方法二:新建jsp文件,拷贝HTML代码
- 在工程中新建文件名为***.jsp文件
- 将HTML页面的内容拷贝到***.jsp文件中。只覆盖jsp文件中html标签的内容就可以
二、JSP内置对象
对象 | 描述 |
request | 每当客户端请求JSP页面时,JSP引擎会制造一个新的request对象来代表这个请求。 |
response | 当服务器创建request对象时会同时创建用于响应这个客户端的response对象 |
out | out对象用来在response对象中写入内容。 |
session | session对象用来跟踪在各个客户端请求间的会话。 |
application | 该对象代表web应用本身,整个web应用共享一个application对象。 |
config | 这个对象允许开发者访问Servlet或者JSP引擎的初始化参数。 |
pageContext | 页面上下文对象,这个对象存储了内置对象的引用。 |
page | 这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表 |
exception | 这个对象包装了从先前页面中抛出的异常信息。 |
1.request
主要用于处理客户端请求,request对象中保存了用户的请求数据和浏览器的相关信息,通过调用相关方法就可以实现请求数据的读取
1.1.request对象常用的方法
方法名称 | 说明 |
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |
1.2.使用request获取注册信息
JSP
<%
//小脚本,根据点击注册按钮发送的注册请求,获取注册名称和密码、邮箱
//修改request的字符集编码
request.setCharacterEncoding("UTF-8");
//当点击注册按钮时,会触发客户端向服务端发送请求,这时,客户端提交的表单中的信息
//就会存放到request对象中,因此获取这些信息就需要使用request对象相关的方法
//获取注册的用户名
String userName = request.getParameter("userName");
//获取注册的密码
String userPwd = request.getParameter("userPwd");
//获取注册的邮箱
String email = request.getParameter("email");
System.out.println("用户名:" + userName);
System.out.println("密码:" + userPwd);
System.out.println("邮箱:" + email);
%>
常用发送表单数据的方法:post和get
1.3.post和get区别
比较项 | get | post |
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
1.4.解决表单提交时中文乱码的问题
- post请求出现乱码
- request.setCharacterEncoding("utf-8");
- get请求出现乱码
- 治标的方法:new String(s.getBytes("iso-8859-1"),"utf-8");
- 治本的方法:配置tomcat\conf\server.xml文件
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
2.response
用于响应客户请求并向客户端输出信息
2.1.response对象常用方法
方法名称 | 说明 |
void addCookie(Cookie cookie) | 给客户端添加一个Cookie对象,以保存客户端的信息 |
PrintWriter getWriter() | 返回一个输出字符流 |
void sendRedirect() | 将请求重新定位到一个不同的URL,即页面重定向 |
void setCharacterEncoding(String encoding) | 设置字符编码类型为encoding |
使用response实现登录验证并跳转到后台
<html>
<head>
<title></title>
</head>
<body>
<%
//修改request和response的字符集编码
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//获取注册的用户名和密码
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");
if("abc123".equals(userName) && "123456".equals(userPwd)){
//认为登录成功,跳转到后台主页
//session.setAttribute("loginUser",loginResult.getData());
//重定向跳转
//response.sendRedirect(request.getContextPath()+"/manage/index.jsp");
//转发跳转
request.getRequestDispatcher("/manage/index.jsp").forward(request,response);
}else {
//登录失败,跳回系统登录首页
//response.sendRedirect(request.getContextPath() + "/index.jsp");
//也属于重定向跳转
out.print("<script>alert('登录失败');location.href='http:/"+request.getContextPath()+"/index.jsp'</script>");
out.flush();
}
%>
</body>
</html>
3.转发
作用:在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理
实现:RequestDispatcher对象的forward()方法
在多个页面交互过程中请求中的数据可以共享
<%
RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");
rd.forward(request, response);
%>
3.1.转发与重定向区别
转发: 一次请求(URL不变) 是服务端内部的资源交互 转发过程中数据不会丢失
重定向:两次请求(URL改变) 从客户端出发 重定向后数据会丢失
4.out
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容
常用方法
5.会话
在一段时间内,一个客户端与Web服务器的一连串相关的交互过程
会话可以在多次请求中保存和使用数据
在JSP中使用session对象实现会话的存取
6.session
session机制是一种服务器端的机制,在服务器端保存信息。用于存储与用户相关的会话信息
6.1.session与窗口的关系
- 每个session对象都与一个浏览器窗口对应 ,重新开启一个浏览器窗口,可以重新创建一个session对象
- 通过超链接打开的新窗口,新窗口的session与其父窗口的session相同
- 每个session都有一个唯一的sessionid: public Striing getId();
6.2.会话清除和过期
- 程序主动清除session数据
- 设置会话失效:session.invalidate();
- 只移除会话的一个属性:session.removeAttribute(String name);
- 服务器主动清除长时间没有再次发出请求的session
通过setMaxInactiveInterval(int interval )方法,单位是秒
<%
session.setAttribute("loginUser",user);
session.setMaxInactiveInterval(600);
response.sendRedirect("admin.jsp");
%>
修改Tomcat服务器的web.xml,单位是分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
7.JSP页面中的包含操作
- 使用<%@include%>指令实现静态包含
<%@include file=“URL”%>
- 使用<jsp:include>标签实现动态包含
<jsp:include page=“URL”>
7.1.动态包含与静态包含的区别
8.application
application对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或者Servlet之间共享变量
application对象开始于服务器的启动,终止与服务器的关闭
application对象实现了用户间的数据共享,可以存放全局变量
application对象常用的方法
三、对象的作用域
1.作用域的分类
四、Cookie
1.简介
浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器进行响应后就关闭与该用户的连接。当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape开发出了Cookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。Cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息;当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。
Cookie是web服务器保存在客户端的一系列文本信息
2.Cookie的作用
- 对特定对象的追踪(Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告)
- 实现各种个性化服务(Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务)
- 简化登录(Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点)
安全性能:容易泄露信息
3.在JSP中使用Cookie
- 创建Cookie对象
Cookie newCookie = new Cookie(String key, String value);
- 由服务器端向客户端写入Cookie对象
response.addCookie(newCookie);
- 读取客户端的Cookie对象
Cookie[] cookies = request.getCookies();