天天看点

JavaWeb初识 Servlet家族

JavaWeb开发环境需要javax.servlet 插件

Servlet 一个普普通通的接口 网络处理规范接口 网络处理接待处

Servlet JavaWeb的核心技术

网页请求发送 服务器 Servlet(逻辑,触发都在这)输出到 服务器将内容发送到客户端

Servlet 是由触发进行运行的

servlrt是如何被浏览器访问的:

这项工作是在启动是就会工作
                     tomcat再启动是就会将所有的注解 搜索到
                     并将直接存储起来 当服务器启动是就会找的你的注解
                     
                     1、浏览器输入地址http://localhost:8080/hello
                     2、浏览器发出请求 请求头 访问内容和路径已经说明好了 我要访问/hello
                     3、发送到端口8080 接受请求后 解析请求头信息  分析你要请求的内容 是资源还是类
                     4、我要访问hello类(类都在包下 不会重复)
                     5、查看又没有一个类叫hello 找到你注解所对应的类
                     6、如果创建对象执行对象中的方法
                     7、如果类没有 就会去找资源 如果找不到他就会报404错误
           

如果修改源码就需要重启tomcat 如果修改资源的话就不要要重启直接刷新页面即可

网页运行不管运行多少次都要有请求头和响应头

Servlet:

是一个普通的接口
        Servlet是JavaWEB的核心技术,通过URL地址可以对Servlet进行访问
        Servlet就是接收外界访问的处理类
        开发servlet 必须继承HttpServlet 重写里面的service方法 也可以不重写 还有其他的
        开发方式:1.使用注解开发Servlet
                        2.使用web.xml配置Servlet
           

idea类图查看快捷键Ctrl+Alt+Shift+U

import javax.servlet.annotation.WebServlet;//网页注解时看清引用  不要引用错了
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;//引用时看清引入 不要引错了
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    //继承与HttpServlet 不要引用错了
    @Override
    //重写了servlec方法
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Hello,Servlet!!");
        response.setHeader("Content-type", "application/json;charset=UTF-8");//解决 web服务器无法运行中文
        PrintWriter out = response.getWriter();
        out.println("嘻嘻嘻啊");
    }
}
           

Servlet是用来处理请求

Javax.servlet.Servlet 接口

init(ServletConfig); 初始化方法 配置信息 谁调用我谁就给我传进相应的配置参数 Tomcat调用所有由Tomcat传入参数

service(ServletRequest, ServletResponse); 处理请求方法

destroy(); Servlet销毁方法

GenericServlet实现与Servlet接口

Servlet对象不是由我们来new的是由Web容器来new的

init(){}; 用来给客户得知初始化信息的方法(程序员),重写这个方法 因为有参数的是由Tomcat调用的 可以让我们得知什么时候初始化

init(ServletConfig config){}; 这里在调用init()方法,当他调用你重写的方法(因为调用关系就是先调用子类)

service(ServletRequest var1, ServletResponse var2){};

destroy(){}

Javax.servlet.http.HttpServlet 继承与 GenericServlet

service(ServletRequest, ServletResponse)

面向接口编程 Javax.servlet.Servlet调用的是个这个方法(他实现了Servlet中的service方法)

service(HttpServletRequest, HttpServletResponse);

方法重载 带协议 发出请求时先接受到的是不带协议的 找到带协议的转换成不带协议的方法

if (req instanceof HttpServletRequest && res instanceof HttpServletResponse) {//判断下传进来的是不是带协议的
            HttpServletRequest request = (HttpServletRequest)req;
            HttpServletResponse response = (HttpServletResponse)res;
            this.service(request, response);//转换后将他交给不带协议的方法
        } else {
            throw new ServletException("non-HTTP request or response");
        }           

doGet(HttpServletRequest, HttpServletResponse); 请求方法形式

doPost(HttpServletRequest, HttpServletResponse);请求方法形式

doPut(HttpServletRequest, HttpServletResponse)请求方法形式

细致的

等等请求形式方法

.

他会根据你的请求方法 进行判断进行选择(不需要细致的将请求方法细致分开)

如果你重写了doPut 非要用doGet他就直接调用父类的doGet方法他就会报错(请求方式不匹配)405 400服务

String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_get_not_supported");
        if (protocol.endsWith("1.1")) {
            resp.sendError(405, msg);
        } else {
            resp.sendError(400, msg);
        }

    }           

所有的请求都是先经过service(ServletRequest, ServletResponse) 方法

然后去找你相应的请求