小白Servlet总结

一、Servlet定义

      Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应。下有GenericServlet(抽象 类)、HttpServlet子类。下面主要根据HttpServlet(HTTP协议有关的抽象类)进行学习。

二、HttpServlet的编码步骤

       1、创建一个Dynimac Web Project项目

       2、写一个类继承自HttpServlet并覆盖doGet和doPost方法,然后在doGet中编写

            public void doGet(HttpServletRequest request, HttpServletResponse response)

            request:代表着请求对象,该对象中有HTTP协议的请求部分的所有内容(获取客户端发送过来的数据)。它的实现类由服 务器提供的,封装数据也是服务器来做的。

            response:代表着响应对象,该对象中由我们写数据(HTTP协议的响应部分)进去(将数据发送给客户端)。它的实现类                               也是由服务器提供的。

     2、添加HttpServlet的映射

           在WEB-INF目录下新建web.xml配置文件

          <servlet>

                <servlet-name>ServletDemo1</servlet-name>  此处名字可以随便

                <servlet-class>com.example.servlet.ServletDemo1</servlet-class>  需要映射到的类

        </servlet>

        <servlet-mapping>

          <servlet-name>ServletDemo1</servlet-name>  此处名字要与上面的名字保持一致

          <url-pattern>/ServletDemo1</url-pattern> Servlet访问地址(可以随便),主意前面需要加“/”

       </servlet-mapping>

      3、将其部署到Tomcat上然后通过http://localhost:8080/ServletDemo1就可以访问

三、HttpServlet的生命周期

       1、诞生:用户第一次访问时,由容器创建他的实例和构造方法的执行。

       2、活着:一旦实例创建就驻留内存(单例)。每次用户的访问,容器都会调用service方法发出响应体,然后执行到doGet和 doPost方法;

      3、死亡:应用被关闭(卸载)或者Tomcat关闭了

           //用户第一次访问时,只执行一次

           public ServletDemo(){}

          //用户第一次访问时,执行一次。用于实例的创建

          public void init() throws ServletException {}

         //每次用户访问都执行

        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {}

        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{doGet(request,         response);}

       //调用一次。用于清理工作

       public void destroy() {}

四、HttpServlet的线程安全

       因为servlet是单例,在servlet中使用全局变量时当有多个客户端同时访问(购票系统)会出现数据错误,所以要在servlet中使用 局部变量

五、地址通配符

       写法一:*.do结尾。必须以*开头比如*.do

       写法二(比一优先级略高):以/开头,必须*结尾比如/api/*

六、Servlet的参数配置

       1、在Servlet的配置文件中,可以使用一个或多个标签为servlet配置一些初始化参数。

       <servlet>

                <servlet-name>ServletDemo1</servlet-name>  

                <servlet-class>com.example.servlet.ServletDemo1</servlet-class>  

<init-param>  可以配置多个init-param

<param-name>name</param-name>   参数的名字

<param-value>value</param-value>   参数的值

        </init-param>

        </servlet>

2、参数的获取

在doGet方法中获取参数

  ServletConfig config= getServletConfig(); 

String value = config.getInitParameter("name");

多个参数的获取

Enumeration e =config.getInitParameterNames(); //当前Servlet参数的名字

  while(e.hasMoreElements()){

    String paramName = (String)e.nextElement();

  config.getInitParameter(paramName)); 参数值

  }

七、ServletContext

1、每个应用只有一个ServletContext对象实例,是四大域中范围最大的域

2、ServletContext的生命周期

       诞生:应用被加载时就有容器创建好

       活着:应用不挂就一直活着

       死亡:tomcat挂了就挂了

八、ServletContext配置全局参数

<context-param>  可以配置多个context-param

<param-name>name</param-name>   参数的名字

<param-value>value</param-value>   参数的值

        </context-param>

单个全局参数的获取

ServletContext sc =getServletContext();

 String s =sc.getInitParameter("name");

  获取所有的参数

  Enumeration<String> e = sc.getInitParameterNames();

while(e.hasMoreElements()){

  StringcontextName = e.nextElement();

   sc.getInitParameter(contextName);

}

九、ServletContext应用

1、实现转发(不会重新请求,重定向会请求两次服务器)

ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/ServletContextDemo");//转发的地址。ServletContext得到的 地址必须以"/"开头,该"/"就代表着当前应用的访问路径
rd.forward(request, response);//转发

2、读取文件

ServletContext sc = getServletContext();
String realPath = sc.getRealPath("/WEB-INF/classes/
test.txt");//  文件存放的真实绝对路径
InputStream in = new FileInputStream(realPath);//构建文件的输入流

3、读取属性文件properties

properties中存 hello = hello

3.1类加载器读取:只能读取classes或者类路径中的任意资源。不适合读取特别大的资源

private void test() throws IOException {

ClassLoaderclassLoader = ServletContextDemo6.class.getClassLoader();

// URLurl = classLoader.getResource("b.properties");// classes下

URLurl = classLoader.getResource("com/example/resource/c.properties");// com.example.resource包下

FileInputStreaminputStream = new FileInputStream(url.getPath());

Properties properties = new Properties();

properties.load(inputStream);

或者

ClassLoaderclassLoader = ServletContextDemo6.class.getClassLoader();

// InputStream resourceAsStream = classLoader.getResourceAsStream("b.properties");

InputStream resourceAsStream = classLoader.getResourceAsStream("com/example/resource/c.properties");

Properties properties = new Properties();

properties.load(resourceAsStream);

  }

3、2利用ResourceBundle读取:文件在classes类路径内,只能读取properties的文件

ResourceBundle rb = ResourceBundle.getBundle("b");
ResourceBundle rb = ResourceBundle.getBundle("com.example.resource.c");
rb.getString("hello");

    3、3 利用ServletContext读取:可以读取应用中任何位置上的资源。使用限制:只能在web应用中用  a.properties  webroot     目录

String path = getServletContext().getRealPath("/a.properties");
// String path = getServletContext().getRealPath("/WEB-INF/classes/b.properties");
String path = getServletContext().getRealPath("/WEB-INF/classes/com/example/resource/c.properties");
InputStream in = new FileInputStream(path);
Properties props = new Properties();
props.load(in);
props.getProperty("hello");

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值