<!--
URL:统一资源定位符,请求的是服务器上的资源。资源是一个抽象的概念,指存放在服务器上的能够被客户端访问到的所有类型的文件(比如:文本、图片、音频、视频等)。
比如: http://www.itu.org/home/index.html
首先 浏览器向 DNS 服务器询问 www.baidu.com 的服务器ip
等待 DNS 回复 ip 为 156.106.192.163
浏览器与 156.106.192.163 的8080 端口 创建一个 TCP 连接
浏览器发送一个请求,要求获取文件 /home/index.html
服务器发送 页面到浏览器
TCP 连接被释放了 并且浏览器显示出 /home/index.html 的页面
Http 访问服务器的方式:
1:URL 地址
2:表单提交
-->
<form name="formManage" method="get" action="login.jsp">
<font size="3",color="990000">
<label>用户名</label>
<input type="text" name="UserName"><br>
<label>密 码</label>
<input type="password" name="PassWord"><br>
<input type="submit" value="登陆"/> <!-- 点击登陆后,会自动跳转到 login.jsp 这个页面 -->
</font>
</form>
<!--
相当于 http://localhost:8080/myapp/login.jsp?UserName=tom
3: get 和 post 区别
get 方法 通过URL 来传值, 如上面所示,用户在地址栏可见,如果是传递密码的话不安全,而且通过 url 传值 不能超过 255个字符
post 通过 请求的body 传递参数 ,用户在客户端不可见,比较安全并且没有长度限制
web 容器
具体的 web 程序执行的环境,一般由服务器程序实现
主要功能:1:生成并管理相关对象,供servlet 使用
2: 管理servlet 生命周期,提供其运行环境
3:充当 web 服务器和 servlet 之间的桥梁 --将请求从web 服务器转发到servlet 将响应从servlet 转发到web服务器
servlet
1:服务端的java 程序 可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,
该Web服务器必须包含支持Servlet的Java虚拟机
2: servlet 中,修改 web.xml servlet 类 都需要重启服务器
3:创建对象和生命周期
对象: servlet 是java程序,必须有对象,这个对象由读取web.xml 服务器来创建
创建时间: 1- 服务器启动,检测web.xml 看到 <servlet-class> 自动创建对象放入内存
2- 用户第一次访问一个服务器上的新的servlet时创建 一共两次
生命周期:servlet 对象从服务器创建到内容,然后调用,最后销毁的过程
1 实例化:档客户端通过URL 请求的时候,web服务器 根据 web.xml 来自动调用该 servlet 的构造方法,实例化对象
2 初始化:通过该servlet 对象 调用 init() 方法,读取web.xml 中该servlet 配置信息为service() 方法提供数据
3 服务: 通过该对象调用 service() 方法,如果继承HttpServlet 根据请求头信息中的请求方法来调用 doGet() 或 doPost()
4 销毁: 并非在service() 方法调用后销毁,而是由 JVM 来决定
4: servlet 中的 常用对象
4.1 Interface:javax.servlet.Servlet
init(ServletConfig config)
service(ServletRequest req,ServletResponse res)
destroy()
public ServletConfig getServletConfig();//得到 web.xml 中的配置信息
4.2 abstract Class:
1:javax.servlet.GenericServlet //重写父接口中的所有方法
2:HttpServlet: doXXXX()
4.3 HttpServletRequest 实现了ServletRequest接口 **********************************比较重要
用户请求的资源 用户提交的数据 均可以获得
还可以获得session 对象 request.getSession();
可以修改编码 request.setCharacterEncoding("gb2312");
http://localhost:8080/servlet/index.jsp
http: request.getScheme();
localhost: request.getServerName();
8080: request.getServerPort();
/servlet: request.getContextPath();
/index.jsp request.getServletPath();
/servlet/index.jsp: request.getRequestURI();
完整请求路径: request.getRequestURL();
IP 地址: request.getLocalAddr();
获得用户的数据信息: request.getParameter("name") // 获取名为 name 的参数值
request.getParameterValue("name") // 获得同名 name 的一组参数值 返回为 String[] -->
<form name="formManage" method="post" action="loginAction" >
姓名 <input type="text" name="name"><br>
爱好 <input type="checkbox" name="favor" value="1"/>听音乐
<input type="checkbox" name="favor" value="2"/>打篮球
<input type="checkbox" name="favor" value="3"/>跑步
<br>
<input type="submit" value="登陆"/>
</form>
<!-- 在上面的action 中 request.getParameter("name") 获得用户输入的姓名
request.getParameterValues("favor") 获得用户的所有爱好
4.4 HttpServletResponse 实现了servletResponse 接口
------- 代表服务器向浏览器返回的响应直接输出内容到浏览器 使用Servlet输出HTML页面
PrintWriter out = response.getWriter();
out.print("Hello :");
首先设置响应头部 response.setContentType("text/html; charset=UTF-8"); // 设置响应内容的类型
获得输出对象: PrintWriter out = response.getWriter(); // 文本
ServletOutputStream out = response.getOutputStream() // 二进制
构造输出内容:out.println(" ... ");
提交输出: out.flush()
关闭 out
例如: response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE> 我的servlet </TITLE></HEAD>");
out.println(<BODY> hello world </BODY>);
out.println("/HTML");
out.flush();
out.close();
HTML 状态码: 100-199:临时状态码
200-299:请求成功
300-399:重定向
400-499:客户端错误
500-599:服务器端错误
设置状态码:response.setStatus(int id);
发送错误信息:response.setError(404,"您所查找的网页不存在");
重定向: 两个功能 - 1:设置状态码 设置响应头 response.setHeader("Location","http://www.baidu.com")
2: 跳转页面 response.sendRedirect("http://www.baidu.com");
注意:使用 response 跳转可以跳转到项目外的 URL 资源
使用 request 跳转 只能在本项目资源中跳转
request.getRequestDispatcher(“url”).forward(request,response);
页面缓存:
response.setHeader("Cache-control","no-cache"); 不需要缓存
response.setHeader("pragma","no-cache")
response.setIntHeader("Refresh",10) 页面每隔10秒刷新一次
response.setCharacterEncoding("UTF-8");不管什么沙子,全部运到后,再用机器筛成需要的大小
request.setCharacterEncoding("UTF-8"); 先按照要求,筛好后运到工地
4.5 javax.servlet.RequestDispatcher --对请求响应进行补充的一个接口 request.getRequestDispatcher() 获得
主要有两个功能: 1: 跳转
disp.forward(ServletRequest,ServletResponse);
例如:request.getRequestDispatcher("login_ok.jsp").forward(request,response);
2:包含
disp.include(ServletRequest,ServletResponse);
4.6 Cookie : 保留在浏览器的一部分数据 可以被包含在请求对象中传递给服务器
Set-Cookie:CustomerID=1234;domain=abc.com;path=/sales
新建 Cookie: Cookie cik = new Cookie("name",value);
cik.setMaxAge(秒); //设置cookie的生存期 不设置或者设置为0,则此cookie是瞬时的
cik.setPath("/test/test2");
response.addCookie(cik); //设置 Cookie,在响应中加入cookie
读取Cookie :Cookie[] cks = request.getCookies()
for(int i=0;i<cks.length;i++){
Cookie temp = cks[i];
if("name".equals(temp.getName())){
String value = temp.getValue();
}
}
删除 cookie: ck.setMaxAge(0); 但是 --- 能够保存的数据很少,字符格式,不超过4kb;受浏览器本身影响,不一定能够一直有效
4.7 HttpSession: 是在服务器端保存数据最常见的方式 只能保存 object 类型
session 会话: 一段活动时间内,该对象可以完成一定的操作 范围仅限于当前应用程序 -- ServletContext
所以存储在一个上下文中的数据在另一个上下文不是可见的。
作用: (1)帮助服务器,识别不同的浏览器
(2)帮助服务器传递数据到不同的Servlet或JSP页面
(3)能够人工控制连续的时间段的长短。
常用方法: 1 创建 HttpSession session = request.getSession(true); // 这里为false 是从已有session中取一个
HttpSession session = request.getSession(); 没有要求,服务器自动创建
2 浏览器识别: 需要id来匹配-- String id = session.getId();
3 传递数据 session.setAttribute("name",Object); // 数据存入session
Object obj = session.getAttribute("name"); 在其他servlet 或 jsp 页面取出数据
4 设置有效时间 默认为 30分钟
session.setMaxInactiveInterval(60*60*24秒); //设置单个session对象的最长有效时间
<session-config>
<session-timeout>20000</session-timeout> //设置整个工程中所有session的有效时间
</session-config>
5 清除数据 session.removeAttribute("name");
6 设置session 失效 session.invalidate();
----session 最好的作用就是 存储数据 --------
4.8 ServletContext 定义了一个servlet环境对象 提供了访问web 程序背景信息 相当于 jsp 的 application
ServletContext对象能够访问web项目的初始化参数、存储在ServletContext中的对象、web项目中的资源文件、日志;
ServletContext就是Servlet容器,提供的方法可以在同一个web应用下的所有Servlet中使用
4.9 ServletConfig
ServletConfig封装了web.xml文件中的配置信息,可以在每个servlet的初始化方法中得到并且使用该对象。
注意: 一个 ServletConfig 对象 只能在一个 servlet 中使用
过滤器 filter
1 过滤器:是一个可插拔的Web组件,从Servlet 2.3之后出现,提供了一个接口,用于开发Servlet中的过滤器---Filter,是一个独立的程序,
由一段Java代码和一段配置信息组成。通过不同规格的滤网,在过滤过程中,这些滤网可以组合使用。我们在 Servlet 中,可以通过实现Filter接口,
创建不同规格的滤网,再通过web.xml文件配置,把上述多个过滤器组合在一起
与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序档案中。但是与其他web应用程序组件不同的是,
过滤器是“链”在容器的处理过程中。这就意味着它们会在Servlet处理器之前访问一个进入的请求,并且在触发的响应信息返回到客户端前访问这些响应信息,
这种访问使得过滤器可以检查并修改请求和响应的内容
2 生命周期
(1)实例化:由Tomcat调用过滤器类的构造方法,创建对象在服务器启动时创建
(2)初始化:由Tomcat调用过滤器对象中的init(XXXXConfig)
(3)过滤:由Tomcat调用doFilter(request,response)
(4)销毁:destroy()
3 创建过程
(1)创建普通类,实现javax.servlet.Filter接口
(2)在doFilter()方法中截取request/response对象,进行请求或响应的过滤
(3)在web.xml文件中进行配置,使它能够在整个web工程中生效。剩下的都交给服务器。
4 过滤配置
(1)过滤服务器上所有的资源
<filter-mapping>
<filter-name>charSet</filter-name>
<url-pattern>/*</url-pattern> *.jsp--所有 jsp 页面 /folder/*--指定目录
</filter-mapping>
(2)过滤指定servlet
<filter-mapping>
<filter-name>loginFilter</filter-name>
<servlet-name>loginServlet</servlet-name>
</filter-mapping>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
5 过滤器的通用功能
⑴拦截请求头:安全认证、日志
⑵数据转换:加密、解密
⑶抢占特殊资源的服务:缓存
⑥filter的接口
⑴javax.servlet.Filter
⑵javax.servlet.FilterChain
⑶javax.servlet.FilterConfig
⑦过滤字符编码的实例代码
-->
URL:统一资源定位符,请求的是服务器上的资源。资源是一个抽象的概念,指存放在服务器上的能够被客户端访问到的所有类型的文件(比如:文本、图片、音频、视频等)。
比如: http://www.itu.org/home/index.html
首先 浏览器向 DNS 服务器询问 www.baidu.com 的服务器ip
等待 DNS 回复 ip 为 156.106.192.163
浏览器与 156.106.192.163 的8080 端口 创建一个 TCP 连接
浏览器发送一个请求,要求获取文件 /home/index.html
服务器发送 页面到浏览器
TCP 连接被释放了 并且浏览器显示出 /home/index.html 的页面
Http 访问服务器的方式:
1:URL 地址
2:表单提交
-->
<form name="formManage" method="get" action="login.jsp">
<font size="3",color="990000">
<label>用户名</label>
<input type="text" name="UserName"><br>
<label>密 码</label>
<input type="password" name="PassWord"><br>
<input type="submit" value="登陆"/> <!-- 点击登陆后,会自动跳转到 login.jsp 这个页面 -->
</font>
</form>
<!--
相当于 http://localhost:8080/myapp/login.jsp?UserName=tom
3: get 和 post 区别
get 方法 通过URL 来传值, 如上面所示,用户在地址栏可见,如果是传递密码的话不安全,而且通过 url 传值 不能超过 255个字符
post 通过 请求的body 传递参数 ,用户在客户端不可见,比较安全并且没有长度限制
web 容器
具体的 web 程序执行的环境,一般由服务器程序实现
主要功能:1:生成并管理相关对象,供servlet 使用
2: 管理servlet 生命周期,提供其运行环境
3:充当 web 服务器和 servlet 之间的桥梁 --将请求从web 服务器转发到servlet 将响应从servlet 转发到web服务器
servlet
1:服务端的java 程序 可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,
该Web服务器必须包含支持Servlet的Java虚拟机
2: servlet 中,修改 web.xml servlet 类 都需要重启服务器
3:创建对象和生命周期
对象: servlet 是java程序,必须有对象,这个对象由读取web.xml 服务器来创建
创建时间: 1- 服务器启动,检测web.xml 看到 <servlet-class> 自动创建对象放入内存
2- 用户第一次访问一个服务器上的新的servlet时创建 一共两次
生命周期:servlet 对象从服务器创建到内容,然后调用,最后销毁的过程
1 实例化:档客户端通过URL 请求的时候,web服务器 根据 web.xml 来自动调用该 servlet 的构造方法,实例化对象
2 初始化:通过该servlet 对象 调用 init() 方法,读取web.xml 中该servlet 配置信息为service() 方法提供数据
3 服务: 通过该对象调用 service() 方法,如果继承HttpServlet 根据请求头信息中的请求方法来调用 doGet() 或 doPost()
4 销毁: 并非在service() 方法调用后销毁,而是由 JVM 来决定
4: servlet 中的 常用对象
4.1 Interface:javax.servlet.Servlet
init(ServletConfig config)
service(ServletRequest req,ServletResponse res)
destroy()
public ServletConfig getServletConfig();//得到 web.xml 中的配置信息
4.2 abstract Class:
1:javax.servlet.GenericServlet //重写父接口中的所有方法
2:HttpServlet: doXXXX()
4.3 HttpServletRequest 实现了ServletRequest接口 **********************************比较重要
用户请求的资源 用户提交的数据 均可以获得
还可以获得session 对象 request.getSession();
可以修改编码 request.setCharacterEncoding("gb2312");
http://localhost:8080/servlet/index.jsp
http: request.getScheme();
localhost: request.getServerName();
8080: request.getServerPort();
/servlet: request.getContextPath();
/index.jsp request.getServletPath();
/servlet/index.jsp: request.getRequestURI();
完整请求路径: request.getRequestURL();
IP 地址: request.getLocalAddr();
获得用户的数据信息: request.getParameter("name") // 获取名为 name 的参数值
request.getParameterValue("name") // 获得同名 name 的一组参数值 返回为 String[] -->
<form name="formManage" method="post" action="loginAction" >
姓名 <input type="text" name="name"><br>
爱好 <input type="checkbox" name="favor" value="1"/>听音乐
<input type="checkbox" name="favor" value="2"/>打篮球
<input type="checkbox" name="favor" value="3"/>跑步
<br>
<input type="submit" value="登陆"/>
</form>
<!-- 在上面的action 中 request.getParameter("name") 获得用户输入的姓名
request.getParameterValues("favor") 获得用户的所有爱好
4.4 HttpServletResponse 实现了servletResponse 接口
------- 代表服务器向浏览器返回的响应直接输出内容到浏览器 使用Servlet输出HTML页面
PrintWriter out = response.getWriter();
out.print("Hello :");
首先设置响应头部 response.setContentType("text/html; charset=UTF-8"); // 设置响应内容的类型
获得输出对象: PrintWriter out = response.getWriter(); // 文本
ServletOutputStream out = response.getOutputStream() // 二进制
构造输出内容:out.println(" ... ");
提交输出: out.flush()
关闭 out
例如: response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE> 我的servlet </TITLE></HEAD>");
out.println(<BODY> hello world </BODY>);
out.println("/HTML");
out.flush();
out.close();
HTML 状态码: 100-199:临时状态码
200-299:请求成功
300-399:重定向
400-499:客户端错误
500-599:服务器端错误
设置状态码:response.setStatus(int id);
发送错误信息:response.setError(404,"您所查找的网页不存在");
重定向: 两个功能 - 1:设置状态码 设置响应头 response.setHeader("Location","http://www.baidu.com")
2: 跳转页面 response.sendRedirect("http://www.baidu.com");
注意:使用 response 跳转可以跳转到项目外的 URL 资源
使用 request 跳转 只能在本项目资源中跳转
request.getRequestDispatcher(“url”).forward(request,response);
页面缓存:
response.setHeader("Cache-control","no-cache"); 不需要缓存
response.setHeader("pragma","no-cache")
response.setIntHeader("Refresh",10) 页面每隔10秒刷新一次
response.setCharacterEncoding("UTF-8");不管什么沙子,全部运到后,再用机器筛成需要的大小
request.setCharacterEncoding("UTF-8"); 先按照要求,筛好后运到工地
4.5 javax.servlet.RequestDispatcher --对请求响应进行补充的一个接口 request.getRequestDispatcher() 获得
主要有两个功能: 1: 跳转
disp.forward(ServletRequest,ServletResponse);
例如:request.getRequestDispatcher("login_ok.jsp").forward(request,response);
2:包含
disp.include(ServletRequest,ServletResponse);
4.6 Cookie : 保留在浏览器的一部分数据 可以被包含在请求对象中传递给服务器
Set-Cookie:CustomerID=1234;domain=abc.com;path=/sales
新建 Cookie: Cookie cik = new Cookie("name",value);
cik.setMaxAge(秒); //设置cookie的生存期 不设置或者设置为0,则此cookie是瞬时的
cik.setPath("/test/test2");
response.addCookie(cik); //设置 Cookie,在响应中加入cookie
读取Cookie :Cookie[] cks = request.getCookies()
for(int i=0;i<cks.length;i++){
Cookie temp = cks[i];
if("name".equals(temp.getName())){
String value = temp.getValue();
}
}
删除 cookie: ck.setMaxAge(0); 但是 --- 能够保存的数据很少,字符格式,不超过4kb;受浏览器本身影响,不一定能够一直有效
4.7 HttpSession: 是在服务器端保存数据最常见的方式 只能保存 object 类型
session 会话: 一段活动时间内,该对象可以完成一定的操作 范围仅限于当前应用程序 -- ServletContext
所以存储在一个上下文中的数据在另一个上下文不是可见的。
作用: (1)帮助服务器,识别不同的浏览器
(2)帮助服务器传递数据到不同的Servlet或JSP页面
(3)能够人工控制连续的时间段的长短。
常用方法: 1 创建 HttpSession session = request.getSession(true); // 这里为false 是从已有session中取一个
HttpSession session = request.getSession(); 没有要求,服务器自动创建
2 浏览器识别: 需要id来匹配-- String id = session.getId();
3 传递数据 session.setAttribute("name",Object); // 数据存入session
Object obj = session.getAttribute("name"); 在其他servlet 或 jsp 页面取出数据
4 设置有效时间 默认为 30分钟
session.setMaxInactiveInterval(60*60*24秒); //设置单个session对象的最长有效时间
<session-config>
<session-timeout>20000</session-timeout> //设置整个工程中所有session的有效时间
</session-config>
5 清除数据 session.removeAttribute("name");
6 设置session 失效 session.invalidate();
----session 最好的作用就是 存储数据 --------
4.8 ServletContext 定义了一个servlet环境对象 提供了访问web 程序背景信息 相当于 jsp 的 application
ServletContext对象能够访问web项目的初始化参数、存储在ServletContext中的对象、web项目中的资源文件、日志;
ServletContext就是Servlet容器,提供的方法可以在同一个web应用下的所有Servlet中使用
4.9 ServletConfig
ServletConfig封装了web.xml文件中的配置信息,可以在每个servlet的初始化方法中得到并且使用该对象。
注意: 一个 ServletConfig 对象 只能在一个 servlet 中使用
过滤器 filter
1 过滤器:是一个可插拔的Web组件,从Servlet 2.3之后出现,提供了一个接口,用于开发Servlet中的过滤器---Filter,是一个独立的程序,
由一段Java代码和一段配置信息组成。通过不同规格的滤网,在过滤过程中,这些滤网可以组合使用。我们在 Servlet 中,可以通过实现Filter接口,
创建不同规格的滤网,再通过web.xml文件配置,把上述多个过滤器组合在一起
与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序档案中。但是与其他web应用程序组件不同的是,
过滤器是“链”在容器的处理过程中。这就意味着它们会在Servlet处理器之前访问一个进入的请求,并且在触发的响应信息返回到客户端前访问这些响应信息,
这种访问使得过滤器可以检查并修改请求和响应的内容
2 生命周期
(1)实例化:由Tomcat调用过滤器类的构造方法,创建对象在服务器启动时创建
(2)初始化:由Tomcat调用过滤器对象中的init(XXXXConfig)
(3)过滤:由Tomcat调用doFilter(request,response)
(4)销毁:destroy()
3 创建过程
(1)创建普通类,实现javax.servlet.Filter接口
(2)在doFilter()方法中截取request/response对象,进行请求或响应的过滤
(3)在web.xml文件中进行配置,使它能够在整个web工程中生效。剩下的都交给服务器。
4 过滤配置
(1)过滤服务器上所有的资源
<filter-mapping>
<filter-name>charSet</filter-name>
<url-pattern>/*</url-pattern> *.jsp--所有 jsp 页面 /folder/*--指定目录
</filter-mapping>
(2)过滤指定servlet
<filter-mapping>
<filter-name>loginFilter</filter-name>
<servlet-name>loginServlet</servlet-name>
</filter-mapping>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
5 过滤器的通用功能
⑴拦截请求头:安全认证、日志
⑵数据转换:加密、解密
⑶抢占特殊资源的服务:缓存
⑥filter的接口
⑴javax.servlet.Filter
⑵javax.servlet.FilterChain
⑶javax.servlet.FilterConfig
⑦过滤字符编码的实例代码
-->