标签(空格分隔): 工作学习
Java Server Page:动态页面技术 html+java。(在服务器运行开发)
应用服务器(tomcat)等都实现了JSP规范。
一个JSP文件以.jsp为后缀
JSP本质就是Servlet
浏览器第一次访问JSP,服务器的JSP引擎会将JSP转换成一个java类, 编译生成class文件,实例化、初始化该类,调用_jspService()方法,将响应内容发送到浏览器
JSP实质也是Servlet
语法,java语法
* <% %> 编写JAVA代码
* <%! %> JSP中的声明语法 开发中不常用 声明变量为全局(成员)变量 方法为成员方法 类为内部类
* <%= %> JSP中的表达式(不写分号) 将表达式运算结果输出(网页上) <%=x+y%>等价out.print(x+y);
注释:
* HTML注释
* java注释 // /**/ /** */
* JSP注释 <%-- --%>
1* page指令 设置JSP页面的全局属性 通常JSP中第一条语句即为page指令
<%@ page contentType="text/html;charset=utf-8"%>
常用属性:
contentType:设置页面的MIME类型,编码格式
pageEncoding="UTF-8" 设置页面的编码格式
language="java" 代码段使用的语言(默认为JAVA,其他语言不支持)
import 导入其他包中的类 唯一一个可以多次使用的属性
errorPage="doEception.jsp"
isErrorPage="true"
案例:hello.jsp
<%@ page contentType="text/html; charset=UTF-8"
import="java.awt.*,java.net.*"
import="java.util.List"
import="java.sql.*"
errorPage="doException.jsp"
%>
<%@ page import="java.io.*" %>
<html>
<head>
<style type="text/css">
span{
color:red}
style>
head>
<body>
<h2>
<%
System.out.println("HelloWorld");//控制台打印
out.println("Hello JSP");//浏览器页面打印
Connection conn = null;
%>
<%!//声明定义方法 是全局方法
void method(){
System.out.println("jsp method");
}
%>
<% int age = 30; %>//声明初始化变量 局部变量
<%! int age = 40; %>//声明初始化变量 是全局变量
<%! class A{} %>
<%
int x = 30;
int y = 40;
int z = x*x+y*y;
%>
结果是:<%=z %>
<%=x*y%>
age: <%=age%>
<%-- <%=5/0 %> --%>
<%-- JSP注释
--%>
h2>
body>
html>
2* include指令
<%@ include file="head.jsp" %> 此文件包含head.jsp文件 静态包含
案例:head.jsp,include1.jsp
3* taglib指令 引入标签库指令
<%@ taglib uri="" prefix="" %>
动态包含
案例:foot.jsp include2.jsp(包含foot.jsp)
静态包含与动态包含的区别:
* 语法不同
静态包含,<%@ include file="head.jsp" %>
动态包含,
* 方式不同
静态包含,JSP引擎将两个JSP文件转换到一个java文件中
动态包含,两个JSP文件分别转换为两个JAVA文件,使用include()方法包含
*参数: 静态包含,不可以传参数,动态包含 可以传参数
实现JSP的转发(没啥意义)
案例:forward.jsp,forward2.jsp
out----------->JspWriter
request------->HttpServletRequest
response------>HttpServletResponse
application--->ServletContext
exception----->Exception:当jsp的page指令中isErrorPage="true"才可以使用
案例:hello.jsp,doException.jsp
page---------->Object
session------->HttpSession
pageContext--->PageContext
config-------->ServletConfig
JSP : 展现页面功能 View 视图 动态页面
Servlet :
接收请求、处理请求(调用底层业务逻辑代码)、响应结果
1、目的:为了使JSP写起来更加简单,只能在jsp
2、等价关系
(1)<%=uu.getId()%> --->${uu.id}即对象名.方法名和后面的确对象名.属性对应
(2)<%=表达式%> --->${表达式}
即原来的<%=request.getAttribute("stu")%>或
<%=session.getAttribute("stu")%>等价于 ${stu}
1、EL即Expression Language(表达式语言) 目的:为了使JSP写起来更加简单。
2、EL的语法:${ EL exprission }
${ bean.name } 或 ${ bean['name'] }
说白了,EL是用来显示数据的,功能跟<%=表达式%> 一样,EL是不需要引入什么东西的
3、3.1 <%=uu.getId()%> --->${uu.id}即对象名.方法名和后面的确对象名.属性对应
3.2 <%=表达式%> --->${表达式}
即原来的<%=request.getAttribute("stu")%> 或 <%=session.getAttribute("stu")%>
等价于 ${stu}
注:el和jstl 只能在jsp页面中使用,不能在html或servlet中用
1、jstl(JSP Standard Tag Library) 标准标签库
2、使用前要导入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3、基础语法
(1)
注:items后接的是el表达式-->集合
(2)
你学习真好!!!
你学习成绩优秀
你学习成绩良好
你学习成绩一般
你学习成绩太差!!!
项目文件发布部署路径:H:\apache-tomcat-7.0.70\webapps
服务器端口:默认8080我改成8088 代理服务器:8088(默认)改成
JDK:开发工具、运行环境:JVM jre
javaSE awt/swing C/S模式 client/server
javaME 嵌入式小程序
javaEE J2EE 一组规范标准
web项目 浏览器 网络环境 Browser 网络环境 Server B/S
服务器:大型的计算机
应用服务器:软件
应用服务器:支持所有javaEE中的规范
web容器 :tomcat 支持标准规范比较少 servlet/jsp
javaWeb项目
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。
2.1 从http://tomcat.apache.org/下载安装
2.2 Tomcat的目录结构:
bin/ 二进制可执行文件和脚本
common/ Catalina本身和web应用可加载的类目录
conf/ 配置文件目录
lib/ 所有Web应用可见的类库目录
logs/ 日志目录
server/ 服务器所需的类库目录
webapps/ Web应用所存放的目录
work/ Tomcat的工作目录(存放临时文件)
2.3 Tomcat配置文件
server.xml 服务器的主配置文件
web.xml 定义所有Web应用的配置
(缺省的Servlet定义和MIME类型定义)
tomcat-user.xml 定义了tomcat用户的信息
2.4 server.xml的层次结构
2.5 Tomcat安装步骤
1、安装JDK
配置java_home:
java_home=H:\JAVA\jdk1.7.0_13
path=%java_home%\bin;
2、安装tomcat
* 解压 目录:H:\apache-tomcat-7.0.70
* 安装(免安装) H:\apache-tomcat-7.0.70\bin\startup.bat运行没问题就行了。
3、javaEE eclipse运行web项目
右键项目中页面->run as->run on server->有的话选定tomcat7服务器
(没有的话manually define a new server–>选择Apache –>Tomcat v7.0 Server–>finish)
->next->选择磁盘tomcat,并指定JDK->finish
4、修改tomcat端口号
H:\apache-tomcat-7.0.70\conf conf目录中,server.xml
* 继承HttpServlet
* 重写service()方法
* 注册到容器中 在web.xml中配置映射路径
HelloWorld
com.itxdl.demo.servlet.HelloWorldServlet
HelloWorld
/hello.do (/hello.do 注意:必须以/开头 除非要用通配符*表示全部 *.do)
访问:
http://localhost:8080/servlet01/hello.do
url:http://localhost:8080/servlet01/hello.do
uri:servlet01/hello.do 请求资源路径
403:资源不可用(比如少“/”)
404:路径错误
405:service()方法定义错误
500:servlet有异常
提交数据到Servlet,Servlet接收数据具体流程
1、通过浏览器输入账号和密码,点击提交按钮
2、浏览器将数据打包
3、浏览器根据提交路径(form元素中的action值)连接服务器
4、将数据包发送给服务器
5、服务器接收到数据包,创建了两个对象
HttpServletRequest对象,HttpServletResponse对象
6、 服务器将接收到的数据包中的数据解包,将所有数据封装到HttpServletRequest对象中
7、服务器根据请求资源路径,在web.xml中查找到对应servlet类、实例化、初始化、
8、服务器调用servlet类中service()方法
9、服务器将封装数据后的request对象传给service()方法
10、service()方法中,需要调用request对象中getParameter()获取表单数据
11、如果有响应数据,将数据通过输出流打印到response对象中。
12、service()方法执行结束,服务器将response数据和其他数据打包,形成响应数据包
13、服务器将响应数据包发送给浏览器
14、连接关闭
4.1 Servlet 生命周期:Servlet 加载—>实例化—>服务—>销毁。
描述:
1、 * Servlet 加载
第一次被访问或加载配置,服务器加载servlet实例,服务器创建该servlet对象
Servlet servlet = Class.forName(“com.itxdl.demo.servlet.LoginServlet”).newInstance();
如需要容器启动立即加载servlet实例,需要在在web.xml中通过添加如下配置
2 加载级别0,1,2 值越大优先级越高
Servlet默认第一次被访问时创建servlet实例,并且一个Servlet对象只能被创建一次。
2、 * 初始化 当servlet第一次被访问,实例化之后,执行初始化 容器自动调用init();只执行一次。
servlet.init();
3、 * 提供服务 当servlet被访问, 容器自动调用service()方法
doGet(),doPost()
4、 * 销毁 当servlet不再被访问,或容器关闭 容器自动销毁servlet实例 容器会自动调用destroy()方法;
几个方法构成了servlet的生命周期
构造器、init()、service()、(doGet(),doPost())、destroy();
4.2 实现Servlet三种方式: Servlet GenericServlet HttpServlet
1、extends HttpServlet 实际开发中一般使用此种方法,在web.xml中自动生成
2、extends GenericServlet 然后重写service方法即可,web.xml要手工配置
3、implements Servlet 实现Servlet然后重写service方法即可,web.xml要手工配置
需求:实现数据库版本的登录和注册
1、建立数据模型
* 创建用户
CREATE USER luchong IDENTIFIED BY aaa;
create user luchong identified by aaa;
grant connect,resource to luchong;
SYS SYSTEM
修改账号密码:
alter user system identified by aaa;
* 创建表、初始化数据
t_user
create table t_user
(
id number(4) primary key,
username varchar2(20),
userpwd varchar2(20),
createtime date
);
create sequence seq;
初始化数据
INSERT INTO t_user VALUES(seq.NEXTVAL,’aaa’,’aaa’,sysdate);
INSERT INTO t_user VALUES(seq.NEXTVAL,’bbb’,’bbb’,sysdate);
INSERT INTO t_user VALUES(seq.NEXTVAL,’ccc’,’ccc’,sysdate);
5.1 Servlet提交请求、获得请求参数
* 请求参数
提交请求四种方式:
方式一: 提交表单:userName userPwd
方式二: 超链接:
删除数据
方式三: url地址直接传值:
通过浏览器输入地址:
http://ip:8080/pro1/delete.do?id=102
方式四:JS方式 window.loaction.href=”http://ip:8080/pro1/delete.do?id=102”;
DELETE FROM t_user WHERE id=101;
* 获取请求参数
浏览器所有的请求参数都被封装到HttpServletRequest对象中
HttpServletRequest接口提供一组获取请求参数的方法
String getParameter(String paramName) 方法
注意:转型 paramName参数名不存在方法返回null.
String[] getParameterValues(String paramName);获取多选框的值
需求:
获取用户的注册信息
案例:regist.html、RegistServlet
案例:regist.html、ShowBrowserInfoServlet
5.2 客户端提交请求和响应处理
5.2.1 客户端提交请求的途径
注意:四种请求方式 只有表单(默认GET)可以是POST请求,其他提交方式都是GET请求。
方式1:* 提交表单:userName userPwd
方式2: * 超链接:
删除数据
url地址直接传值:
方式3: * 通过浏览器输入地址:
http://ip:8080/pro1/delete.do?id=101
方式4:* js方式:window.location.href=”http://ip:8080/pro1/delete.do?id=101”;
DELETE FROM t_user WHERE id=101;
5.3中文处理
5.3.2 请求中的中文处理
* 服务器默认采用ISO-8859-1编码格式,浏览器采用UTF-8编码格式
* 编码和解码采用不同的编码表就会出现乱码现象
* 解决请求参数中的乱码(GET POST请求只能二选一 混用会出错)
* 如果是post请求,获取请求参数之前
request.setCharacterEncoding(“UTF-8”);
将请求数据包主体中的数据进行编码
* 如果是get请求,参数(Parameter)必须是中文,解决方式如下:
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
案例:regist.html、RegistServlet和regist.html、DeleteServlet
5.3.3 响应中的中文处理
* response.setCharacterEncoding(“UTF-8”);
推荐* response.setContentType(“text/html;charset=utf-8”);通知浏览器采用html方式解析,使用编码utf-8
MIME类型:文件类型,用于服务器与浏览器交互的文件类型,
通过tomcat/conf/web.xml查看所有文件类型所对应MIME类型
案例:showJpeg.html、ShowJpgServlet
5.4 ServletContext对象 获得当前项目名路径
服务器为每个项目创建独立的对象,该对象可以直接获取服务器的信息
表示当前应用的对象
ServletContext this.getServletContext(); 获取ServletContext对象
String getRealPath() 获取服务器的真实路径
JAVA代码获得当前项目名路径:
1. 方法包含参数HttpServletRequest request 用request.getContextPath();获取
2.方法包含参数HttpSession session 用session.getServletContext().getContextPath();获取
JSP页面获得当前路径: pageContext.request.contextPath
去H:\apache-tomcat-7.0.70\conf\web.xml查找对应的
案例:showJpeg.html、ShowJpgServlet
5.5 response页面跳转 常见错误状态码
sendRedirect(String url); 页面的重定向
response.sendRedirect(“new.html”);
等价于如下操作:
* 服务器向浏览器发送new.html路径
* 服务器向浏览器发送302的状态码
状态码:
404:资源不存在(路径错误)
500:服务器内部错误(代码有异常)
405:service()或doGet、doPost方法定义错误
400:表单提交错误。(表单post/get方式提交只有一种,或者只写了service()方法并且参数不对)
302:跳转(也是正确的)
200:正确
HTTP协议
案例:old.html 、new.html、TestResponseServlet
JSP : 展现页面功能 View 视图 动态页面
Servlet :
接收请求、处理请求(调用底层业务逻辑代码)、响应结果
5.6 转发
在WEB服务器中一个组件将一个未完成的工作交给下一个组件的过程。
5.6.1 原因
当servlet或者JSP有数据交换的时候,此时我们采用转发的方式来实现,重定向不适合这种场景。
转发:不但可以实现页面的跳转,也是两个组件数据共享的最佳途径。
5.6.2 如何实现
1先获取一个转发器:RequestDispatcher dispatcher = request.getRequestDispatcher(“URL路径”);
2实现转发:dispatcher.forward(request, response);
一句代码:request.getRequestDispatcher(“URL路径”).forward(request, response);
5.6.3 区分重定向和转发
重定向:两次请求两次响应
response.sendRedirect("URL路径");
* 服务器向浏览器发送URL地址(location)和302状态码。
* 浏览器地址栏发生变化。
* 重定向可以定向到项目中的资源的项目外的资源。
* 执行重定向之后,会将之前的request对象中的数据清空。不能通过request对象传值。
转发:在WEB服务器中一个组件将一个未完成的工作交给下一个组件的过程。一次请求一次响应
request.getRequestDispatcher("URL路径").forward(request, response);
* 服务器内部实现组件间跳转(servlet请求未处理结束,将请求转到新的目标组件),与浏览器无关。
* 浏览器地址栏不发生变化。
* 转发只能定向到项目中的资源。
* 执行转发之后,服务器会将请求对象和相应对象转给目标资源。
结论:
1、绑定转发数据到request对象中(通常先调用DAO 获取所有数据(List))
方法:void setAttribute(String name, Object value); Attribute属性
对应方法:Object setAttribute(String name, Object value);
request.setAttribute(“name”, value);
2、实现转发
request.getRequestDispatcher(“URL路径”).forward(request, response);
创建账号
JSP:提供添加表单
Servlet:创建SaveUserServlet 注册servlet
* 获取表单参数 转换类型 封装到实体中
* 调用Dao save(User user); 处理请求
* 响应结果
更新数据
userList.jsp->更新链接->访问servlet,根据账号id查询记录
->servlet将请求转发到修改数据的jsp
代码流程:
1、userList.jsp页面,添加“>编辑 传id参数
2、创建FindByIdServlet
* 获取id 类型转换
* 调用DAO
* 转发
* 绑定数据 request.setAttribute(“user”,user);
* 转发 request.getRequestdispathcer(“updateUser.jsp”).forward(request,response);
3、开发DAO
接口中添加User findById(Integer id)
4、updateUser.jsp显示数据
User user = (User)request.getAttribute(“user”);
更新账号
1、JSP 提交表单 访问Servlet
2、创建UpdateUserServlet
案例:servlet05_01
7.1、写路径和获得路径几种方式:
方式一:html中写路径。链接 、提交表单(action)、window.location.href=””
方式二:web.xml、重定向、转发
相对路径: .当前路径 ..上一级路径 不以”/”开头都是相对路径
绝对路径:以”/”开头为绝对路径
“/”:
HTML(JSP、JS)中”/”表示:http://localhost:8080/ (服务器的根)
web.xml中”/”表示:http://localhost:8080/项目名 (项目的根)
重定向”/”表示 服务器的根
response.sendRedirect(“/servlet05_01/admin/admin1.jsp”);
转发 “/” 表示 项目的根
request.getRequestDispatcher(“/admin/admin1.jsp”).forward(r,r);
main1.jsp->login.do->admin1.jsp->user1.jsp
main1.jsp->login.do->admin1.jsp->admin2.jsp->user1.jsp
结论1:使用绝对路径一定不会出现404(路径前使用”/”)
结论2:”/”在转发中不写项目名,其他所有路径中写 /项目名
结论3:(路径处理熟练)如果使用相对路径,在jsp中添加元素
//获取项目路径(带/) /servlet05_02
String contextPath = request.getContextPath();
1. 方法包含参数HttpServletRequest request 用request.getContextPath();获取
2.方法包含参数HttpSession session 用session.getServletContext().getContextPath();获取
JSP页面获得当前路径pageContext.request.contextPath
7.2、HTTP 协议
* 浏览器与服务器之间的连接方式
1、建立连接
2、发送请求数据包
3、服务器接收到请求数据包,根据请求资源路径,将请求资源以响应数据包的方式发送回给浏览器
4、关闭连接
* 数据包格式
请求数据包:
请求头
请求行:请求方式 请求资源路径 协议名称和版本
若干消息头:以key=value
请求主体
响应数据包:
响应头
状态行:请求方式 请求资源路径 协议名称和版本
若干消息头:以key=value
响应主体
7.3、状态管理 Cookie
HTTP协议规定,服务器对浏览器的请求是无状态性的(服务器默认不保存浏览器数据)
状态管理即数据管理,通过cookie和session的技术,实现抵抗服务器的无状态性。
Cookie:
cookie:服务器向浏览器写入数据,当浏览器再次发送同样路径的请求,会自动将cookie以消息头
的方式发送给服务器
cookie的创建 案例:servlet05_03
* Cookie cookie = new Cookie(“name”,”value”);
* setMaxAge(int sec);设置cookie的存活时间
* response.addCookie();发送cookie到浏览器
jsp->servlet 创建cookie 保存数据 发送cookie
cookie的读取
* request.getCookies();
* getName();获取cookie的名字
* getValue();获取cookie的值
cookie的生命周期
-1 cookie存活在浏览器的缓存中
0 cookie设置的时间 getMaxAge()获取值-1,因为浏览器发送cookie没有将时间再次发送到浏览器
=0 删除cookie
cookie 特点
* cookie大小有限制 不能超过4K
* cookie只能保存字符串
* cookie不能直接保存中文
* cookie可以被修改
* 浏览器可以禁止cookie
* cookie有路径的限制 案例:servlet05_04
读取cookie的servlet所在的路径,必须是写入cookie的servlet路径的子路径或相同路径
模拟真实案例:
模拟自动登录 案例:servlet05_05
7.4、状态管理 Session
Session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。
注:它的生命周期为浏览器不关闭或时间没到(默认时间为30分钟),
response.sendRedirect(“ListServlet”);//重定向可以传session中的值,不能传request中的值。
常用方法:
1 session.setMaxInactiveInterval(2);//设置过期时间,单位为秒,默认是30分钟
2 void invalidate() 取消SESSION,使SESSION不可用
3boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入
4 long getCreationTime() 返回SESSION创建时间
5 public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号
6 long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间
7 int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms)
8 getAttribute(String name) 返回指定属性的属性值
9 void setAttribute(String key,Object obj) 设置属性的属性值
session是运行在服务器端较案例,
注意:session的生命周期较长,一般开发中不宜使用过多存储
注:程序中session都有一个默认的过期时间,其中tomcat中的默认时间为30分钟,根据需要我们可以去手动设置session的过期时间,以下是设置session的过期时间的三个方法:
1.在tomcat–>conf–>conf/web.xm中的中设置:
30
2.在项目的web.xml中定义:
20
3.在程序中定义:
session.setMaxInactiveInterval(30*60);
设置单位为秒,设置为-1永不过期
Cookie和Session区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
8.1 request对象
1、客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例
2、request常用方法
方 法 说 明
1 Object getAttribute(String name) 返回指定属性的属性值
2 String getCharacterEncoding() 返回字符编码方式
3 getRequestDispatcher转发
request.getRequestDispatcher(“t1.jsp”).forward(request, response);
4 String getParameter(String name) 返回name指定参数的参数值
5 String[] getParameterValues(String name) 返回包含参数name的所有值的数组
6 String getProtocol() 返回请求用的协议类型及版本号
7 String getServerName() 返回接受请求的服务器主机名
8 int getServerPort() 返回服务器接受此请求所用的端口号
9 String getRemoteAddr() 返回发送此请求的客户端IP地址
10 String getRemoteHost() 返回发送此请求的客户端主机名
11 void setAttribute(String key,Object obj) 设置属性的属性值
12 String getContentType() 得到请求体的MIME类型
欢迎:<%=request.getAttribute("name") %>
请求方式:<%=request.getMethod()%>
请求的资源:<%=request.getRequestURI()%>
请求用的协议:<%=request.getProtocol()%>
请求的文件名:<%=request.getServletPath()%>
请求的服务器的IP:<%=request.getServerName()%>
请求服务器的端口:<%=request.getServerPort()%>
客户端IP地址:<%=request.getRemoteAddr()%>
客户端主机名:<%=request.getRemoteHost()%>
8.2 response对象
response对象:对应客户端的响应—》HttpServletResponse
setContentType、sendRedirect
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
序号 返回值 方 法 说 明
1 String getCharacterEncoding() 返回响应用的是何种字符编码
2 ServletOutputStream getOutputStream() 返回响应的一个二进制输出流
3 PrintWriter getWriter() 返回可以向客户端输出字符的一个对象
4 void setContentLength(int len) 设置响应头长度
5 void setContentType(String type) 设置响应的MIME类型
6 sendRedirect(java.lang.String location) 重新定向客户端的请求
8.3 out对象
out对象:向客户端输出信息
print() 和println()输出信息
注:servlet中使用方法:
PrintWriter out = response.getWriter();//在servlet中使用out对象:out.print(“”);
out对象是JspWriter类的实例,是向客户端输出内容常用的对象
序号 方 法 说 明
1 void clear() 清除缓冲区的内容
2 void clearBuffer() 清除缓冲区的当前内容
3 void flush() 清空流
4 int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0
5 int getRemaining() 返回缓冲区还剩余多少可用
6 boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
7 void close() 关闭输出流
8 print() 和println()输出信息 print()和write()可以互相替代
8.4 session 对象
session 对象:对象指的是客户端与服务器的一次会话
注:它的生命周期为浏览器不关闭或时间没到(默认时间为30分钟)
如果在servlet中使用:
HttpSession session = request.getSession();
设置session有效时间
(1)、session.setMaxInactiveInterval(2);//设置过期时间,单位为秒,默认是30分钟,设置为-1永不过期
(2).在tomcat-->conf-->conf/web.xm中的中设置:
30
(3)在项目的web.xml中定义:
30
invalidate() 取消SESSION,使SESSION不可用
isNew() 判断session是否是新的,常用强制登录
getAttribute setAttribute
常用方法:
(1) session.setMaxInactiveInterval(2);//设置过期时间,单位为秒,默认是30分钟
(2) void invalidate() 取消/销毁SESSION,使SESSION不可用
(3) boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入
(4) long getCreationTime() 返回SESSION创建时间
(5) public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号
(6) long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间
(7) int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms)
(8) getAttribute(String name) 返回指定属性的属性值
(9) void setAttribute(String key,Object obj) 设置属性的属性值
session是运行在服务器端的案例,
注意:session的生命周期较长,一般开发中不宜使用过多存储
8.5 application对象
application对象:用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭
如果在servlet中使用:application对象就是ServletContext
常用方法:getAttribute setAttribute
application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在
方 法 说 明,通常用于开发计算器
1 Object getAttribute(String name) 返回给定名的属性值
2 void setAttribute(String name,Object obj) 设定属性的属性值
3 void removeAttribute(String name) 删除一属性及其属性值
4 String getServerInfo() 返回JSP(SERVLET)引擎名及版本号
5 String getRealPath(String path) 返回一虚拟路径的真实路径
6 ServletContext getContext(String uripath) 返回指定WebApplication的application对象
7 int getMajorVersion() 返回服务器支持的Servlet API的最大版本号
8 int getMinorVersion() 返回服务器支持的Servlet API的最大版本号
9 String getMimeType(String file) 返回指定文件的MIME类型
10 URL getResource(String path) 返回指定资源(文件及目录)的URL路径
8.6 exception对象
exception对象:异常
exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。是java.lang.Throwable对象。
案例:page.jsp
<%@ page language=”java” contentType=”text/html;charset=gb2312” errorPage=”ExceptionDemo.jsp”%>
1 解决方法
<% @ page contentType = ” text/html;charset=utf-8 ” %>
2 response.setCharacterEncoding(“utf-8”);//响应编码类型
response.setContentType(“text/html;charset=utf-8”);//设置文档类型
request.setCharacterEncoding(“utf-8”);//请求编码类型
3 new String(request.getParameter(“name”).getBytes(“ISO8859_1”),”utf-8”);
4 修改tomcat的server.xml
作用:把某些信息过滤掉
1、滤器可以做什么?
(1) 对请求进行统一编码—》乱码处理功能
(2) 对请求进行认证—》强制登录
(3)过滤非法字符—》非法字段
2、实现方式
一、实现 Filter 接口
案例1:过滤乱码
//重写doFilter方法
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) arg0;//转为HttpServletRequest
HttpServletResponse response=(HttpServletResponse) arg1;//转为HttpServletResponse
request.setCharacterEncoding(“utf-8”);//请求编码
response.setCharacterEncoding(“utf-8”);//响应编码
response.setContentType(“text/html;charset=utf-8”);//设置响应编码类型
arg2.doFilter(request, response);//条件成立则放行
}
Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
二、配置web.xml
q1
com.xdl.filter.FilterEncoding
q1
/*
三、案例2:过滤非法字符
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) arg0;
HttpServletResponse response=(HttpServletResponse) arg1;
String jl = request.getParameter(“jl”);//取 :简历中的内容
// if(jl!=null&&(jl.contains(“小日本”)||jl.contains(“坏蛋”))){
// response.sendRedirect(“filter.jsp”);
// }else{
// arg2.doFilter(request, response);//放行
// }
PersonDaoImpl db=new PersonDaoImpl();//实例化数据库
List findSpeak = db.findSpeak();//找出扎有表中speka字段的信息
boolean flag=false;
for(String ss:findSpeak){
if(jl.contains(ss)){//找到此信息,则为非法,然后就把flag设置为 true
flag=true;
}
}
if(jl!=null&&flag){
System.out.println("重点关注此人:"+request.getRemoteAddr());
response.sendRedirect("filter.jsp");
}else{
arg2.doFilter(request, response);//放行
}
}
web.xml配置
q2
com.xdl.filter.FilterSpeak
q2
/SaveServlet
四、案例3:强制登录
//@WebFilter("/ListServlet")也可以通过全注解方式实现过滤器,只过滤ListServlet 如果用/*则全过滤 ,此时web.xml不用配置
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) arg0;
HttpServletResponse response=(HttpServletResponse) arg1;
HttpSession session = request.getSession();
String username = (String) session.getAttribute(“usename”);
if(username==null){
response.sendRedirect(request.getContextPath()+”/index.jsp”);//去登录
}else{
arg2.doFilter(request, response);//通过后,放行
}
}
Servlet监听器也叫做 listener,通过它可以监听Web应用的上下文(环境)信息、Servlet请求信息、Servlet会话信息,并自动根据不同情况,在后台调用相 应的处理程序。通过监听器,可以自动激发一些操作
public class Listener1 implements HttpSessionListener, ServletContextListener,
ServletRequestListener {
……}
//配置 web.xml;
com.xdl.listener.Listener1
参考链接: https://blog.csdn.net/lisheng19870305/article/details/71107407
1 区别
假定你的web application 名称为news,你在浏览器中输入请求路径:
http://localhost:8080/news/main/list.jsp
1.1 System.out.println(request.getContextPath()); 项目名
打印结果:/news
1.2 System.out.println(request.getServletPath()); 路径名(不含项目名)
打印结果:/main/list.jsp
1.3 System.out.println(request.getRequestURI()); 含项目路径名
打印结果:/news/main/list.jsp
1.4 System.out.println(request.getRequestURL()); URL全地址
打印结果:http://localhost:8080/news/main/list.jsp
1.5 System.out.println(request.getRealPath("/")); 本地路径
打印结果:F:\Tomcat 6.0\webapps\news\test
参考链接: https://blog.csdn.net/happyflyingave/article/details/8045447
1、session:
session.setAttribute()和session.getAttribute()配对使用,
作用域:整个会话期间,在所有的页面都使用这些数据的时候使用。
获取参数:JSP页面 EL表达式 "${属性名KEY}"
2.request.setAttribute
request.setAttribute()和request.getAttribute()配对使用,
作用域: 请求和被请求页面之间。
获取参数:JSP页面 EL表达式 "${属性名KEY}"
request.setAttribute()是只在此action的下一个forward需要使用的时候使用;request.getAttribute()表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型。其实表单控件中的Object的name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。setAttribute()的参数是String和Object。
3.request.getParameter
用途:request.getParameter()用于接收前端页面提交参数。包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等。
因此这个并没有设置参数的方法(没有setParameter()),而且接收参数返回的不是Object,而是String类型。
4.request.getParameter() 和request.getAttribute() 区别
(1)request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
(2)request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。即request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。
还有一点就是,HttpServletRequest类有setAttribute()方法,而没有setParameter()方法。
另外,可以用setAttribute,getAttribute发送接收对象。而getParameter显然只能传字符串。setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。
并且,getParameter 返回的是String,用于读取提交的表单中的值;getAttribute 返回的是Object,需进行转换,可用setAttribute设置成任意对象,使用很灵活,可随时用;