Servlet 之 HttpServlet

package cn.jiemoxiaodi.http;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyHttpServlet extends GenericServlet {

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // 如果我们确定请求的是用http协议,那么实际上ServletRequest 就是
        // HttpServletRequest 所以进行强转

        HttpServletRequest request = (HttpServletRequest) arg0;

        HttpServletResponse response = (HttpServletResponse) arg1;
        
        
        //当我们请求servlet的时候 ,如果他请求方式是get 那么他走一个doGet方法
        //当我们请求servlet时候,如果他请求方式是post  那么他走一个doPost的方法
        
        //获得 请求的 方式
        String method= request.getMethod();
        if(method.equalsIgnoreCase("get")){
            doGet(request,response);
        }else if(method.equalsIgnoreCase("post")){
            doPost(request,response);
        }
        
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("dopost");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("doget");
    }

}

 

package cn.jiemoxiaodi.http;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DServlet extends MyHttpServlet {

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("dopost----=--");
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("doget----=--");
    }

}

1.关于Servlet的线程安全问题
        因为一个servlet的实例在服务器中只存在一份. ==> 当有多个请求访问时,servlet线程将不安全.
        如何规避线程安全问题呢? ===>  我们接受线程的信息时,将信息保存在方法的变量中,不要使用成员变量保存.

    2.关于servlet中路径配置问题
            <!--
                  路径配置分为两种情况
                    路径匹配
                        /DServlet   ==>  http://localhost:8080/Day10/DServlet
                        /ABC/DServlet  ==> http://localhost:8080/Day10/ABC/DServlet
                        /ABC/BCD/DServlet ==> http://localhost:8080/Day10/ABC/BCD/DServlet
                        /ABC/*  ==>  http://localhost:8080/Day10/ABC/asdlkajsdlkjalsd
                        /       ==> 匹配所有路径 http://localhost:8080/Day10/2139009123j/asd2klnasd
                        匹配优先级: 路径匹配中 ,匹配的范围越广,优先级越低.
                    后缀名匹配
                        *.do        ==>  http://localhost:8080/Day10/213oiajsdoijoad.do
                        *.action    ==>  http://localhost:8080/Day10/lnasdljasdlkasljdasd.action
                        *.abc        ==>   http://localhost:8080/Day10/1039i09ixc0kasd.abc
                    这种路径匹配在现在学习阶段接触不到. 在学到Filter 和struts2 的时候就用到了.
                    !!!!!!!注意: 以上两种匹配方式不能同时使用
                            例如下面是绝对错误的:
                                /DServlet/*.do  ==> 凡事路径配置中以"/"开头那么就说明含有路径匹配.这种时候再使用*.do 这种后缀名匹配绝对报错.
                   -->

  3.(拓展)关于tomcat中web.xml的信息
        1> defaultServlet 配置的路径是 "/" ==>  所有跟我的路径匹配不上的路径都会走default.default主要干两件事  1.找静态资源  2.找不到静态资源报错.
        2>session相关的配置 ==> 30  ==> 学session的时候就知道了
        3>将所有MIME类型 都列举出来了.
        4>welcome list file ==> 默认的欢迎资源.
    4.我们知道servlet默认创建实例的时机是什么时候? ==> 第一次请求该servlet时创建. ==> 如果我们这个servlet创建需要的时间比较久.我们想让servlet随着服务器的启动而启动
    那么我们可以这样做:
            <servlet>
                <servlet-name>AServlet</servlet-name>
                <servlet-class>cn.itcast.servlet.AServlet</servlet-class>
                    <!-- 在启动服务器时加载的意思
                        配置了该配置,那么这个servlet就会在服务器启动时创建实例.
                        这个配置中填写的内容是整数 最小可以填0.
                        数字越小 启动优先级越高. 所以0 表示优先级最高.
                        如果两个数字大小相同,优先级按照配置顺序,谁先配置 谁先创建.
                -->
                <load-on-startup></load-on-startup>
            </servlet>

转载于:https://my.oschina.net/jiemoxiaodi/blog/848337

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值