Servlet——1

本文详细介绍了Tomcat服务器的特点及应用场景,深入解析了Servlet的工作原理,包括配置、初始化参数的设置与获取、请求与响应处理等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

2.pattern 模式

3.

4.

在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是:

标记容器是否在启动的时候就加载这个servlet。

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。


5.

(1)配置初始化参数

<!-- 配置web应用初始化参数 ,局部的初始化参数,直接在servlet里面配置-->
<servlet>
<init-param>
    	<param-name>user</param-name>
    	<param-value>root</param-value>
    </init-param>
    
    <init-param>
    	<param-name>lily</param-name>
    	<param-value>123456</param-value>
    </init-param>   
 </servlet>

(2)获取初始化参数,即:ServletConfig对象的使用

>getInitParameter获取指定参数名的初始化参数

>getInitParameterNames获取参数名组成的对象

public void init(ServletConfig servletConfig) throws ServletException {
// Put your code hereSystem.out.println("我爱李莉");
//通过下面2种方式获得初始值
    String user=servletConfig.getInitParameter("user");
    System.out.println("user:"+user);//获取多个name值
    Enumeration<String> names=servletConfig.getInitParameterNames();
    while(names.hasMoreElements()){
         String name=names.nextElement();
         String value=servletConfig.getInitParameter(name);
         System.out.println("--"+name+":"+value);
}}
enumerate枚举

 

6.ServletContext接口

ServletConfig获取

代表当前web应用,可以获取当前代表应用的各方面信息

Servlet引擎为每个web应用程序都创建了一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServletConfig.getServletContext方法可以返回ServletContext对象的引用。

web应用程序中所有的Servlet都共享同一个ServletContext对象,所以ServletContext对象被称之为application对象

功能:

获取web应用程序的初始化参数

application域范围的属性

获取虚拟路径所映射的本地路径

(1)获取当前web应用的初始化参数

context 环境,上下文,来龙去脉

  <!-- 配置web应用初始化参数 ,全局的初始化参数,可以被所有的servlet获取-->
  <context-param>
  	<param-name>driver</param-name>
  	<param-value>com.mysql.jdebc.Driver</param-value>
  </context-param>
  <context-param>
  	<param-name>jdbcUrl</param-name>
  	<param-value>jdbc.mysql://</param-value>
  </context-param>

                       ServletContext servletContext=servletConfig.getServletContext();
			String driver=servletContext.getInitParameter("driver");
			System.out.println("driver:"+driver);
			//获取多个name值
			Enumeration<String> names_1=servletContext.getInitParameterNames();
			while(names_1.hasMoreElements()){
				String name_1=names_1.nextElement();
				String value_1=servletContext.getInitParameter(name_1);
				System.out.println("-->"+name_1+":"+value_1);
			}

(2)获取当前web应用的某个文件在服务器上的绝对路径,而不是部署的物理路径

//获取文件路径
			String realPath=servletContext.getRealPath("/servletDemo/WebRoot/index.jsp");
			System.out.println(realPath);
结果是:D:\apache-tomcat-7.0.72\webapps\servletDemo\servletDemo\WebRoot\index.jsp


(3)获取当前web应用的名称

String contextPath=servletContext.getContextPath();
			System.out.println(contextPath);
结果是:/servletDemo  xml文件中更改成这个路径了

(4)获取当前web应用某一个文件对应的输入流

getResourceAsStream(String path);//path为当前web应用的根目录

InputStream a1=servletContext.getResourceAsStream("/servletDemo/WebRoot/index.jsp");


(5)和.attribute相关的几个方法


7.get请求和post请求


http用于定义web浏览器和web服务器之间交换数据的过程以及数据本身的格式

(1)发送get请求有以下几种情况

超链接

<form>中使用get

get传递的数据量<1K

get把请求参数追加到url后面


(2)post

<form>中使用post

post方式把各个表单字段元素和数据作为http消息的实体内容发送给web服务器


8.servlet中获取信息


(1)service方法,每次都会调用

public void service(ServletRequest servletRequest,ServletResponse servletResponse){
		System.out.println(servletRequest);
	};
结果显示:org.apache.catalina.connector.RequestFacade@39a63eb0  是Apache服务器帮忙实现的

实际山,ServletRequest和ServletResponse这两个接口的实现类都是Apache服务器帮忙实现的,并在apache服务器调用自身方法service的时候传入


ServletRequest:封装了请求信息,可以从中获取任何请求信息

ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现,


(2)ServletRequest


——>String getParameter(String name)

根据请求参数的名字,返回参数值。如果请求参数有多个值,该方法只能获取到第一个提交的值

——>String [] getParameterValues(String name)

根据请求参数的名字,返回一组值

		String [] interesting=request.getParameterValues("interesting");
		for(String interest:interesting){
			System.out.println(interest);
		}


——> Map getParameterMap()

返回请求参数的键值对:key:参数名,value:参数值,String数组类型

获得的是一个String数组

		Map<String,String[]> map=(Map<String, String[]>) request.getParameterMap();
		for(Map.Entry<String,String[]> entry:map.entryset){
			System.out.println(entry.getKey()+":"+Arrays.asList(entry.getValue()));
		}


——> Enumeration getParameterNames()

用于返回参数名对应的Enumeration 对象,类似于ServletConfig(或者ServletContext)里面的getInitParameterNames()

		Enumeration<String> names=request.getParameterNames();
		while(names.hasMoreElements()){
			String name=names.nextElement();
			String value=request.getParameter(name);
			System.out.println(name+":"+value);


——> String[] getParameterValues()



-> 获取请求的url

//下面进行强制转换,因为HttpServletRequest里面封装的方法是可用的
		HttpServletRequest httpServletRequest=(HttpServletRequest) request;
		String requestURL=httpServletRequest.getRequestURI();
		System.out.println("请求的url地址为:"+requestURL);

结果为:请求的url地址为:/servletDemo/loginServlet

注:http://localhost:8080/servletDemo/loginServlet  的站点为:http://localhost:8080,url地址为:/servletDemo/loginServlet


-> 获取请求的“方法”

		//下面进行强制转换,因为HttpServletRequest里面封装的方法是可用的
		HttpServletRequest httpServletRequest=(HttpServletRequest) request;
		String method=httpServletRequest.getMethod();
		System.out.println("请求的method为:"+method);
结果为:请求的method为:POST

-> 获取请求的查询字符串。如果是get请求,就是“?”后面的那一串。如果是post请求,就没有

		String query=httpServletRequest.getQueryString();
		System.out.println("请求的查询字符串为:"+query);
结果为:请求的查询字符串为:user=11&password=22&interesting=reading&interesting=game&interesting=basktable

-> 获取Servlet的映射路径

		String servletPath=httpServletRequest.getServletPath();
		System.out.println("servlet的映射路径是:"+servletPath);

结果为:servlet的映射路径是:/loginServlet


-> HttpServletRequest是ServletRequest的子接口,针对http请求所定义里面包含了大量的获取http请求的方法


(2)ServletResponse

说明:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现

-> getWriter();返回PrintWriter

		PrintWriter out=response.getWriter();
		out.println("hello lily...");

结果为:浏览器用户界面会显示内容为hello lily...


-> response.setContentType("响应类型");用来设置相应的内容类型

                response.setContentType("application/msword");//这类设置响应的内容类型
		PrintWriter out=response.getWriter();
		out.println("hello lily...");

结果为:浏览器会自动下载一个word文档,内容为hello lily...


-> void sendRedirect(String location):请求的重定向,此方法在HttpServletRequest中定义,所以要先进行强制转换,然后才能定义


(2)HttpServlet

(1)是一个servlet,继承自GenericSevlet,针对http协议所定制

(2)实现的细节:在service()方法中直接把ServlevtRequest和ServlevtResponse转化为HttpServlevtRequest和HttpServlevtResponse,并重新调用重载的service(HttpServlevtRequest,HttpServlevtResponse)。在service中获取请求的方式:String method=request.getMethod(),紧接着创建doGet方法或者doPost方法

参考下面具体实现过程:

package com.guigu.javaweb;
import java.io.IOException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;

//基于http协议定义的基类
public class HttpServletRequest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	public void service(ServletRequest arg0,ServletResponse arg1) throws IOException {
		if(arg0 instanceof HttpServletRequest ){//强制转换
			HttpServletRequest request=(HttpServletRequest) arg0;
			if(arg1 instanceof HttpServletResponse){
				HttpServletResponse response=(HttpServletResponse) arg1;
				service(request, response);
			}
		}
	}
	
	public void service(HttpServletRequest request,HttpServletResponse response){
		//1.获取请求方式
		String method=request.getMethod();
		//2.根据请求方式选择对应的处理方法
		if("GET".equalsIgnoreCase(method)){
			doGet(request, response);
		}
		else if ("POST".equalsIgnoreCase(method)) {
			doPost(request, response);
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) {
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response) {
	}

	private String getMethod() {
		return null;
	}
}


(3)实际开发中,直接继承HttpServlevt,并根据请求方式复写do×××方法(doGet方法或者doPost方法)

(4)优点:直接由针对性的覆盖do×××方法,直接使用HttpServlevtRequest和HttpServlevtResponse,不在使用强行转换

5GenericSevlet:Servlet和ServletConfig的继承






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值