写在前面:
servlet是单例的
注解配置servlet:@WebServlet(资源路径)
tomcat执行servlet原理
web.xml配置:<servlet><servlet-name><servlet-class>
<servlet-mapping><servlet-name><url-pattern>
1. 基本介绍
Servlet:运行在服务端的小程序(server applet)
Servlet:接口;定义了Java类被浏览器访问到的规则;遵守这些规则,Java类才能被tomcat识别,才能让浏览器访问
2. servlet初级使用
tomcat执行servlet的原理(过程)
根据url确定项目下的资源名称(项目名后面就是资源名)
tomcat内部检索,看web.xml中的url-pattern有没有这个资源名称
找到后就找对应的servlet-name,再确定对应的servlet-class全类名
tomcat将全类名对应的字节码文件加载进内存
利用反射,创建对象,调用方法
web.xml中配置servlet
<!--配置servlet-->
<servlet>
<servlet-name>myservlet01</servlet-name>
<servlet-class>servlet.MyServlet01</servlet-class>
<!--
<load-on-startup>-1</load-on-startup> 指定servlet创建时机,默认-1
0/正数:服务器启动时创建
负数:第一次被访问时创建
-->
</servlet>
<!--配置映射-->
<servlet-mapping>
<servlet-name>myservlet01</servlet-name>
<url-pattern>/my01</url-pattern>
</servlet-mapping>
servlet中的方法
public class MyServlet01 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//被创建 时调用,只执行一次;用来加载资源
/*
默认第一次被访问时,servlet被创建;也可以在web.xml中修改,指定创建时机
<load-on-startup>
*/
}
@Override
public ServletConfig getServletConfig() {
//返回servlet的配置对象
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//提供服务,每次servlet被访问时都执行
System.out.println("abc");
}
@Override
public String getServletInfo() {
//获取servlet的版本等信息
return null;
}
@Override
public void destroy() {
//被销毁 时调用,只执行一次;用来释放资源
}
}
单例:
servlet只被创建一次,说明servlet在内存中只存在一个对象,是单例的(方法不共享,成员变量共享)
多个用户同时访问可能存在安全问题
解决方案:尽量不要定义成员变量,即便定义了,也不要修改值
3. 使用升级
servlet3.0 注解配置
使用注解,就可以不要web.xml了
在定义的servlet类上使用注解:@WebServlet(资源路径)
/*
注解写法:
@WebServlet(urlPatterns="/myservlet03")
@WebServlet("/myservlet03")
@WebServlet({"/myservlet03","/03"})
*/
@WebServlet("/myservlet03")
public class MyServlet03 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("03");
}
}
体系结构
Servlet接口-----(实现类)-----GenericServlet 抽象类-----(继承)-----HttpServlet抽象类
GenericServlet:方法都做了默认空实现,只有service方法抽象
HttpServlet:把service中需要的操作做了封装(判断请求方式,根据请求方式获取数据等)
只需要重写doget、dopost方法即可
资源路径定义规则
/xxx
/xxx/xxx
/* 任何路径
/xxx/* 第二层随意
*.do 访问路径xxx.do (后缀随意,也可以*.action等)
4. HTTP
Http:超文本传输协议
传输协议:客户端和服务端发送数据的组成格式
URL:统一资源定位符(带协议、ip、port)
URI:统一资源标识符(仅虚拟目录+资源路径)
特点:
基于TCP/IP的高级协议
默认端口80
基于请求响应模型(一次请求一次响应,一一对应)
无状态(每次请求之间独立,不能交互数据)
两个版本(1.0 每次请求都建立连接)(1.1 请求响应完成后,等待一段时间,如果还有请求就复用连接)
七种请求方式:
get:参数在请求行中(url),url长度有限制,不安全
post:参数在请求体中,参数长度无限制,较为安全