java web之HttpServlet类

因为网页时http协议的,所以所有的网页都遵循http协议,发给后台的协议也是http协议的。

转型时,由父接口的ServletRequest转为子类的HttpServletRequest,需要强转(继承GenericServlet时)

此时的HttpServletRequest.getMethod()是获取请求的类型(get/post)

重写servlet方法httpServletRequest,获取用户请求类型,根据请求类型去执行相关代码

注释:当一个类继承于另一个类,子类中没有父类的方法时。用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找。

get的处理效率高,所以尽可能的使用get 的方法

基本实现步骤

 

第一步:调用 MyServletservice(ServletRequest, ServletResponse)方法,但是MyServlet没有重写这个方法,所以到MyServlet的父类去找

第二步:调用HttpServletservice(ServletRequest, ServletResponse)方法,查看源码发现它调用了service(HttpServletRequest, HttpServletResponse)

第三步:查看HttpServletservice(HttpServletRequest, HttpServletResponse)方法,发现它对请求方法进行了判断,如果是GET请求,则调用doGet()方法,如果是POST请求,则调用doPost()方法。

第四步:如果在MyServlet中重写了 doGet(),doPost()方法,则会调用MyServlet中的重写的响应的doGet(),doPost()方法。

注意:必须重写一个doXXX方法,不然会报405

后台获取前台的数据

request.getParameter("name");

后台响应给浏览器

先设置响应格式

response.setContentType("text/html;charset=utf-8");

然后输出

response.getWriter().write(name);

注意:Servlet体系结构是建立在Java多线程机制之上的,这样会出现线程的问题,原因,servlet是单实例的,多次访问,共用一个name对象,张三李四账户登陆问题;目前学习的只能加锁(加静态代码块),效率很差,放在后期的学习中解决。

ØServlet容器会自动使用线程池等技术来支持系统的运行,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致。

当然,也有封装好的简便方法,非解决安全问题

Servlet的加载

load-on-startup

<!-- 在容器启动时 就加载这个servlet -->
<load-on-startup>1</load-on-startup>

load-on-startup 元素标记容器是否应该在web应用程序启动的时候就加载这个servlet(实例化并调用其init()方法)

它的值必须是一个整数,表示servlet被加载的先后顺序。

如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。

如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值