java web之HttpServlet类

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

java web之HttpServlet类_第1张图片

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

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

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

java web之HttpServlet类_第2张图片

java web之HttpServlet类_第3张图片

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

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

基本实现步骤

java web之HttpServlet类_第4张图片

 

第一步:调用 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


1

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

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

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

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

 

你可能感兴趣的:(java web之HttpServlet类)