Servlet基础2

续Servlet基础1   https://blog.csdn.net/qq_42980244/article/details/96827153

3.第二次Servlet :认识ServletConfig对象
3.1实现Servlet接口后,有一个getServletConfig()方法,返回值为ServletConfig

3.2ServletConfig作用:获取Servelt的初始化参数

在web.xml中的Servlet节点下加入以下代码

<!--  属于这个servlet的初始化参数  -->
		<init-param>
			<param-name>username</param-name>
			<param-value>小明</param-value>
		</init-param>
		
		<init-param>
			<param-name>pwd</param-name>
			<param-value>123</param-value>
		</init-param>

3.3如何获得ServletConfig?
定义一个私有的成员变量config,把init()方法中的ServlerConfig对象传给成员变量,再在getServletConfig()方法中获取config对象

/**
 * 获取ServletConfig配置信息
 */
public class SeServlet implements Servlet{
	
	//定义一个成员变量,把init()里面的config传到getServeltCconfig方法中返回
	private ServletConfig config;
	@Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		this.config=config;
		System.out.println("我出生啦");
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("我被调用啦");
		//获取所有键的集合
		Enumeration<String> names =  getServletConfig().getInitParameterNames();
		
		//遍历枚举,可以获取所有的键的值
		while(names.hasMoreElements()) {
			String name = names.nextElement();
			String val = getServletConfig().getInitParameter(name);
			System.out.println(name+"--"+val);
		}
		
		String servletName = getServletConfig().getServletName();
		System.out.println(servletName);
	}
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("我要死了");
		
	}
	
	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		
		return this.config;
	}

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return "";
	}

}

3.4servletConfig的几个方法:
getInitParameter()
getInitParameterNames()
getServletContext()
getServletName()


4.认识ServletContext对象
4.1ServlertContext引入
Servletconfig有一个方法getServlerContext(),ServlertContext是Servlet的四大域对象之一,它与服务器同生共死,服务器启动时,ServlertContext被创建,服务器停止时ServlertContext被销毁

4.2ServletContext对象
一个web项目 对应一个web.xml
web.xml中可以有多个Servlet,ServletContext对象被所有servlet共享
而ServletConfig是某个Servlet的配置。
所以在web.xml中<context-param>写在根目录下,(也就是<Servlet>的外面)
而<init-param>写在<Servlet>里面的原因。
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	
	<context-param>
		<param-name>暑假复习</param-name>
		<param-value>Servlet</param-value>
	</context-param>
	<context-param>
		<param-name>year</param-name>
		<param-value>2019/7</param-value>
	</context-param>
	
	<!-- 配置CServlet -->
	<servlet>
		<!-- 配置servlet的名字 -->
		<servlet-name>login</servlet-name>
		<!-- 这个servlet的全类名  全限定名 -->
		<servlet-class>com.a_firstServlet.CServlet</servlet-class>
		
		
	</servlet>
	<servlet-mapping>
		<servlet-name>login</servlet-name>
		<url-pattern>/c</url-pattern>
	</servlet-mapping>
	
	
	
	
	<!-- 配置BServlet -->
	<servlet>
		<!-- 配置servlet的名字 -->
		<servlet-name>login</servlet-name>
		<!-- 这个servlet的全类名  全限定名 -->
		<servlet-class>com.a_firstServlet.BServlet</servlet-class>
		
		<!--  属于这个BServlet的初始化参数  -->
		<init-param>
			<param-name>username</param-name>
			<param-value>小明</param-value>
		</init-param>
		
		<init-param>
			<param-name>pwd</param-name>
			<param-value>123</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>login</servlet-name>
		<url-pattern>/b</url-pattern>
	</servlet-mapping>
</web-app>

CServlet.Java代码片段

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		
		//获取ServletContext对象
		ServletContext servletContext = getServletConfig().getServletContext();
		
		String a = servletContext.getInitParameter("暑假复习");
		String b = servletContext.getInitParameter("year");
		System.out.println(a+"  "+b);
		
	}

4.3访问
http://localhost:8809/SummerWeb/c 可以访问到<context-param>
http://localhost:8809/SummerWeb/b  也可以访问到<context-param>,还可以访问到<init-param>


4.4ServletContext对象的几个常用方法
getAttribute()
setAttribute()
removeAttribute()
getContextPath()  获取项目相对路径
getRealPath()   获取项目绝对路径

ServletContext servletContext = getServletConfig().getServletContext();
		String path = servletContext.getContextPath();
		String realpath= servletContext.getRealPath("");
		System.out.println(path+"   "+realpath);

结果:/SummerWeb        E:\apache-tomcat-9.0.14\webapps\SummerWeb\

5.实现Servlet的第二种方式--继承GenericServlet类
genericServlet实现了Servlet接口,ServletConfig接口,可以直接拿到ServletContext对象
继承GenericServlet只需要实现他的service()方法,可查看源码
GenericServlet源码中,在service()中判断请求类型,调用对应的方法

package com.b_secondServlet;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class AGenerServlet extends GenericServlet {

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
	}
	

}

6.实现Servlet的第三种方式--继承HttpServlet类
HttpServlet继承了GenericServlet,genericServlet能做的,HttpServlet也能做
继承了HttpServlet类,不用实现他的任何方法
只需要写doget()和dopost()
6.1
写一个html页面

  <body>
  111111
  <form action="httpa" method="post">
  	<button>提交</button>
  </form>
  </body>
public class AHttpServler extends HttpServlet{
	
	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("get");
	}
}

在浏览器中访问该html页面,405,提交方式不正确
再将method改为get则可以访问

或者在 AHttpServler中添加dopost()方法

7.在web project 中直接新建一个Servlet
在此之前,我们创建的是class,web.xml需要自己编写,现在新建一个Servlet,web.Xml会自动帮我们生成。

 

Sevlet基础3       https://blog.csdn.net/qq_42980244/article/details/97019665

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值