Servlet的应用--- ServletConfig和ServletContext

1.Servlet类配置初始化参数------ServletConfig

       (1)在配置文件中设置:

                在web.xml中设置

<init-param>

                   <param-name>corporation</param-name>

                  <param-value>csdn</param-value>

           </init-param>

(2)在servlet类中获取配置文件中的值的读取

       第一种:   

ServletConfig sc = this.getServletConfig();

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

           String str = sc.getServletName();

    第二种:

           String name = this.getInitParameter("corporation");

           //获取注册名字

           String str = this.getServletName();

      

      

注:(1)每一个serlvet都有一个自己的ServletConfig对象,不同的类不能访问不同的部署文件

     (2)配置文件中的设置可以是只在一个servlet类中设置,也可以是设置一个,在< web-app></web-app>标签中设置,可在同一个站点下访问

              <web-app>

                                   <servlet>servlet名字和servlet类</servlet>

                                   <servlet-mapping>servlet名字和url模式</servlet-mapping>

                                   <context-param>参数名和参数值</context-param>

                            </web-app>

       (3)init()方法和初始化的区别

如果要想读取servlet.Config中的文件时,必须在初始化的时候用init()方法

如果不用读取serflet.config中的文件时,可以用构造方法

一般是修改无参的父类,带参数的一般不修改

2. 配置Web应用上下文初始化参数-------servletContext  

(1)在web.xml中设置和获取

       设置:

<context-param>

            <param-name>encoding</param-name>

            <param-value>utf-8</param-value>

        </context-param>

    获取:

    String encoding = this.getInitParameter("encoding");

(2)在server中的设置

       <Context path=”/demo docBase=”.\demo”>

              <Parameter name="companyName" value="csdn"/>

       </Context>

       注:一个web应用程序只有一个ServletContext

(3)设置属性名和属性值

setAttribute()设置属性名和属性值

getAttribute()获取属性名和属性值

(1)在容器源中设置属性

ServletContext context = this.getServletContext();

           //设置上下文属性

           context.setAttribute("username", username);

           response.sendRedirect("secuss");

(2)在跳转的页面中读取属性

//通过获取上下文对象的ServletContext的对象来输入输入正确的合法用户信息

       ServletContext context = this.getServletContext();

       String name = (String) context.getAttribute("username");

3.ServletConfig 和servletContext的区别:

(1)整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。

(2)Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。.

4.Servlet的线程安全问题

•            使用synchronized

–        使用synchronized关键字同步操作成员变量和共享数据的代码,就可以防止可能出现的线程安全问题。

•          尽量少使用成员变量和共享数据

–        ServletContext是可以多线程同时读/写成员变量和共享数据的,线程是不安全的。

–        ServletRequest对象在service方法的范围内是有效的,不要试图在service方法结束后仍然保存请求对象的引用。

–        Servlet本身就是多线程的,在Servlet中再创建线程,将导致执行情况复杂化,出现多线程安全问题。

5.获取请求行的相关消息

       getMethod方法返回http请求消息中的请求方式    

       getContextPath方法是返回请求资源所属于的web的虚拟路径

              //获取提交的方式

       System.out.println(request.getMethod());

       //获取服务器的名称

       System.out.println(request.getServerName());

       //请求的资源的URL

       System.out.println(request.getRequestURI());

       //查询字符串  get方法在地址栏上输入的信息

       System.out.println(request.getQueryString());

       //获取版本

       System.out.println(request.getProtocol());

       //获取上下文的路径

       System.out.println(request.getContextPath());

       //获取

       System.out.println(request.getServletPath());

       如果在web.xml中设置的为*,则输入的值都可以访问到

       <servlet-mapping>

             <servlet-name>TestRequest</servlet-name>

            <url-pattern>/servlet/*</url-pattern>

       </servlet-mapping>

访问方式:http://localhost:8080/demoWeb/servlet/sshdkf

5.获取网络连接信息

       getRemoteAddr方法是返回客户机的IP地址,格式是“192.168.0.3”

       getRemoteHost方法是返回客户机的主机名

       System.out.println(request.getRemoteAddr());

       System.out.println(request.getRemoteHost());

       System.out.println(request.getRemotePort());

       //获取本机的IP地址

       System.out.println(request.getLocalAddr());

       //获取本机的名称

       System.out.println(request.getLocalName());.

6.获取请求头

       //获取所有请求头的字段的名称

       Enumeration enName = request.getHeaderNames();

       //判断如果有更多的元素

       while(enName.hasMoreElements()){

           String headerName = (String) enName.nextElement();

    System.out.println(headerName+":"+request.getHeader(headerName));

      }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值