(No.32)

 

一:Servlet的一些细节:

1、由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。

<servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name><servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。 

一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name><url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。

例如:

2、同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。 

Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。

例如:

3Servlet1 映射到 /abc/* 

   Servlet2 映射到 /* 

   Servlet3 映射到 /abc 

   Servlet4 映射到 *.do 

其中URL请求与哪个最相像,就归为哪一类,强调:/* *.do 优先级高

 

4、针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。

Servlet的整个生命周期内,Servletinit方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servletservice方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servletservice()方法,service方法再根据请求方式分别调用doXXX方法。 

例子代码:

5、在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法。

例子:

5、缺省Servlet

6、线程安全:

  例子代码:

    

二、ServletConfig对象

Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数

servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servletinit方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息

例子:

package cn.csdn.web.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Enumeration;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet {

int x=1;

@Override

public void destroy() {

// TODO Auto-generated method stub

super.destroy();

System.out.println("销毁");

}

public DemoServlet() {

super();

System.out.println("创建对象");

}

@Override

public void init() throws ServletException {

// TODO Auto-generated method stub

super.init();

System.out.println("---------初始化------------");

}

@Override

public void init(ServletConfig config) throws ServletException {

super.init(config);

System.out.println("================"+config);

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/*设置编码*/

request.setCharacterEncoding("UTF-8");

String version = this.getServletConfig().getInitParameter("version");

String characterEncoding = this.getServletConfig().getInitParameter("characterEncoding");

request.setCharacterEncoding(characterEncoding);

/*获取一下PrintWriter对象*/

PrintWriter out = response.getWriter();

out.print("=-"+version);

Enumeration<String> enumer = this.getServletConfig().getInitParameterNames();

/*遍历*/

while(enumer.hasMoreElements()){

String name = enumer.nextElement();

String value = this.getServletConfig().getInitParameter(name);

System.out.println(name+"===="+value);

}

}

}

   

三、ServletContext应用

    ----》在MyEclipse中的开发
---->首先建立
--->Demo01Servlet.java中写入:

    package cn.csdn.web.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class Demo01Servlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doPost(request, response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

/*怎么样获取ServletContext对象*/

ServletContext context = this.getServletConfig().getServletContext();

context = this.getServletContext();

context.setAttribute("date","ddd");

response.sendRedirect("./data.html");

}

}

--->Demo02Servlet.java中写入:

package cn.csdn.web.servlet;

import java.io.IOException;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class Demo02Servlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

this.doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

/*怎么获取共享数据*/

ServletContext context = this.getServletContext();

String data = (String)context.getAttribute("data");

resp.getWriter().write(data);

}

}

--->在web.xml中写入:

<servlet>

    <servlet-name>Demo01Servlet</servlet-name>

  <servlet-class>cn.csdn.web.servlet.Demo01Servlet</servlet-class>

  </servlet>

  

  <servlet-mapping>

    <servlet-name>Demo01Servlet</servlet-name>

    <url-pattern>/demo01</url-pattern>

  </servlet-mapping>

  

  <servlet>

<servlet-name>Demo02Servlet</servlet-name>

<servlet-class>cn.csdn.web.servlet.Demo02Servlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>Demo02Servlet</servlet-name>

    <url-pattern>/demo02</url-pattern>

  </servlet-mapping>

  

----->建立一个data.html:添加

 <body>

  <div>

    <a href="./demo02">查看共享数据</a>

    </div>

  </body>

     ---->ok
*** Using Compiler 'V5.06 update 5 (build 528)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin' Build target 'STM32F407_UART_CMD' assembling startup_stm32f407xx.s... compiling dma.c... compiling stm32f4xx_hal_msp.c... compiling system_stm32f4xx.c... compiling Emm_V5.c... compiling main.c... compiling stm32f4xx_hal_flash.c... compiling usart.c... compiling gpio.c... compiling stm32f4xx_it.c... compiling stm32f4xx_hal_rcc_ex.c... compiling stm32f4xx_hal_flash_ex.c... compiling stm32f4xx_hal_rcc.c... compiling stm32f4xx_hal_uart.c... compiling stm32f4xx_hal_flash_ramfunc.c... compiling stm32f4xx_hal_gpio.c... compiling stm32f4xx_hal_pwr_ex.c... compiling stm32f4xx_hal_pwr.c... compiling stm32f4xx_hal_dma.c... compiling stm32f4xx_hal_cortex.c... compiling stm32f4xx_hal_exti.c... compiling stm32f4xx_hal.c... compiling stm32f4xx_hal_dma_ex.c... linking... STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_rcc.o(i.HAL_RCC_OscConfig). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches usart.o(i.HAL_UART_MspInit). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_IRQHandler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_gpio.o(i.HAL_GPIO_Init). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_dma.o(i.HAL_DMA_IRQHandler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_rcc.o(i.HAL_RCC_ClockConfig). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_SetConfig). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_dma.o(i.HAL_DMA_Init). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches main.o(i.main). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_Receive_IT). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches main.o(i.SystemClock_Config). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches dma.o(i.MX_DMA_Init). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_Start_Receive_DMA). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_Transmit_DMA). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_dma.o(i.HAL_DMA_Abort). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.USART1_IRQHandler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_DMAReceiveCplt). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_dma.o(i.DMA_CheckFifoParam). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches emm_v5.o(i.Emm_V5_Pos_Control). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_DMAStop). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_rcc.o(i.HAL_RCC_GetSysClockFreq). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_dma.o(i.HAL_DMA_Start_IT). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches gpio.o(i.MX_GPIO_Init). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_cortex.o(i.HAL_NVIC_SetPriority). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_Init). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_Transmit_IT). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_msp.o(i.HAL_MspInit). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_EndRxTransfer). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_DMAError). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal.o(i.HAL_InitTick). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_DMATransmitCplt). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches usart.o(i.MX_USART1_UART_Init). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches usart.o(i.MX_USART6_UART_Init). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_dma.o(i.DMA_CalcBaseAndBitshift). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_dma.o(i.DMA_SetConfig). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal.o(i.HAL_Init). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_cortex.o(i.HAL_SYSTICK_Config). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches system_stm32f4xx.o(i.SystemInit). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal.o(i.HAL_Delay). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_dma.o(i.HAL_DMA_Abort_IT). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_cortex.o(i.HAL_NVIC_SetPriorityGrouping). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_rcc.o(i.HAL_RCC_GetPCLK1Freq). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_rcc.o(i.HAL_RCC_GetPCLK2Freq). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_DMARxHalfCplt). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_Receive_DMA). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_EndTxTransfer). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_cortex.o(i.HAL_NVIC_EnableIRQ). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_EndTransmit_IT). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal.o(i.HAL_IncTick). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.DMA2_Stream1_IRQHandler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.DMA2_Stream2_IRQHandler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.DMA2_Stream6_IRQHandler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.DMA2_Stream7_IRQHandler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.USART6_IRQHandler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_DMAAbortOnError). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_rcc.o(i.HAL_RCC_GetHCLKFreq). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal.o(i.HAL_GetTick). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.UART_DMATxHalfCplt). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.SysTick_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches main.o(i.Error_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.BusFault_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.HardFault_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.MemManage_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.UsageFault_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.DebugMon_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.NMI_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.PendSV_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_it.o(i.SVC_Handler). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UARTEx_RxEventCallback). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_ErrorCallback). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_RxCpltCallback). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_RxHalfCpltCallback). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_TxCpltCallback). STM32F407_UART_CMD\STM32F407_UART_CMD.axf: Error: L6405E: No .ANY selector matches stm32f4xx_hal_uart.o(i.HAL_UART_TxHalfCpltCallback). Not enough information to list image symbols. Not enough information to list load addresses in the image map. Finished: 2 information, 0 warning and 74 error messages. "STM32F407_UART_CMD\STM32F407_UART_CMD.axf" - 74 Error(s), 0 Warning(s). Target not created. Build Time Elapsed: 00:00:10
最新发布
07-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值