java学习笔记:tomcat,servlet,http

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值