有没有办法在Spring MVC应用程序中使用web.xml加载上下文?
关于如何完成这项任务有很多文件,但我仍然无法解决我的问题.我刚接触servlet,所以我可能错过了一些东西.
我使用red5使用tomcat 6来创建一个servlet,它使用一个用于数据库操作的MysqlDb类的spring bean.
当我使用端口5080指向red5时,它充当常规的tomcat服务器,我可以浏览jsp和servlet页面.
我的web.xml包含以下相关信息:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>fbauth</servlet-name>
<servlet-class>com.xpogames.FbAuth</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fbauth</servlet-name>
<url-pattern>/fbauth</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我的applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="/WEB-INF/red5-web.properties" />
</bean>
<bean id="idDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"><value>${db.driver}</value></property>
<property name="url"><value>${db.url}</value></property>
<property name="username"><value>${db.username}</value></property>
<property name="password"><value>${db.password}</value></property>
<property name="poolPreparedStatements"><value>true</value></property>
<property name="maxActive"><value>10</value></property>
<property name="maxIdle"><value>10</value></property>
</bean>
<bean id="MysqlDb" class="com.xpogames.MysqlDb">
<property name="idDataSource" ref="idDataSource"/>
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
我的FbAuth servlet:
package com.xpogames;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.BeanFactory;
import …Run Code Online (Sandbox Code Playgroud) 我有弹簧应用程序(球衣2.6类和servlet).
我需要从泽西/非弹簧环境中获取Spring bean(s),
类似的问题建议在上下文的静态包装中获取上下文
public static ApplicationContext getContext() {
return context;
}
Run Code Online (Sandbox Code Playgroud)
如何确定上下文已加载或不为null?
如果我不能,我应该等待/检查,直到它加载弹簧上下文?
在从泽西上下文调用或从简单的HttpServlet代码调用bean的情况下
编辑
Jersey使用jersey-spring3依赖jar 工作正常,所以我的问题只是关于Servlets的Spring控件
编辑2
该应用程序正在加载不同于@entpnerd建议文章的弹簧
它注册了一个实现的Servlet WebApplicationInitializer
public class MyWebAppInitializer implements WebApplicationInitializer {
Run Code Online (Sandbox Code Playgroud)
但是也在DispatcherServletweb.xml中配置了
如何才能DispatcherServlet在Spring加载后加载?
因为我们在其init方法上添加了自动装配功能:
WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext())
.getAutowireCapableBeanFactory().autowireBean(this);
Run Code Online (Sandbox Code Playgroud)
在提供请求之前添加超时是最喜欢的解决方案还是在类加载中有一个可以处理它的调整?
编辑3
我在我的应用程序中有两个servlet,我希望将一个A类对象注入到两个servlet中,我也希望在整个应用程序中使用相同的ApplicationContext,即在SO的这个问题的第一个答案中提到的两个servlet: Spring注入Servlet
现在我经历了很多像这样的问题,但找不到与我的问题相符的东西.为了更好地解释,我在这里写一个粗略的代码
public class servletOne extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
public class servletTwo extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
Run Code Online (Sandbox Code Playgroud)
所以上面是applicationContext.xml中的两个服务器我想将一个对象传递给这两个servlet,因此按照惯例,我想要一个像这样的功能:
<bean id="servletFirst" class="mypackage.servletOne">
<property name="message" ref="classObject" />
</bean>
<bean id="servletFirst" class="mypackage.servletTwo">
<property name="message" ref="classObject" />
</bean>
<bean id="classObject" class="mypackage.classA">
</bean>
Run Code Online (Sandbox Code Playgroud)
我不知道这是否可能,我是春天的新手,我只有依赖注入的基本知识.
如果有人能帮我这个,我真的很感激.这将清除我的许多疑虑并帮助我在学习Spring的过程中前进.
这是web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>servletOne</servlet-name>
<servlet-class>mypackage.servletOne</servlet-class>
</servlet>
<servlet> …Run Code Online (Sandbox Code Playgroud) 我有一个Spring Boot,我已经自动配置了一个Router bean.这一切都很完美但是当我想将bean注入自定义servlet时它会成为一个问题:
public class MembraneServlet extends HttpServlet {
@Autowired
private Router router;
@Override
public void init() throws ServletException {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
new HttpServletHandler(req, resp, router.getTransport()).run();
}
}
Run Code Online (Sandbox Code Playgroud)
这应该是要走的路,但是
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
Run Code Online (Sandbox Code Playgroud)
不会自动装配路由器,因为WebapplicationContext它始终为空.该应用程序在MVC环境中运行.
genericDOa接口
package com.iverve.telecom.Dao;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
public interface GenericDAO extends Serializable {
Object findById(Class<?> persistentClass, Long id, boolean lock);
List<?> findByCriteria(Class<?> persistentClass, Criterion... criterion);
Object saveOrUpdate(Class<?> clazz,Object object);
boolean saveOrUpdate(Collection<?> peristableCollection);
void delete(Class<?> clazz, Long id);
void delete(List<?> list);
}
Run Code Online (Sandbox Code Playgroud)
扩展GenericDAO的GenericDAOImpl类
package com.iverve.telecom.DAOImpl;
import java.util.Collection;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.iverve.telecom.Dao.GenericDAO;
@Transactional
public class GenericDAOImpl implements GenericDAO {
private SessionFactory sessionFactory; …Run Code Online (Sandbox Code Playgroud) java ×5
spring ×5
servlets ×2
web.xml ×2
autowired ×1
classloader ×1
hibernate ×1
javabeans ×1
spring-boot ×1
spring-mvc ×1