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)请求方法形式
细致的
等等请求形式方法
.
service(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) 方法
然后去找你相应的请求