Sevlet入门

Servlet本身在tomcat中是非常被动的,而网络请求和响应不是servlet的主要职责,所谓的request和response是tomcat传给servlet的,用来处理请求和响应的工具,本身不具备。Servlet本身更偏向于业务代码。

  • 所谓的Tomcat是Web服务器和Servlet容器的结合体。
  • 而Web服务器的作用就是将某个主机上的资源映射为一个url供外界访问
  • Servlet容器,顾名思义就是里面存放着Servlet对象

为什么可以通过Web服务器映射的URL访问资源?
:接受请求、处理请求、响应请求

起初是由Servlet处理,后来衍生出三层架构,将一部分逻辑从Servlet中抽离出来交给Service和Dao处

之后出现的是SpringMVC,核心组件DispatherServlet,本质还是Servlet。但是在原来的HttpServlet的基础上,又封装了一条逻辑。

JavaWeb开发经典三层架构的优点:代码分层、逻辑清晰、解耦

其实进入Tomcat阶段后,我们就全面面向接口编程,通过导入Mysql的驱动包就可以。

driver.connect(url,username,password)

Tomcat帮助我们解决了很多底层问题,只传入三个对象:ServletConfig、ServletRequest、ServletResponse

ServletConfig

Servlet配置是在web.xml中

<init-param>
	<param-name>username</param-name>
	<param-value>bravo</param-value>
</init-param>

也就是说,servletConfig对象封装了servlet的一些参数信息,如果需要,我们可以获取。

Request/Response

Http请求到了tomcat后,tomcat通过字符串解析,把各个请求头(Header),请求地址(Url),请求参数(QueryString)都封装进了Request对象中

request.getHeader();
request.getUrl();
request.getQueryString();
...

通过调用以上等方法,都可以得到浏览器当初发送来的请求信息。

至于Response,tomcat传给servlet时,它还是空的对象。经过servlet逻辑处理后得到结果,最终通过response.write()方法,将结果写入response内部的缓冲区。Tomcat会在servlet处理结束后,拿到response,遍历里面的信息,组装成Http响应发送给客户端。

Servlet接口中5个方法
其中init、service、destroy是生命周期方法。init和destroy各自只执行一次,及servlet创建和销毁时。而service会在每次有新请求到来时被调用,也就是说,我们主要的业务代码需要写在service中。

-起初通过如下方法写Get\Post请求

public void service(Request request, Response response){
}

-其次出现了GenericServlet抽象类

public abstract class GenericServlet implement javax.servlet.Servlet, ServletConfig,java.io.Serializable{
}
  • 提升了init方法中原本是形参的servletConfig对象的作用域(成员变量),方便其他方法使用
  • init方法中还调用了一个init空参方法,如果我们希望在servlet创建时做一些什么初始化操作,可以继承GennericServlet后,覆盖init空参方法
  • 由于其他方法内也可以使用servletConfig,于是写了一个getServletContext方法
  • service没有实现

-之后发现HttpServlet

public abstract class HttpServlet extends GenericServlet{
}

其中实现了service,不可重写覆盖,但是doGet/doPost需要重写,不然会报405错误
HttpServlet被声明成了抽象类的原因?就是有抽象方法service

一个类声明成抽象方法,一般有两个原因:

  • 有抽象方法
  • 没有抽象方法,但是不希望被实例化

Filter用到了责任链模式,Listener用到了观察者模式,Servlet也不会翻过使用设计模式的模板方法模式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值