本文的目的是介绍SpringJavaConfig:为自定义Servlet添加映射的详细情况,特别关注springboot自定义servlet的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,
本文的目的是介绍Spring JavaConfig:为自定义Servlet添加映射的详细情况,特别关注springboot自定义servlet的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Spring JavaConfig:为自定义Servlet添加映射的机会,同时也不会遗漏关于Java EE javax.servlet 中的 ServletConfig 接口、java EE :GenericServlet 抽象类、ServletConfig 接口、Java ServletContext与ServletConfig接口使用教程、java.lang.NoSuchMethodError:javax.servlet.ServletContext.getJspConfigDescriptor与jsp一起使用嵌入式码头的知识。
本文目录一览:- Spring JavaConfig:为自定义Servlet添加映射(springboot自定义servlet)
- Java EE javax.servlet 中的 ServletConfig 接口
- java EE :GenericServlet 抽象类、ServletConfig 接口
- Java ServletContext与ServletConfig接口使用教程
- java.lang.NoSuchMethodError:javax.servlet.ServletContext.getJspConfigDescriptor与jsp一起使用嵌入式码头
Spring JavaConfig:为自定义Servlet添加映射(springboot自定义servlet)
在基于javaconfig的Spring 4.0项目中,如何将某个URL的映射添加到Spring DispatcherServlet之外的Servlet。
我的情况下,我想使用通过servlet提供的H2数据库中的h2console org.h2.server.web.WebServlet
编辑: 在即将到来的Spring Boot
1.3中,可以使用配置参数启用h2console:http
://docs.spring.io/spring-boot/docs/current-
SNAPSHOT/reference/htmlsingle/#boot-features-sql-h2
-安慰
启用它就像将这两行添加到您的中一样简单application.properties
:
spring.h2.console.enabled=truespring.h2.console.path=/console
答案1
小编典典最简单的方法是使用直接实现WebApplicationInitializer的初始化程序,并使用onStartup(ServletContextservletContext)
以下代码添加到方法中;
ServletRegistration.Dynamic h2Servlet = servletContext.addServlet("h2Servlet", new org.h2.server.web.WebServlet());h2Servlet.setLoadOnStartup(1);h2Servlet.addMapping("/h2/*");
Java EE javax.servlet 中的 ServletConfig 接口
ServletConfig 接口
public interface ServletConfig
实现类:GenericServlet、HttpServlet
一、介绍
一个供 servlet 容器使用配置对象,在 servlet 初始化期间,用来向它传递信息。
二、方法
1、ServletContext getServletContext( )
返回一个 ServletContext(Servlet 上下文)对象的引用,调用者在这个 ServletContext 中执行。
这个 ServletContext 对象,是被调用者用来与其 servlet 容器进行交互的。
2、String getInitParameter(String name)
获取给定名称的初始化参数的值;如果初始化参数不存在,返回 null。
3、Enumeration<String> getInitParameterNames( )
返回 servlet 的所有初始化参数的名字,以一个枚举对象的形式返回。
如果不存在任何初始化参数,返回一个空的 Enumeration。
4、String getServletName( )
返回这个 Servlet 实例的名字。
这个名称可以通过服务器管理提供,在 Web 应用程序部署描述符(web.xml?)中分配,对于未注册(因此未命名)的 servlet 实例,将返回 Servlet 类的类名(默认小写类名第一个字母?)。
java EE :GenericServlet 抽象类、ServletConfig 接口
ServletConfig 接口:当前 Servlet 在 web.xml 中相关配置信息
package javax.servlet;
import java.util.Enumeration;
public interface ServletConfig {
// 获取当前 ServletName 信息
String getServletName();
// 获取当前 Web 应用 ServletContext 对象
ServletContext getServletContext();
// 获取当前 Servlet 指定初始化参数名值信息
String getInitParameter(String var1);
// 获取当前 Servlet 初始化参数名组成枚举
Enumeration<String> getInitParameterNames();
}
GenericServlet 抽象类:实现 ServletConfig 、Servlet 接口
import java.io.IOException;
import java.io.Serializable;
import java.util.Enumeration;
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
private static final long serialVersionUID = 1L;
private transient ServletConfig config;
public GenericServlet() {
}
public void destroy() {
}
// 两个 init 方法设计较为巧妙
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
// 避免实现类修改 导致 ServletConfig 赋值为空
public void init() throws ServletException {
}
// 核心方法
public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
}
Java ServletContext与ServletConfig接口使用教程
ServletContext接口
1.概念
当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,可以和程序的容器(服务器)来通信。
两种获取方式:
通过request对象获取
ServletContext context = request.getServletContext();
通过HttpServlet获取
ServletContext context = this.getServletContext();
2.功能
1、获取Web应用程序的初始化参数
定义了getInitParameterNames()和getInitParameter(String name)方法分别用来获取参数名和参数值。
package cn.itcast.chapter04.servlet; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet03 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 得到ServletContext对象 ServletContext context = this.getServletContext(); // 得到包含所有初始化参数名的Enumeration对象 Enumeration<String> paramNames = context.getInitParameterNames(); // 遍历所有的初始化参数名,得到相应的参数值,打印到控制台 out.println("all the paramName and paramValue are following:"); // 遍历所有的初始化参数名,得到相应的参数值并打印 while (paramNames.hasMoreElements()) { String name = paramNames.nextElement(); String value = context.getInitParameter(name); out.println(name + ": " + value); out.println("<br>"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
2、实现多个Servlet对象共享数据
由于一个Web应用中的所有Servlet共享同一个ServletContext对象,因此ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。在ServletContext接口中定义了分别用于增加、删除、设置ServletContext域属性的四个方法,如表1所示。
表1 ServletContext接口的方法
方法说明 | 功能描述 |
---|---|
Enumeration getAttributeNames() | 返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的所有域属性名 |
Object getAttibute(String name) | 根据参数指定的属性名返回一个与之匹配的域属性值 |
void removeAttribute(String name) | 根据参数指定的域属性名,从ServletContext中删除匹配的域属性 |
void setAttribute(String name,Object obj) | 设置ServletContext的域属性,其中name是域属性名,obj是域属性值 |
ServletContext context = this.getServletContext(); // 通过setAttribute()方法设置属性值 context.setAttribute("data", "this servlet save data");
3、读取Web应用下的资源文件
ServletContext接口中用于获取资源路径的相关方法,具体如下:
表2 ServletContext接口的常用方法
方法说明 | 功能描述 |
---|---|
Set getResourcePaths(String path) | 返回一个Set集合,集合中包含资源目录中子目录和文件的路径名称。参数path必须以正斜线(/)开始,指定匹配资源的部分路径 |
String getRealPath(String path) | 返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数path代表资源文件的虚拟路径,它应该以正斜线开始(/)开始,“/”表示当前Web应用的根目录,如果Servlet容器不能将虚拟路径转换为文件系统的真实路径,则返回null |
URL getResource(String path) | 返回映射到某个资源文件的URL对象。参数path必须以正斜线(/)开始,“/”表示当前Web应用的根目录 |
InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的InputStream输入流对象。参数path传递规则和getResource()方法完全一致 |
编写读取itcast.properties资源文件:
package cn.itcast.chapter04.servlet; import java.io.*; import java.util.Properties; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet06 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); ServletContext context = this.getServletContext(); PrintWriter out = response.getWriter(); InputStream in = context .getResourceAsStream("/WEB- INF/classes/itcast.properties"); Properties pros = new Properties(); pros.load(in); out.println("Company=" + pros.getProperty("Company") + " <br>"); out.println("Address=" + pros.getProperty("Address") + " <br>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
ServletConfig接口
1.概念
Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig cofig)方法将ServletConfig对象传递给Servlet。
2.ServletConfig的常用方法
表1 ServletConfig接口的常用方法
方法说明 | 功能描述 |
---|---|
String getInitParameter(String name) | 根据初始化参数名返回对应的初始化参数值 |
Enumeration getInitParameterNames() | 返回一个Enumeration对象,其中包含了所有的初始化参数名 |
ServletContext getServletContext() | 返回一个代表当前Web应用的ServletContext对象 |
String getServletName() | 返回Servlet的名字,即web.xml中<servlet-name>元素的值 |
package cn.itcast.chapter04.servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet02 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); // 获得ServletConfig对象 ServletConfig config = this.getServletConfig(); // 获得参数名为encoding对应的参数值 String param = config.getInitParameter("encoding"); out.println("encoding="+param); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
到此这篇关于Java ServletContext与ServletConfig接口使用教程的文章就介绍到这了,更多相关Java ServletContext与ServletConfig内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
- JavaWeb入门:ServletContext详解和应用
- 深入了解Java ServletContext
- Java ServletContext对象原理及功能解析
- Java ServletContext对象用法解析
- Java基于ServletContextListener实现UDP监听
- JavaWeb ServletContext基础与应用详细讲解
java.lang.NoSuchMethodError:javax.servlet.ServletContext.getJspConfigDescriptor与jsp一起使用嵌入式码头
如何解决java.lang.NoSuchMethodError:javax.servlet.ServletContext.getJspConfigDescriptor与jsp一起使用嵌入式码头?
您的类路径上有一些不兼容的servlet API较旧版本。尝试从层次结构中的每个类加载器中打印出类路径。还要调查您的启动安装程序,以查看将哪些jar放入运行时类路径。
一月
解决方法
我正在尝试在嵌入式模式下使用码头。初始化时出现以下错误:
java.lang.NoSuchMethodError: javax.servlet.ServletContext.getJspConfigDescriptor()Ljavax/servlet/descriptor/JspConfigDescriptor;
at org.apache.jasper.servlet.TldScanner.scanJspConfig(TldScanner.java:148)
搜索了jetty
9.2.10.v20150310附带的所有jar,但仅在任何地方都没有定义相关的类javax.servlet.ServletContext。servlet-
api-3.1.jar中的唯一接口
我的启动代码:
public static void main(String[] args) throws Exception
{
JettyWebAppTest thiss = new JettyWebAppTest();
thiss.init();
}
private void init() throws Exception {
System.setProperty("java.io.tmpdir","/tmp/bolek");
System.setProperty("org.apache.jasper.compiler.disablejsr199","false");
Server server = new Server(8080);
WebAppContext context = new WebAppContext();
context.setResourceBase(<myresourcebase>);
context.setDescriptor("/WEB-INF/web.xml");
context.setContextPath("/");
context.setParentLoaderPriority(false);
context.setAttribute(
"org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/.*taglibs.*\\.jar$");
context.setAttribute("javax.servlet.context.tempdir",System.getProperty("java.io.tmpdir"));
context.setAttribute("org.eclipse.jetty.containerInitializers",this.jspInitializers());
context.setAttribute(InstanceManager.class.getName(),new SimpleInstanceManager());
context.addBean(new ServletContainerInitializersStarter(context),true);
context.setClassLoader(this.getUrlClassLoader());
context.addServlet(this.jspServletHolder(),"*.jsp");
server.setHandler(context);
server.start();
server.join();
}
private ServletHolder defaultServletHolder(URI baseUri)
{
ServletHolder holderDefault = new ServletHolder("default",DefaultServlet.class);
holderDefault.setInitParameter("resourceBase",baseUri.toASCIIString());
holderDefault.setInitParameter("dirAllowed","true");
return holderDefault;
}
private List<ContainerInitializer> jspInitializers()
{
JettyJasperInitializer sci = new JettyJasperInitializer();
ServletContainerInitializer scii;
scii = (ServletContainerInitializer)sci;
ContainerInitializer initializer = new ContainerInitializer(scii,null);
List<ContainerInitializer> initializers = new ArrayList<ContainerInitializer>();
initializers.add(initializer);
return initializers;
}
private ClassLoader getUrlClassLoader()
{
ClassLoader jspClassLoader = new URLClassLoader(new URL[0],this.getClass().getClassLoader());
return jspClassLoader;
}
private ServletHolder jspServletHolder()
{
ServletHolder holderJsp = new ServletHolder("jsp",JettyJspServlet.class);
holderJsp.setInitOrder(0);
holderJsp.setInitParameter("logVerbosityLevel","DEBUG");
holderJsp.setInitParameter("fork","false");
holderJsp.setInitParameter("xpoweredBy","false");
holderJsp.setInitParameter("compilerTargetVM","1.7");
holderJsp.setInitParameter("compilerSourceVM","1.7");
holderJsp.setInitParameter("keepgenerated","true");
return holderJsp;
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
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"
version="3.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
今天的关于Spring JavaConfig:为自定义Servlet添加映射和springboot自定义servlet的分享已经结束,谢谢您的关注,如果想了解更多关于Java EE javax.servlet 中的 ServletConfig 接口、java EE :GenericServlet 抽象类、ServletConfig 接口、Java ServletContext与ServletConfig接口使用教程、java.lang.NoSuchMethodError:javax.servlet.ServletContext.getJspConfigDescriptor与jsp一起使用嵌入式码头的相关知识,请在本站进行查询。
本文标签: