java学习笔记:tomcat,servlet,http

mac2022-06-30  20

java学习笔记:tomcat,servlet,http

 

Tomcat服务器&servlet入门程序 ---- 一、tomcat服务器 1.B/S 和C/S交互模型相同点和不同点: 相同点: 1_都是基于请求-响应交互模型,即: 浏览器(客户端) 向 服务器发送 一个 请求。 服务器 向 浏览器(客户端)回送 一个 响应 。 2_必须先有请求 再有响应 3_请求和响应成对出现 不同点: 1_实现C/S模型需要用户在自己的操作系统安装各种客户端软件(百度网盘、腾讯QQ等);实现B/S模型,只需要用户在操作系统中安装浏览器即可。 注:B/S模型可以理解为一种特殊C/S模型。

2.tomcat官网:http://tomcat.apache.org 查看本地端口使用情况:netstat -nao

3.在IntelliJ IDEA的工程中配置tomcat服务器 1_新建一个web工程 2_Run-->Edit Configurations-->+-->Tomcat Server-->Local 3_Name: tomcat8; 在Server标签页点击"Configure",选本机上tomcat所在的路径。 4_再点击"Configure",将name改成tomcat8。

4.创建web项目 1_File-->New-->Project,在弹出的新窗口中,选Java Enterprise, Java EE version选Java EE 5, 在Additional Libraries and Frameworks里勾选Web Application, Versions选2.5。点击Next按钮,给module name一个名字即可,如day02。 2_选中项目名(如day02),Run-->Edit Configurations,在弹出的新窗口中,切换到Deployment标签页,点击+,选中这个day02,Application context选好目录。

二、Servlet 1.Servlet 运行在服务端的Java小程序,是sun公司提供一套规范,用来处理客户端请求、响应给浏览器的动态资源。 但servlet的实质就是java代码,通过java的API动态的向客户端输出内容

2.查阅JavaEE手册(帮助文档)阅读Servlet规范: javax.servlet 根据文档总结,书写servlet一个三个步骤: 1)创建一个class实现servlet接口 2)重写service方法 3)创建的类必须在web.xml文件中做配置 为什么要做配置? 答:必须将请求路径和java程序的对应关系建立起来。

3.servlet与普通的java程序的区别 1_必须实现servlet接口 2_必须在servlet容器(服务器)中运行 3_servlet程序可以接收用户请求参数以及向浏览器输出数据

4.代码实现servlet的步骤 1_在工程下创建cn.itcast.web包,在包下创建一个类实现 Servlet接口 2_实现service方法 3_在web.xml中配置书写好的servlet

5.servlet2.5代码实现 //file name: DemoServlet.java package cn.itcast.web;

import javax.servlet.*; import java.io.IOException;

public class DemoServlet implements Servlet {     @Override     public void init(ServletConfig servletConfig) throws ServletException {}

    @Override     public ServletConfig getServletConfig(){         return null;     }

    @Override     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {         System.out.println("第一个servlet程序");     }

    @Override     public String getServletInfo(){         return null;     }

    @Override     public void destroy(){} }

//web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"            version="2.5">     <servlet>         <servlet-name>DemoServlet</servlet-name>         <servlet-class>cn.itcast.web.DemoServlet</servlet-class>     </servlet>     <servlet-mapping>         <servlet-name>DemoServlet</servlet-name>         <url-pattern>/demo</url-pattern>     </servlet-mapping> </web-app>

6.Servlet3.0实现Hello world例子 (1)Servlet2.5与Servlet3.0的区别 Servlet3.0相较于Servlet2.5: 新增了一些注解,简化的javaweb代码开发,可以省略web.xml配置文件 支持异步处理(多线程技术) 支持可 插性特性(书写的代码编译后生成的class文件可以直接部署到其他项目的,自动加载执行)

(2)代码实现Servlet3.0步骤(注解配置servlet演示) 1_创建JavaEE6(含6)以上的工程 2_创建servlet,在@WebServlet注解中添加urlPatterns = "/hello",作为请求路径

(3)注解开发servlet代码演示 1_创建JavaEE6(含6)以上的工程:New-->Project-->Java Enterprise,选Java EE 6,勾选Web Application, Versions选3.0,不勾选Create web.xml 代码: //file name: HelloServlet.java package cn.itcast.web;

import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException;

//name = "HelloServlet": servlet名称,相当于web.xml的<servlet-name> //urlPatterns = "/hello": servlet的访问路径,相当于<url-pattern> @WebServlet(name = "HelloServlet", urlPatterns = "/hello") public class HelloServlet implements Servlet {     @Override     public void init(ServletConfig servletConfig) throws ServletException {}

    @Override     public ServletConfig getServletConfig(){         return null;     }

    @Override     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {         System.out.println("HelloServlet执行...");     }

    @Override     public String getServletInfo(){         return null;     }

    @Override     public void destroy(){} }

三、Servlet的体系结构 1.Servlet的体系结构概述 javax.servlet Interface Servlet//定义所有servlet都必须实现的方法。 要实现此接口,可以编写一个扩展javax.servlet.GenericServlet的一般servlet或者编写一个扩展javax.servlet.http.HttpServlet的HTTP servlet.

问题一、可以直接实现接口创建servlet,为什么官方建议继承GenericServlet? 答:GenericServlet类本已经实现接口的部分方法。程序员只需要关注service方法的开发。

问题二、官方文档建议可以继承的servlet有两个。那么,选择哪一个更好呢? 答:在GenericServlet描述中,如果处理http相关请求和响应,选择使用httpservlet.

由上图可知在servlet接口规范下,官方推荐使用继承的方式,继承GenericServlet 或者HttpServlet来实现接口, 那么我们接下来再去查看一下这两个类的API: 阅读上图API可知,GenericServlet 是一个类,它简化了servlet的开发,已经提供好了一些servlet接口所需的方 法,我们开发者只需要重写service方法即可

2.使用GenericServlet 创建servlet: 1_创建一个类 2_继承GenericServlet 3_重写service方法 代码: package cn.itcast.web;

import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import java.io.IOException;

@WebServlet(name = "GenericDemoServlet", urlPatterns = "/generic") public class GenericDemoServlet extends GenericServlet {     @Override     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {         System.out.println("GenericDemoServlet执行...");     } }

虽然,GenericServlet已经简化了servlet开发,但是我们平时开发程序需要按照一种互联网传输数据的协议来开发 程序——http协议,因此,sun公司又专门提供了HttpServlet,来适配这种协议下的开发。 HttpServlet:是一个类实现了servlet接口。如果你需要书写java小程序,可以继承这个类。书写小程序必须重写方法doGet和doPost. 阅读上图的API可知,继承HttpServlet,我们需要重写doGet、doPost等方法中一个即可,根据Http不同的请求, 我们需要实现相应的方法。

3.我们来使用HttpServlet创建servlet: 1_创建一个类 2_继承HttpServlet 3_重写doGet方法 代码: //file name: HttpDemoServlet.java package cn.itcast.web;

import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;

@WebServlet(name = "HttpDemoServlet", urlPatterns = "/http") public class HttpDemoServlet extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{         System.out.println("HttpDemoServlet执行...");     } }

通过以上两个API阅读,同学们注意一个细节HttpServlet是GenericServlet的子类,它增强了GenericServlet一些 功能,因此,在后期使用的时候,我们都是选择继承HttpServlet来开发servlet程序。 虽然目前开发servlet的选择继承类,已经确定,但是另一个问题一直还在我们头脑中,那就是我们学的这些浏览 器、服务器、servlet等,到底是如何运行的? 那么接下来,我们来看看servlet的运行原理。 通过上述流程图我们重点需要掌握如下几个点: 1_Servlet对象是由服务器创建 2_request与response对象也是由tomcat服务器创建 3_request对象封装了浏览器过来的所有请求信息,response对象代表了服务器的响应信息。

四、Servlet生命周期 1.使用步骤 1_创建LifeCircleServlet初始化 2_复写init、service、destroy方法 3_访问servlet测试初始化LifeCircleServlet 4_关闭服务器测试销毁LifeCircleServlet 演示代码: package cn.itcast.web;

import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import java.io.IOException;

@WebServlet(name = "LifeCircleServlet", urlPatterns = "/life") public class LifeCircleServlet extends HttpServlet {     @Override     public void init() throws ServletException {         super.init();         System.out.println("LifeCircleServlet初始化……");     }

    @Override     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {         System.out.println("LifeCircleServlet执行……");     }

    @Override     public void destroy(){         super.destroy();         System.out.println("LifeCircleServlet销毁……");     } }

==== HTTP ---- 区分:GET/POST向服务器发起请求区别? 安全,数据量大小,传输数据方式 1_GET不安全 POST安全 2_由于GET方式受浏览器地址栏约束,所以传输的数据量比POST少.   PS:协议本身没有约束GET比POST少 3_数据向服务端传输的位置不同 GET包含在请求行的请求路径之后传递到服务端     www.ab.com?name=tom&age=18&sex=nan   POST方式包含在请求体发送到服务端了 name=tom&age=18&sex=nan PS(只有通过POST请求向服务端通过表单传递数据的时候才有请求体)

请求体作用:存放客户端向服务端传递的数据 username=tom&userage=18&password=1234

 

最新回复(0)