JAva Web起動時にコードを自動的に実行するいくつかの方法
10282 ワード
1.サーブレットリスナーインタフェースを実現するサーブレットContextListener 2、サーブレットを実現するフィルタFilter 3、ウェブ上にサーブレットを1つ作成する.xmlにコンテナを配置して起動して実行すればいい4、Spring IOCをBean管理コンテナとして使用する場合はinit-methodを指定できます.init-methodはbeanロードに成功したことを示しているので、すぐに方法を実行します5、Spring IOCをBean管理コンテナとして使用する場合は、SpringのBeanバックグラウンドプロセッサインタフェースを実装することもできます:BeanFactoryPostProcessorは、このBeanのロードが完了すると、Springは開発者にいくつかのイベントをカスタマイズすることができます
Webコンテナ起動後のコードの実行順序は、4===>5==>1==>2=>3
以下、上記のいくつかの方法について、一つ一つ説明します.
1、サーブレットリスナーインタフェースを実現するサーブレットContextListener
2、サーブレットを実現するフィルタFilter
Filterはフィルタとも呼ばれ、サーブレット技術の中で最も実用的な技術であり、Web開発者はFilter技術を通じて、Jsp、サーブレット、静的ピクチャファイル、静的htmlファイルなど、Webサーバが管理するすべてのウェブリソースをブロックし、いくつかの特殊な機能を実現する.例えば、URLレベルのアクセス制御、機密語彙のフィルタリング、応答情報の圧縮などの高度な機能を実現します.Filter機能:HttpServeretRequestがServeretに到着する前に、お客様のHttpServeretRequestをブロックします.必要に応じてHttpServertRequestをチェックし、HttpServertRequestヘッダとデータを変更することもできます.HttpServertResponseがクライアントに到着する前に、HttpServertResponseをブロックします.必要に応じてHttpServertResponseをチェックしたり、HttpServertResponseヘッダとデータを変更したりすることができます.
3、Web上でサーブレットを作成する.xmlの中で容器を配置して起動した後に実行すればいいです
4、Spring IOCをBean管理コンテナとして使用する場合は、init-methodを指定し、init-methodがbeanロードに成功したことを示すと、すぐにメソッドを実行することができます.実行するメソッド名としてstartを設定します.
5、Spring IOCをBean管理コンテナとして使用する場合、SpringのBeanバックグラウンドプロセッサインタフェースを実現することもできます.BeanFactoryPostProcessorは、Beanのロードが完了した後、Springは開発者にいくつかのイベントをカスタマイズすることができます.
本文は以下のことを参考にする.https://blog.csdn.net/fcly2013/article/details/19984061あ、もし興味があれば、原文を見てください.
Webコンテナ起動後のコードの実行順序は、4===>5==>1==>2=>3
以下、上記のいくつかの方法について、一つ一つ説明します.
1、サーブレットリスナーインタフェースを実現するサーブレットContextListener
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class myListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println(" ");
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println(" ");
}
}
web.xml
com.primeton.eos2.myListener.
2、サーブレットを実現するフィルタFilter
Filterはフィルタとも呼ばれ、サーブレット技術の中で最も実用的な技術であり、Web開発者はFilter技術を通じて、Jsp、サーブレット、静的ピクチャファイル、静的htmlファイルなど、Webサーバが管理するすべてのウェブリソースをブロックし、いくつかの特殊な機能を実現する.例えば、URLレベルのアクセス制御、機密語彙のフィルタリング、応答情報の圧縮などの高度な機能を実現します.Filter機能:HttpServeretRequestがServeretに到着する前に、お客様のHttpServeretRequestをブロックします.必要に応じてHttpServertRequestをチェックし、HttpServertRequestヘッダとデータを変更することもできます.HttpServertResponseがクライアントに到着する前に、HttpServertResponseをブロックします.必要に応じてHttpServertResponseをチェックしたり、HttpServertResponseヘッダとデータを変更したりすることができます.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter implements Filter{
public void destroy() {
//Filter , web 。 Web Filter 。
// Filter 。 , 。
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// 。 URL ,Servlet doFilter 。FilterChain 。
}
public void init(FilterConfig arg0) throws ServletException {
// Servlet ,Filter WEB 。 web ,web Filter ,
// init , web.xml , , (filter ,
//init )。 init , filter FilterConfig 。
}
}
web.xml
MyFilter ,
com.primeton.eos2.MyFilter
redirectPath
/index.jsp
MyFilter filter 。
/* filter ( URL )
FORWARD Servlet , REQUEST,INCLUDE,FORWARD ERROR , REQUEST。 Filter
REQUEST
INCLUDE
REQUEST: ,Web 。 RequestDispatcher include() forward() , 。
INCLUDE: RequestDispatcher include() , 。 , 。
FORWARD: RequestDispatcher forward() , , , 。
ERROR: , 。 , 。
: Filter, web.xml , ; doFilter() , , , ServletResponse , ( HttpServletResponseWrapper),
:
filter , filter , web Filter , init , filter
filterConfig 。 filter , filterConfig , :
String getFilterName();// filter 。
String getInitParameter(String name);// 。 null.
Enumeration getInitParameterNames();// 。
public ServletContext getServletContext();// Servlet 。
:
/**
* ,
*/
public class SessionFilter implements Filter {
public FilterConfig config;
public void destroy() {
this.config = null;
}
public static boolean isContains(String container, String[] regx) {
boolean result = false;
for (int i = 0; i < regx.length; i++) {
if (container.indexOf(regx[i]) != -1) {
return true;
}
}
return result;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
String logonStrings = config.getInitParameter("logonStrings"); //
String includeStrings = config.getInitParameter("includeStrings"); //
String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");//
String disabletestfilter = config.getInitParameter("disabletestfilter");//
if (disabletestfilter.toUpperCase().equals("Y")) { //
chain.doFilter(request, response);
return;
}
String[] logonList = logonStrings.split(";");
String[] includeList = includeStrings.split(";");
if (!this.isContains(hrequest.getRequestURI(), includeList)) {//
chain.doFilter(request, response);
return;
}
if (this.isContains(hrequest.getRequestURI(), logonList)) {//
chain.doFilter(request, response);
return;
}
String user = ( String ) hrequest.getSession().getAttribute("useronly");//
if (user == null) {
wrapper.sendRedirect(redirectPath);
return;
}else {
chain.doFilter(request, response);
return;
}
}
public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
}
}
// , ,
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException {
HttpServletRequest hrequest =(HttpServletRequest)request;
HttpServletResponse hresponse = (HttpServletResponse)response;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(hresponse);
chain.doFilter(request,response);
hresponse.setCharacterEncoding(“UTF-8”);
hresponse.setHeader("Access-Control-Allow-Origin","*");
hresponse.setHeader("Access-Control-Allow-Methods","OPTIONS,GET,POST");
hresponse.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
hresponse.setHeader("Access-Control-Max-Age","86400");
response=hresponse;
}
3、Web上でサーブレットを作成する.xmlの中で容器を配置して起動した後に実行すればいいです
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet{
public void init(ServletConfig config) {
// ,
String username = config.getInitParameter("username");
System.out.println(username);
}
protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
{
resp.getWriter().println("I am httpServlet doGet()");
}
protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
{
resp.getWriter().println("I am httpServlet doPost()");
}
public void destory(ServletConfig config){
}
}
web.xml :
MyServlet
com.primeton.eos2.MyServlet
username
test
2
MyServlet ( selvet )
/abc
, load-on-startup :
(1) 0 0 , servlet。 , ;
(2) , servlet 。
4、Spring IOCをBean管理コンテナとして使用する場合は、init-methodを指定し、init-methodがbeanロードに成功したことを示すと、すぐにメソッドを実行することができます.実行するメソッド名としてstartを設定します.
5、Spring IOCをBean管理コンテナとして使用する場合、SpringのBeanバックグラウンドプロセッサインタフェースを実現することもできます.BeanFactoryPostProcessorは、Beanのロードが完了した後、Springは開発者にいくつかのイベントをカスタマイズすることができます.
public class KeyWordInit implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
System.out.println("================>[BeanFactoryPostProcessor] .");
ShopService shopService = factory.getBean("shopService", ShopService.class);
List
本文は以下のことを参考にする.https://blog.csdn.net/fcly2013/article/details/19984061あ、もし興味があれば、原文を見てください.