web入门、tomcat、servlet、jsp

时间:2021-02-17 19:10:05

web概述

 

1.出现web程序开发的原因:

随着网络技术的不断发展,单机的软件程序已经很难满足网络计算的需要。为此,产生了各种网络程序开发体系结构。最重要的是C/S,  B/S.

2.C/S:

客户端/服务端结构,client/server。客户端需要安装专门的客户端软件。QQ 微信 LOL等

优点:有一部分代码写在客户端, 用户体验比较好,减轻了服务器的负担。

缺点:维护成本高,服务器更新,客户端也要随着更新。 占用资源大。

B/S:

浏览器/服务器结构,brower/sever。通过web浏览器向web服务器发送请求,由web服务器进行处理,并将处理结果返回给客户端浏览器。网页游戏 , WebQQ 等

优点:客户端只要有浏览器就可以了。 占用资源小, 不用更新。开发和维护成本低

缺点:将事务处理逻辑部分交给服务器,增加了服务器的负担。用户体验不佳。

现在主流的网络应用程序开发体系结果首选B/S。

3.web应用程序的工作原理

静态网站:早期的web。web应用由静态页面构成,由html编写,放在web服务器上。用户使用浏览器通过HTTP协议请求服务器的资源,web服务器接收请求并作出处理,将结果返回给客户端浏览器,浏览器经过渲染后呈现给用户。

动态网站:随着网络的发展,线下的业务向网上发展,基于internet的web应用也越来越复杂,访问的不再只是静态页面,更多的内容需要根据用户的请求动态的生成页面信息,即动态网站。动态页面由html与动态脚本语言如:jsp等联合编写,并将编写好的程序部署到web服务器上,由服务器对动态脚本代码进行处理,并转化为浏览器可以解析的html代码,返回给浏览器,显示给用户。

 

tomcat

服务器

其实服务器就是一台电脑。 配置比一般的要好。

tomcat就是Apache基金会开发的服务器,免费并且跨平台。是学习java开发的比较实用的服务器。

 

Tomcat目录介绍

bin

 > 包含了一些jar , bat文件 。 startup.bat、shutdown.bat。 

conf  tomcat的配置 server.xml 与web.xml

lib

 tomcat运行所需的jar文件 

logs

 运行的日志文件 

temp

 临时文件 

webapps

 发布到tomcat服务器上的项目,就存放在这个目录。 

work

 jsp翻译成class文件存放地

 

 

如何把一个项目发布到tomcat中

需求: 如何能让其他的电脑访问我这台电脑上的资源 。 项目:test01

localhost : 本机地址 

1. 拷贝这个项目到webapps/ROOT底下, 在浏览器里面访问:

 http://localhost:8080/test01 
 http://localhost:8080 : 其实对应的是到webapps/root 

2. 通过在server.xml文件中配置<Context>元素实现

在tomcat安装目录打开conf下打开server.xml文件,在<Host></Host>元素中间添加元素<Contex>元素。

  1. 在conf/server.xml 找到host元素节点。

  2. 加入以下内容。

    <Context docBase="D:/test01" path="/a"></Context> 
  3. 在浏览器地址栏上输入: http://localhost:8080/a即可访问到web应用的test01。

 

 

给Eclipse配置Tomcat

 

  1. 在server里面 右键新建一个服务器, 选择到apache分类, 找到对应的tomcat版本, 接着一步一步配置即可。
  2. 配置完毕后, 在server 里面, 右键刚才的服务器,然后open , 找到上面的Server Location , 选择中间的 Use Tomcat installation...

  3. 创建web工程, 在WebContent下定义html文件, 右键工程, run as server

 

 

HTTP:

通信双方按照这个超文本传输协议进行通信。

在http协议当中,规定了请求和响应双方, 客户端和服务器端。与web相关的资源。

有两种分类

  • 静态资源

    html 、 js、 css

  • 动态资源

    servlet/jsp

 

Servlet

  • servlet是什么?

其实就是一个java程序,运行在我们的web服务器上,用于接收和响应 客户端的http请求。

更多的是配合动态资源来做。 当然静态资源也需要使用到servlet,只不过是Tomcat里面已经定义好了一个 DefaultServlet

 

Severlet与ServletConfig与Serializable是三个接口。Severlet与ServletConfig定义了Servlet的基本方法以及封装了Servlet的配置信息。

GenericServlet是抽象类,实现了上面三个接口。但它没有对Http请求处理进行实现。

而HttpServlet实现了 GenericServlet,也对Http请求处理进行实现,为POST、GET方法等提供了具体的操作方法,所以通常我们编写的Servlet直接继承于HttpServlet。

 

第一个Servlet如下:

 1 import java.io.IOException;
 2 import java.io.PrintWriter;
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 public class WelcomeServlet extends HttpServlet {
 8     private static final long serialVersionUID = 27126L;
 9     @Override
10     public void doGet(HttpServletRequest request,//处理Http的Get请求
11             HttpServletResponse response) 
12             throws ServletException, IOException {
13         response.setContentType("text/html");//设置内容类型
14         PrintWriter writer = response.getWriter();//打印流
15         writer.print("<html><head></head>"//写给浏览器,让浏览器解析后显示给用户
16                 + "<body>Welcome</body></html>");
17     }
18 }

 

 

编写好Servlet后我们需要配置这个Servlet类,即告诉Web容器哪一个请求调用了哪一个Servlet对象,对Servlet起到一个注册的作用。在webContent/WEB-INF/web.xml里面写上以下内容:

1.声明Servlet。通过<servlet>标签:里面有<servlet-name>和<servlet-class>两个标签

2.映射Servlet。通过<servlet-mapping>:里面有<servlet-name>和<servlet-mapping>两个标签

 1 <?xml version="1.0" encoding="ISO-8859-1"?>
 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 5     version="3.0"> 
 6 
 7     <servlet>
 8         <servlet-name>WelcomeServlet</servlet-name>//自定义名称
 9         <servlet-class>app01c.WelcomeServlet</servlet-class>//Servlet完整路径
10     </servlet>
11 
12     <servlet-mapping>//映射
13         <servlet-name>WelcomeServlet</servlet-name>//与上面的自定义名称要一样
14         <url-pattern>/welcome</url-pattern>//映射访问的URL
15     </servlet-mapping>
16 </web-app>

 

 

Servlet的生命周期

  • 生命周期

从创建到销毁的一段时间

  • 生命周期方法

从创建到销毁,所调用的那些方法。

  • init方法

    在创建该servlet的实例时,就执行该方法。 一个servlet只会初始化一次, init方法只会执行一次 默认情况下是 : 初次访问该servlet,才会创建实例。 
  • service方法

    只要客户端来了一个请求,那么就执行这个方法了。 该方法可以被执行很多次。 一次请求,对应一次service方法的调用 
  • destroy方法

     servlet销毁的时候,就会执行该方法 1. 该项目从tomcat的里面移除。 2. 正常关闭tomcat就会执行 shutdown.bat 

doGet 和 doPost不算生命周期方法,所谓的生命周期方法是指,从对象的创建到销毁一定会执行的方法, 但是这两个方法,不一定会执行。

让Servlet创建实例的时机提前。

  1. 默认情况下,只有在初次访问servlet的时候,才会执行init方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。

  2. 那么这个时候,初次访问,可能会在init方法中逗留太久的时间。 那么有没有方法可以让这个初始化的时机提前一点。

  3. 在配置的时候, 使用load-on-startup元素来指定, 给定的数字越小,启动的时机就越早。 一般不写负数, 从2开始即可。

    <servlet> <servlet-name>HelloServlet04</servlet-name> <servlet-class>com.itheima.servlet.HelloServlet04</servlet-class>  <load-on-startup>2</load-on-startup> </servlet> 

ServletConfig

Servlet的配置,通过这个对象,可以获取servlet在配置的时候一些信息

每个Servlet只有一个ServletConfig

当Servlet容器初始化时,Servlet容器会给Servlet的init()方法传入一个ServletConfig。而这个ServletConfig的封装可有部署描述符或者@WebServlet传给Servlet的配置信息。传入的每一条信息就叫一个初始参数。每个初始参数有key和value两个值。

常用方法:
//1. 得到servlet配置对象 专门用于在配置servlet的信息 ServletConfig config = getServletConfig(); //获取到的是配置servlet里面servlet-name 的文本内容 String servletName = config.getServletName(); //2、。 可以获取具体的某一个参数。 String address = config.getInitParameter("address"); //3.获取所有的参数名称 Enumeration<String> names = config.getInitParameterNames(); //遍历取出所有的参数名称 while (names.hasMoreElements()) { String key = (String) names.nextElement(); String value = config.getInitParameter(key); System.out.println("key==="+key + " value="+value); }
//4.获取上下文环境ServletContext