Jsp与Servlet相关技术

一、建立和使用一个上下文监听者:

   容器通过web.xml部署描述文件发现和使用监听者:要监听ServletContext事件,需要编写一个实现ServletContext-Listener的监听者类,把它放在WEB-INF/classes目录中,并在部署描述文件中放一个<listener>

元素来告诉容器。

  ①创建一个监听者类:

    package com.example;

importjavax.servlet.*;

public classMyServletContextListener implements ServletContextListener {

public voidcontextInitialized(ServletContextEvent event) {

ServletContext sc=event.getServletContext();//由事件得到ServletContext

String dogBreed=sc.getInitParameter("breed");//使用上下文得到初始化参数

Dog d=new Dog(dogBreed);//建立一个新Dog

sc.setAttribute("dog",d);

}

public voidcontextDestroyed(ServletContextEvent event) {

}

}

相应的web.xml部署描述文件<?xml version="1.0"encoding="UTF-8"?>

<web-app

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID"version="3.0">

<display-name>Simpleweb application</display-name>

<servlet>

<servlet-name>ListenerTester</servlet-name>

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

</servlet>

<servlet-mapping>

<servlet-name>ListenerTester</servlet-name>

<url-pattern>/ListenTest.do</url-pattern>

</servlet-mapping>

<context-param>

<param-name>breed</param-name>

<param-value>GreatDane</param-value>

</context-param>

<listener>

<listener-class>

com.example.MyServletContextListener</listener-class>

</listener>

</web-app>

3、属性API   3个属性作用域(上下文、请求和会话)分别由ServletContext、ServletRequest和HttpSession接口处理。每个接口中对应属性的API方法完全相同:

       Object     getAttribute(String name)

       void     setAttribute(String name,Object value)

       void     removeAttribute(String name)

       Enumeration getAttributeNames()

4、保护线程安全:对上下文加锁:

在doGet或doPost中:

synchronized(getServletContext()){

   getServletContext().setAttribute("foo","40");

     

   getServletContext().setAttribute("bar","22");

  out.println(getServletContext().getAttribute("foo"));

  out.println(getServletContext().getAttribute("bar"));

  }

对HttpSession同步来保护绘会话属性

在doGet或doPost中:

synchronized(session){

   getServletContext().setAttribute("foo","40");

     

   getServletContext().setAttribute("bar","22");

  out.println(getServletContext().getAttribute("foo"));

  out.println(getServletContext().getAttribute("bar"));

  }

5、请求属性和请求分派:

 //code in a doGet()

   BeerExpert be=new BeerExpert();

   ArrayList result=be.getBrands(c);

  request.setAttribute("styles",result);//把模型数据放在请求作用域中

   RequestDispatcherview=request.getRequestDispatcher("result.jsp");

   view.forward(request,response); 

 

 RequestDispatcher:

①从ServletRequest得到RequestDispatcher

   RequestDispather view=request.getRequestDispatcher("result.jsp");

 ②从ServletContext得到RequestDispatcher

   RequestDispatcher view=getServletContext().getRequestDispatcher("/result.jsp");

猜你喜欢

转载自blog.csdn.net/mafang9601/article/details/80275663
今日推荐