Java web应用入门

write:2022-4-10


学习Java实现的web应用之前,要先明白web应用原理相关知识,链接: web概念和web运行原理
总结一下:Web应用是运行在Web服务器端的应用,由Web服务器来发布和运行,可以完成与桌面应用类似的功能,Web应用可以处理业务逻辑,特点在于用浏览器作为统一的客户端程序,客户端界面一律用HTML语言编写的网页,浏览器端以图形化界面的方式呈现,浏览器与服务器之间用HTTP协议通信;
在这里插入图片描述

1. Java Web应用的概念和组成

在Sun的Java Servlet规范中,对Java Web应用作了这样定义:“JavaWeb应用由一组Servlet/JSP、HTML文件、相关Java类,以及其他可以被绑定的资源构成。它可以在由各种供应商提供的符合Servlet规范的Servlet容器中运行。”
Java Web应用中可以包含如下内容:
Servlet,JSP,实用类,静态文档如HTML、图片等,客户端类(如Applet),描述Web应用的信息(web.xml)

2. Servlet的概念

Servlet是Web应用与Web服务器进行协作的标准接口:
(1)Web服务器可以访问任意一个Web应用中所有实现Servlet接口的类。
(2)Web应用中用于被Web服务器动态调用的程序代码位于Servlet接口的实现类中。
Servlet接口的作用:
在这里插入图片描述
Servlet规范把能够发布和运行JavaWeb应用的Web服务器称为Servlet容器。Servlet容器最主要的特征是能够访问Servlet接口,动态执行JavaWeb应用中的Servlet实现类中的程序代码。

3. Servlet容器的概念

3.1 Servlet容器

Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器。后文均采用Servlet容器的提法。
Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据。
目前最流行的Servlet容器软件包括:Tomcat,Resin,JavaEE服务器(如Weblogic)中也提供了内置的Servlet容器

3.2 Servlet容器响应客户请求的过程

在这里插入图片描述
当客户请求访问某个Servlet时,Servlet容器创建一个ServletRequest对象和ServletResponse对象
在ServletRequest对象中封装了客户请求信息,然后Servlet容器把ServletRequest对象和ServletResponse对象传给客户所请求的Servlet。
Servlet通过ServletResponse对象生成响应结果,然后由Servlet容器把响应结果传给客户。
注意: Servlet容器和Servlet由java语言编写。 Servlet,ServletRequest,ServletResponse都是对象

4. 安装和启动Tomcat服务器的过程

4.1 Tomcat简介

Tomcat是一个优秀的Servlet容器。
Tomcat本身完全用Java语言编写。
Tomcat是Apache开源软件组织的一个软件项目, 大家可以从Tomcat的官方网址(http://tomcat.apache.org)来获取关于
Tomcat的最新信息。
将创建的java web应用发布到Tomcat的webapps目录下,由Tomcat来负责运行
在这里插入图片描述

4.2 Tomcat服务器的结构

Tomcat服务器是由一系列可配置的组件构成,其中核心组件是Catalina Servlet容器,它是所有其它Tomcat组件的顶层容器。Tomcat的组件可以在<CATALINA_HOME>/conf/server.xml文件中进行配置:

<Server>
	 <Service>
		<Connector />
		<Engine>
			<Host>
				<Context>
				</Context>
			</Host>
		</Engine>
	 </Service>
</Server>

四类元素:
1.顶层类元素
顶层类元素包括Server元素和Service元素,它们位于整个配置文件的顶层。
2.连接器类元素
连接器类元素Connector代表了介于客户与服务之间的通信接口,负责将客户的请求发送给服务器,并将服务器的响应结果传递给客户。
3.容器类元素
容器类元素代表处理客户请求并生成响应结果的组件,有三种容器类元素,它们是Engine、Host和Context。 Engine组件为特定的 Service组件处理所有客户请求, Host 组件为特定的虚拟主机处理所有客户请求, Context组件为特定的Web应用处理所有客户请求。
4.嵌套类元素
嵌套类元素代表了可以加入到容器中的组件,如Valve元素和Realm元素。

4.3 Tomcat各个组件之间的协作关系

HTTPS协议:建立在HTTP协议基础上,并采用了安全加密技术的通信协议
在这里插入图片描述
Connector负责接收客户的请求并向客户返回响应结果,在同一个Service中,多个Connector共享同一个Engine。同一个Engine中可以有多个Host,同一个Host中包含多个Context

4.4 安装并运行Tomcat服务器

互联网上有很多教程的,例如:下载安装运行Tomcat

Tomcat的下载地址: http://tomcat.apache.org
安装步骤:
首先安装JDK。
接下来,解压Tomcat压缩文件apache-tomcat-6.x.zip。解压Tomcat的压缩文件的过程就相当于安装的过程。
然后设定两个环境变量:JAVA_HOME,它是JDK的安装目录;CATALINA_HOME,它是Tomcat的安装目录(也可不设置)。
启动命令:<CATALINA_HOME>\bin\startup.bat
关闭命令:<CATALINA_HOME>\bin\shutdown.bat
访问主页:http://localhost:8080/

5. 创建第一个简单的JavaWeb应用

5.1 helloapp应用的目录结构

Servlet规范对JavaWeb应用的目录结构也进行了规定,因为所有web应用都发布到Servlet容器,对目录结构进行规范,才能正确找到web应用的各个组件;
eg:helloapp应用
在这里插入图片描述
/helloapp:Web应用的根目录,所有的JSP和HTML文件存放于此目录
/helloapp/WEB-INF:存放Web应用的发布描述文件web.xml
/helloapp/WEB-INF/classes:存放各种class文件,servlet类文件也放于此目录
/helloapp/WEB-INF/lib:存放Web应用所需的各种JAR文件。例如,在这个目录下,你可以存放JDBC驱动程序的JAR文件
Web应用发布到Tomcat中的目录为:<CATALINA_HOME>\webapps

5.2 创建Web.xml文件

创建一个默认的web.xml文件,并把这个文件放到WEB-INF目录中。

<?xml version="1.0" encoding="ISO-8859-1"?>  //xml语言版本    本文件所使用的字符编码

<!DOCTYPE web-app PUBLIC
  '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
  'http://java.sun.com/j2ee/dtds/web-app_2_3.dtd'>

<web-app>  //根元素
</web-app>

5.3 创建helloapp应用的web组件

在helloapp应用中创建如下组件:
HTML组件 - login.html
JSP组件 - hello.jsp
Servlet组件 - DispatcherServlet
在这里插入图片描述

5.3.1 创建login.html

它显示登录页面,要求输入用户名和口令,这个页面链接到一个名为DispatcherServlet的Servlet。

<form name="loginForm" method="post" action="dispatcher">  //action:请求访问的web组件
<table>
<tr>
<td><div align="right">User Name:</div></td>
<td> <input type="text" name="username"></td></tr>
<tr>
<td><div align="right">Password:</div></td>
<td><input type="password" name="password"></td></tr>
<tr>
<td></td>
<td><input type="Submit" name="Submit" value="Submit"></td>
</tr>
</table></form>

在这里插入图片描述

5.3.2 创建hello.jsp

hello.jsp被DispatcherServlet调用,显示Hello页面。

<html>
<head>
  <title>helloapp</title>
</head>
<body>
  <b>
    Hello: <%= request.getAttribute("USER") %>  //jsp中的表达式标记
  </b>
</body>
</html>

在这里插入图片描述

5.3.3 创建DispatcherServlet.java

public class DispatcherServlet extends GenericServlet {
  private String target = "/hello.jsp";

  /** 响应客户请求*/
  public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException {

    //读取表单中的用户名,对应login.htm:<input type="text"  name="username">
    String username = request.getParameter("username");
    //读取表单中的口令,对应login.htm:<input type="password" name="password">
    String password = request.getParameter("password");

    //在request对象中添加USER属性,对应hello.jsp: <%= request.getAttribute("USER") %>
    request.setAttribute("USER", username);
    //在request对象中添加PASSWORD属性
    request.setAttribute("PASSWORD", password);

    /*把请求转发给hello.jsp */
    ServletContext context = getServletContext();
    RequestDispatcher dispatcher =context.getRequestDispatcher(target);
    dispatcher.forward(request, response);
  }
}

5.4 编译并配置DispatcherServlet

  1. 编译DispatcherServlet.java。编译时,需要将Java Servlet API的JAR文件(servlet-api.jar)设置为classpath,servlet-api.jar文件位于<CATALINA_HOME>/lib目录下。
  2. 把编译出来的class文件拷贝到/helloapp/WEB_INF/classes目录下。
    DispatcherServlet.class的具体存放位置为/helloapp/WEB_INF/classes/mypack/DispatcherServlet.class
  3. 参考编译批处理文件complie.bat

set catalina_home=C:\tomcat //本地机器上Tomcat的安装目录
set path=%path%;C:\jdk\bin //本地机器上jdk的bin目录

set currpath=.
if “%OS%” == “Windows_NT” set currpath=%~dp0%

set src=%currpath%src
set dest=%currpath%WEB-INF\classes
set classpath=%catalina_home%\lib\servlet-api.jar;%catalina_home%\lib\jsp-api.jar

javac -sourcepath %src% -d %dest% %src%\mypack\DispatcherServlet.java

  1. 在web.xml中为DispatcherServlet类加上servlet和servlet-mapping元素:
<web-app>

<servlet>
  <servlet-name>dispatcher</servlet-name>   //定义servlet的名字
  <servlet-class>mypack.DispatcherServlet</servlet-class>   //具体类名:加包名
</servlet>

<servlet-mapping>  //为servlet映射一个url
  <servlet-name>dispatcher</servlet-name>  //等待映射的servlet的名字
  <url-pattern>/dispatcher</url-pattern>   //访问servlet的相对url路径
</servlet-mapping>

</web-app>

5.5 配置Context元素

在Tomcat中发布java web应用,可直接将创建的java web应用发布到Tomcat的webapps目录下,但想要更灵活的发布web应用,可为web应用配置Context元素,但为web应用配置Context元素并不是必需的,如果不进行配置,Tomcat会以默认的方式运行web应用,Tomcat会提供一个默认的Context配置;

Context元素代表了运行在Host上的单个Web应用。一个Host中可以有多个Context元素。每个Web应用必须有唯一的URL路径,这个URL路径在Context元素的path属性中设定。
在helloapp目录下新建一个META-INF子目录,然后在其中创建一个context.xml文件,它的内容如下:

<Context path="/helloapp" docBase="helloapp" reloadable="true"/> 

Context元素的属性
在这里插入图片描述
在开发阶段,将reloadable属性设为true,有助于调试Servlet和其它的class文件。但是由于这一功能会加重服务器的运行负荷,因此建议在Web应用的产品发布阶段,将这个属性设为false.

5.6 创建并发布WAR文件

(1)进入helloapp应用的根目录<CATALINA_HOME>/webapps/helloapp
(2)把整个Web应用打包为helloapp.war文件,命令如下: jar cvf helloapp.war *.*
(3)把helloapp.war文件拷贝到<CATALINA_HOME>/webapps目录下。
(4)删除原先的helloapp目录。
(5)启动Tomcat服务器。自动发布web应用

eg:
在这里插入图片描述
打开命令行窗口,进入到你的Tomcat安装目录下,再输入命令如下: jar cvf helloapp.war *.*
在这里插入图片描述
然后,再Tomcat/webapps/helloapp中会有helloapp.war文件,再将WAR文件移出来到Tomcat/webapps下,此时:
在这里插入图片描述
命令行窗口再输入exit结束程序,再删除helloapp文件夹
重新启动Tomcat(即点击Tomcat/bin/startup.bat程序),此时你会发现Tomcat/webapps又有helloapp文件夹,这是由Tomcat启动时自动对helloapp.war解压展开的,再浏览器输入http://localhost:8080/helloapp/login.htm
在这里插入图片描述
提交后是转到/dispatcher处理,但dispatcher又会跳转到hello.jsp页面
在这里插入图片描述

6. 总结

在这里插入图片描述

7. 练习

  1. 问题:假设在helloapp应用中有一个hello.jsp,它的文件路径如下: <CATALINA_HOME>/webapps/helloapp/hello/hello.jsp
    那么在浏览器端访问hello.jsp的URL是什么?选项:
    (A) http://localhost:8080/hello.jsp
    (B) http://localhost:8080/helloapp/hello.jsp
    © http://localhost:8080/helloapp/hello/hello.jsp
    答案:C
  2. 问题:假设在helloapp应用中有一个HelloServlet类,它位于org.javathinker包下,那么这个类的class文件应该放在什么目录下?选项:
    (A) helloapp/HelloServlet.class
    (B) helloapp/WEB-INF/HelloServlet.class
    © helloapp/WEB-INF/classes/HelloServlet.class
    (D)helloapp/WEB-INF/classes/org/javathinker/HelloServlet.class
    答案:D 所有类都放在WEB-INF/classes目录下,再加上其有的包名
  3. 问题:假设在helloapp应用中有一个HelloServlet类,它在web.xml文件中的配置如下:
<servlet>
  <servlet-name> HelloServlet </servlet-name>
  <servlet-class>org.javathinker.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name> HelloServlet </servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>

那么在浏览器端访问HelloServlet的URL是什么?选项:
(A) http://localhost:8080/HelloServlet
(B) http://localhost:8080/helloapp/HelloServlet
© http://localhost:8080/helloapp/org/javathinker/hello
(D) http://localhost:8080/helloapp/hello
答案:D

<servlet-mapping>
  <servlet-name> HelloServlet </servlet-name>
  <url-pattern>/hello</url-pattern>    //访问Servlet的相对url
</servlet-mapping>

对于html,jsp文件,文件存放位置与url对应,而Servlet需要在web.xml中配置url-pattern才是url

  1. 问题:客户请求访问Web服务器端的静态HTML文档与请求访问Servlet有什么异同?选项:
    (A)相同:都使用HTTP协议
    (B)区别:前者Web服务器直接返回HTML文档,后者Web服务器调用Servlet的服务方法,由Servlet动态生成HTML文档
    ©相同:前者Web服务器直接返回HTML文档,后者Web服务器直接返回Servlet类的源代码。
    (D)区别:后者需要在web.xml中配置URL路径。
    (E)区别:前者使用HTTP协议,后者使用RMI协议。
    答案:A,B,D
  2. 问题:关于Servlet规范,以下哪些说法是正确的(多选)?选项:
    (A)Servlet规范属于HTTP协议的一部分。
    (B)Servlet规范由SUN公司制定。
    (C)Servlet规范制定了标准Servlet接口。
    (D)Servlet规范规定Servlet容器的配置文件为conf子目录下的server.xml文件。
    (E)Tomcat是符合Servlet规范的优秀Servlet容器。
    (F)Tomcat的组成结构(包括Server、Service、Engine和Connector等组件)是由自身的实现决定的,与Servlet规范无关。
    (G)Servlet规范规定Servlet实例运行在Servlet容器中。
    答案:B,C,E,F,G
    注意:(D)Servlet规范规定Servlet容器的配置文件为conf子目录下的server.xml文件。(Servlet规范仅仅规定Servlet容器需要具备哪些功能,Servlet规范并没有为Servlet容器提供具体实现细则)
  3. 问题:以下哪些选项属于Servlet容器的功能?(多选)选项:
    (A)接收并解析客户要求访问特定Servlet的请求。
    (B)创建一个包含客户请求信息的ServletRequest对象。
    (C)创建一个ServletResponse对象,Servlet用它来生成响应结果。
    (D)创建Servlet对象。
    (E)调用Servlet对象的service()服务方法。
    (F)把Servlet对象生成的响应结果发送给客户。
    答案:A,B,C,D,E,F
  4. 问题:关于Servlet,以下哪些说法是正确的?(多选)选项:
    (A)Servlet是运行在服务器端的小插件。
    (B)当客户请求访问某个Servlet时,服务器就把特定Servlet类的源代码发送给浏览器,由浏览器来编译并运行Servlet。
    (C)Tomcat是目前惟一能运行Servlet的服务器。其他服务器如果希望运行Servlet,就必须与Tomcat集成。
    (D)Servlet规范规定,标准Servlet接口有个service(),它有两个参数,分别为ServletRequest和ServletResponse类型。
    答案:A,D
    注意:(B)当客户请求访问某个Servlet时,服务器就把特定Servlet类的源代码发送给浏览器,由浏览器来编译并运行Servlet。 (Servlet在服务器端运行的,而服务器端收到的是有Servlet生成的响应结果)
    (C)Tomcat是目前惟一能运行Servlet的服务器。其他服务器如果希望运行Servlet,就必须与Tomcat集成。(所有实现了Servlet规范的容器都能运行Servlet)
  5. 问题:一个用户安装了Tomcat,但无法启动Tomcat,可能是由于哪些原因引起的?(多选)选项:
    (A)没有安装JDK。
    (B)Tomcat与JDK的版本不匹配,例如Tomcat6.x要求使用JDK1.5或者以上版本。
    (C)没有设置JAVA_HOME系统环境变量。
    (D)没有设置CATALINA_HOME系统环境变量。
    (E)没有安装浏览器。
    答案:A,B,C,D
  6. 问题:关于本节课提到的web.xml、context.xml和server.xml 文件,以下哪些说法正确?(多选)选项:
    (A)web.xml文件的根元素为Context元素。
    (B)Servlet规范规定JavaWeb应用的配置文件为web.xml文件。
    (C)Servlet规范规定Servlet容器的配置文件为server.xml文件。
    (D)web.xml文件和server.xml文件都是XML格式的配置文件。
    (E)Servlet规范规定JavaWeb应用的的配置文件为context.xml文件。
    答案:B,D
    注意:(A)web.xml文件的根元素为Context元素。 (webapp元素)
    (C)Servlet规范规定Servlet容器的配置文件为server.xml文件。 (Servlet规范仅仅规定Servlet容器需要具备哪些功能,Servlet规范并没有为Servlet容器提供具体实现细则)
    (D)web.xml文件和server.xml文件都是XML格式的配置文件。 (web.xml是java web的配置文件,server.xml是Tomcat特有的配置文件)
  7. 问题:关于JavaWeb应用的目录结构,以下哪些说法正确?(多选)选项:
    (A)JavaWeb应用的目录结构完全由开发人员自行决定。
    (B)JavaWeb应用中的JSP文件只能存放在Web应用的根目录下。
    (C)web.xml文件存放在WEB-INF目录下。
    (D)JavaWeb应用中的.class文件存放在WEB-INF/classes目录或其子目录下。
    答案:C,D
    注意:(A)JavaWeb应用的目录结构完全由开发人员自行决定。 (SUN公司规定,这样本证任何java web应用都能发布到Servlet容器中)
    (B)JavaWeb应用中的JSP文件只能存放在Web应用的根目录下。 (根目录下自创的子目录也可以存放)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值