å¨ä½¿ç¨spring容å¨çwebåºç¨ä¸ï¼ä¸å¡å¯¹è±¡é´çä¾èµå
³ç³»é½å¯ä»¥ç¨spring-context.xmlæ件æ¥é
ç½®ï¼å¹¶ä¸ç±spring容å¨æ¥è´è´£ä¾èµå¯¹è±¡çå建ãå¦æè¦å¨servletä¸ä½¿ç¨spring容å¨ç®¡çä¸å¡å¯¹è±¡ï¼é常éè¦ä½¿ç¨ WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()) æ¥è·å¾WebApplicationContextï¼ç¶åè°ç¨WebApplicationContext.getBean("beanName")æ¥è·å¾å¯¹è±¡çå¼ç¨ï¼è¿å®é
ä¸æ¯ä½¿ç¨äºä¾èµæ¥æ¾æ¥è·å¾å¯¹è±¡ï¼å¹¶ä¸å¨servlet代ç ä¸ç¡¬ç¼ç äºåºç¨å¯¹è±¡çbeanååã
è¿ç§æ¹å¼ï¼ç¸å½äºæspring容å¨ä¸çbeanå è½½å°äºservlet容å¨ä¸ï¼å³æspringä¸çbeanæ¾å°web.xmlçbeanä¸ã
为äºè½å¨servletä¸æç¥springä¸beanï¼å¯éç¨å¦ä¸æ¥éª¤æ¥å®ç°ï¼
1- å°servletä½ä¸ºbeanå®ä¹å¨spring-context.xmlæ件ä¸ï¼åè¦åºç¨çbeanå®ä¹æ¾å¨ä¸èµ·ï¼
2- å®ç°ä¸ä¸ªä»£çservletï¼è¯¥servletç¨WebApplicationContextæ¥è·å¾å¨spring-context.xmlä¸å®ä¹çservletç对象ï¼å¹¶å°ä»»å¡å§æç»spring-context.xmlä¸å®ä¹çservlet
3- å¨web.xmlä¸ç¨ContextLoaderListeneræ¥åå§åspring çcontextï¼åæ¶å¨ä»£çservletçå®ä¹ä¸ç¨åå§ååæ°æ¥å®ä¹spring-context.xmlä¸servletçbeanååã
4- å¨web.xmlä¸å®ä¹ä»£çservletçmapping.
å©ç¨è¿ç§æ¹å¼å°±å°servletåä¸å¡å¯¹è±¡çä¾èµå
³ç³»ç¨spring æ¥è¿è¡ç®¡çï¼å¹¶ä¸ä¸ç¨å¨servletä¸ç¡¬ç¼ç è¦å¼ç¨ç对象ååã
示ä¾ä»£ç
web.xml
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<!-- 为äºè®©springå è½½znserver-servletä¹å¤çé
ç½®æ件ï¼éå®ä¹servletçå¬å¨ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/server-servlet.xml
/WEB-INF/server-bean.xml
</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<!-- ä¸ä¸é¢è¿èµ·æ¥ç¨ ,å è½½spring容å¨
ææ¬å°javaç¨åºä¸å¯ç¨çbeanåæ¬å°å¯ç¨çåå¼æ¾å¨ä¸åé
ç½®æ件ï¼ä¸ºäºè¿è¡æ¬å°javaç¨åº-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<!-- å¤çåºç¨ç请æ±ï¼/app/..ä¸é¢ -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/server-bean.xml</param-value><!--server-bean.xmlä¸è¦æURLå¤ççbeanï¼æ¯å¦Controller -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- å¯å¨InitialServletï¼åå§ååºç¨åå 个éè¦å¯¹è±¡ -->
<servlet>
<description></description>
<display-name>ProxyServlet</display-name>
<servlet-name>proxyServlet</servlet-name>
<servlet-class>org.ccnt.med.common.DelegatingServletProxy</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>proxyServlet</servlet-name>
<url-pattern>/ProxyServlet</url-pattern>
</servlet-mapping>
server-servlet.xml
<bean id="proxyServlet" class="org.ccnt.med.common.ProxyServlet"/>
DelegatingServletProxy.java
public class DelegatingServletProxy extends GenericServlet {
private String targetBean;
private Servlet proxy;
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
proxy.service(arg0, arg1);
}
@Override
public void init() throws ServletException {
this.targetBean = getServletName();
getServletBean();
proxy.init(getServletConfig());
}
private void getServletBean() {
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
this.proxy = (Servlet)wac.getBean(targetBean);//get proxyBean
}
}
ProxyServlet.java
public class ProxyServlet extends HttpServlet{
private Logger logger = LoggerFactory.getLogger(ProxyServlet.class);
@Autowired
private QueryService queryService;
public void setQueryService(QueryService queryService)
{
this.queryService = queryService;
}
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ProxyServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
@Override
public void init(ServletConfig config) throws ServletException {
logger.info("~~~START~~~");
}
}