尚硅谷JavaWEB基础教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1jW411u7PZ
一、JavaWeb应用概述• 在Sun的Java Servlet规范中,对Java Web应用作了这样定义:Java Web应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。
• Java Web应用中可以包含如下内容:
– Servlet
– JSP
– 实用类
– 静态文档如HTML、图片等
– 描述Web应用的信息(web.xml)
Web 程序结构 – 一个 web 应用程序是由一组 Servlet,HTML 页面,类,以及其它的资源组成的运行在 web 服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在
– 组成 web 应用程序的这些文件要部署在相应的目录层次中,根目录代表整个 web 应用程序的根
– 通常将 web 应用程序的目录放在Tomcat的 webapps 目录下,在 webapps 目录下的每一个子目录都是一个独立的 web 应用程序,子目录的名字就是 web 应用程序的名字,也就是 web 应用程序的根。用户通过 web 应用程序的根来访问 web 应用程序中的资源
Web 应用程序的目录解析• 说明:
– WEB-INF目录下的classes和lib目录都可以存放Java的类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录下存在同名的类,起作用的将是classes目录下的类
–WEB-INF 是一个特殊的目录(所有字母都要大写)。这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。但该目录下的内容对于Servlet代码是可见的
配置任意目录下的Web应用1• 在Web服务器中可以配置虚拟目录,而虚拟目录所对应的真实目录可以在任何路径下。
• 在Tomcat服务器中,主要在XML配置文件中通过
•
• 使用docbase属性指定Web应用程序的真实路径。将属性reloadable设置为true,Tomcat在运行时会自动监测Servlet类的改动,如果发现有类被更新,Tomcat服务器将自动重新加载该Web应用程序。这样,在开发时,就不需要频繁重启Tomcat了
配置任意目录下的Web应用2 二、Servlet容器和Servlet 1.Servlet容器的概念 – Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据。
– Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器。
Servlet容器响应客户请求的过程 Servlet 容器目前最流行的Servlet容器软件包括:
– Tomcat
– Resin
– J2EE服务器(如Weblogic)中也提供了内置的Servlet容器
Tomcat 简介 – Tomcat 是一个免费的开放源代码的 Servlet 容器,它是 Apache 软件基金会的一个顶级项目,由 Apache,Sun和其他一些公司及个人共同开发而成。由于有了 Sun 的参与与支持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现。
Tomcat 的目录结构 运行 Tomcat – 1. 配置java_home或 jre_home
– 2. 双击 bin 目录下的 startup.bat 文件,或cmd窗口输入startup run(在已配置环境变量的情况下)
– 3. 在地址栏中输入 http://localhost:8080/
当出现如下标识即为成功:
关闭 Tomcat & 配置 Tomcat 的端口号• 1.双击 bin 目录下的shutdown.bat 文件关闭 Tomcat 服务器
• 2. 修改 Tomcat 默认的端口号:
– 打开 conf 目录下的 server.xml 文件
– 修改端口号
Tomcat 启动分析1 Tomcat 启动分析2• 若想在任意目录下都能启动 Tomcat,则需设置 CATALINA_HOME 环境变量
• 直接执行 catalina.bat 时需要带上命令行参数,常用的参数是start,run 和 stop
Tomcat启动时乱码解决 Tomcat 的管理程序:manager – Tomcat 提供了一个管理程序:manager,用于管理部署到 Tomcat 服务器中的 web 应用程序
– 要访问 manager web 应用程序,需要添加具有管理员权限的账号,编辑 conf 目录下的 tomcat-users.xml 文件,添加 manager 角色,设置用户名和密码
2.Servlet 简介• Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,
Servlet和客户的通信采用“请求/响应”的模式。
• Servlet可完成如下功能:
– 创建并返回基于客户请求的动态HTML页面。
– 创建可嵌入到现有HTML 页面中的部分HTML 页面(HTML 片段)。
– 与其它服务器资源(如数据库或基于Java的应用程序)进行通信。
ServletAPIServlet容器响应客户请求的过程
①Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
②装载并创建该Servlet的一个实例对象:调用该 Servlet 的构造器
③调用Servlet实例对象的init()方法。
④创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
Servlet的注册与运行• Servlet程序必须通过Servlet容器来启动运行并且储存目录有特殊要求,通常需要存储在
• Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。
• 一个
• 一个
• 同一个Servlet可以被映射到多个URL上,即多个
• 在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:一种格式是.扩展名,另一种格式是以正斜杠(/)开头并以 public class UserServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("C"); String userid=req.getParameter("userid"); String pwd=req.getParameter("pwd"); if("admin".equals(userid)&&"123".equals(pwd)){ resp.sendRedirect(req.getContextPath()+"/index.jsp"); }else{ resp.sendRedirect(req.getContextPath()+"/login.jsp"); } } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("B"); super.service(req, resp); } @Override public void init() throws ServletException { System.out.println("A"); super.init(); } 常用的发起请求的方式:get请求和post请求 1.get请求的发起方式 通常采用超链接标签发起一个get请求,语法格式如下: 发起get请求 2.post请求的发起方式 通常采用表单标签,显式设置表单标签中method的值为post来发起一个post请求,注意表单标签默认的请求方式为get,语法格式是:
重写doGet或者doPost方法的目的。
具体业务逻辑的处理,重写doGet或者doPost方法中一般的编码步骤为:
(1)接收参数
(2)具体业务逻辑的实现(这一部分通常由实现逻辑处理的java程序片段构成)
(3)跳转页面。
//1:接收参数,注意不是使用jsp内置对象request来接收参数,
//用doGet||doPost方法的方法参数 HttpServletRquest类型的请求对象名称[x]。
String userid=x.getParameter("userid");//用户名
String password=x.getParameter("pwd"); //密码
//2:登录验证处理
boolean flag="admin".equals(userid)&&"123".equals(password);
if(flag){
//3:跳转(重定向)
resp.sendRedirect("index.jsp");
}else{
//3:跳转(转发)
//获得指定路径的转发对象
RequestDispatcher rd=x.getRequestDispatcher("login.jsp");
//调用转发对象的xx方法跳转
rd.forward(x,resp);
}
配置Servlet
三、HTTP协议简介注意: 在web.xml配置userServlet,由web容器加载并实例化对应的对象,该对象是单例的。 web容器实例化userServlet对象的过程,等价于UserServlet userServlet=new UserServlet()。 attends_javabean_56 userServlet com.gxuwz.attends.servlet.UserServlet userServlet /system/userServlet login.jsp
• WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。
• HTTP是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。
• HTTP协议的版本 HTTP/1.0、HTTP/1.1、HTTP-NG
1.HTTP 的会话方式• 四个步骤:
– 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
– 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
2.浏览器访问多图网页的过程 3.HTTP请求消息请求消息的结构:
一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
4.HTTP响应消息响应消息的结构:
一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
5.HTTP消息—>其他细节• 响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。
• 一个使用GET方式的请求消息中不能包含实体内容,只有使用POST、PUT和DELETe方式的请求消息中才可以包含实体内容。
使用GET和POST方式传递参数• 在URL地址后面可以附加一些参数
举例:http://www.it315.org/servlet/ParamsServlet?param1=abc¶m2=xyz
• GET方式
举例:GET /servlet/ParamsServlet?param1=abc¶m2=xyz HTTP/1.1
特点:传送的数据量是有限制的,一般限制在1KB以下。
• POST方式
举例:
POST /servlet/ParamsServlet HTTP/1.1 Host: Content-Type: application/x-www-form-urlencoded Content-Length: 28 //空一行 param1=abc¶m2=xyz
特点:传送的数据量要比GET方式传送的数据量大得多 。
使用GET方式传递参数• 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。
• 如果网页中的



