了解servlet基础有助于我们了解web服务,其实如果你servlet基础好的话,你可以不用springmvc这种第三方框架,自己包装一个简单servlet框架,接下我们来说下工作中常用的servlet基础
1、ServletConfig
这个类主要是获取servlet配置文件信息,比如获取初始化参数,和servletContent,举个列子
假如我web.xml配置了一个servlet
<servlet>
<servlet-name>Gservlet</servlet-name>
<servlet-class>servlet.Gservlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>test</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Gservlet</servlet-name>
<url-pattern>/Gservlet</url-pattern>
</servlet-mapping>
public class Gservlet extends HttpServlet{
private String param;
public void setParam(String param) {
this.param = param;
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
ServletConfig config = this.getServletConfig(); //断点打在这里获取初始化参数及其他信息
}
}
1、ServletContent
servlet上下文,它保护整个web服务的上下信息,这个接口功能很强大,可以动态创建servlet,filter,listent
并且注册他们,还提供获取上下文的初始化参数信息,和上下web的工程的信息
比如动态注册一个servlet应用
ServletRegistration.Dynamic dynamic = servletContext.addServlet("dservlet",DServlet.class);
dynamic.addMapping("/Dservlet");
获取web应用的初始化参数
web.xml
<context-param> <param-name>encode</param-name> <param-value>utf-8</param-value> </context-param>
servletContext.getInitParameterNames()
用的最多应该还是
servletContext.getContextPath() //获取web工程名,取决你web包的名称
servletContext.getRealPath("/xx") //获取文件在相对web工程目录的相对位置
3、ServletRegistration
这个类是提供动态注册的类,spring boot 就是通过动态注册servlet到容器
举个注册的列子
try {
//比如注册RgisterServlet类
RgisterServlet rgisterServlet = servletContext.createServlet(RgisterServlet.class);
rgisterServlet.setName("register");
ServletRegistration.Dynamic dynamic = servletContext.addServlet("register",rgisterServlet);
dynamic.addMapping("/registerServlet");
} catch (ServletException e) {
e.printStackTrace();
}
4、ServletContainerInitializer
这个类提启动注册相关的servlet功能,这个提供了
void onStartup(Set<Class<?>> var1, ServletContext var2) throws ServletException; //来注册servlet服务
比如我们用spring开发web程序时,会用到一个spring web包(注意,一定要这种目录)

接下来看看里面的内容
![]()
里面提供了一个SpringServletContainerInitializer类,这个类把ServletContext带入到这个,然后通过相关功能,把@controller 类动态(ServletRegistration)注入到servlet容器中,所有如果我们需要动态注册相关的servlet到容器中,只要和上面一样在META-INF/services/java.servlet.ServletContainerInitializer中写入我们的实现类就行(只要继承 ServletContainerInitializer)
4043

被折叠的 条评论
为什么被折叠?



