servlet和struts2一起使用,实现绝对路径下的图片输出到jsp页面

2020-12-13 16:14

阅读:544

标签:des   http   java   get   使用   width   

如果我们在web.xml中配置的struts2的接收请求的路径为:


struts2
/*

是可以用struts2中使用servlet的,只是必须让struts2的action来转发到servlet的url-pattern中的地址就可以了。我们简单的举例如下:

例如定义了一个servlet:


Snippet
com.social.util.Snippet


Snippet
/Snippet

如果你在页面中使用该servlet,则要用action转发到/Snippet的路径/Snippet.

如你的页面里有个元素来显示图片,使用是肯定不行的,你必须定义一个action 如:

package com.social.action;

import com.opensymphony.xwork2.Action;

public class GetImg implements Action{
public String execute(){
return SUCCESS;
}

}

然后在该struts2中配置该Action


/Snippet

最终那个img中这么使用这样就可以用servlet了。

 

 

 

 

在同一个项目中,如果既用到servlet又用了struts框架,运行项目时可能无法正常使用
servlet,解决办法如下:
该类是定义了一个过滤器,当既用到struts2有用到servlet时,
必须用该过滤器对所有的servlet做一次过滤,否则servlet将无法正常运行。 同时在web.xml
中,在定义struts的核心控制器前面添加该过滤器,添加代码如下:

redisp
filters.ReDispatcherFilter(该过滤器的类名)

includeServlets
所有配置的servlet名字



redisp
/*

 

package filters;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher; import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class ReDispatcherFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest)req;
String target = request.getRequestURI();
target=
target.lastIndexOf("?")>0?target.substring(target.lastIndexOf("/")+1,target.lastIndexOf("?")-target
.lastIndexOf("/")):target.substring(target.lastIndexOf("/")+1);

System.out.println(target);
if(this.includes.contains(target))
{
RequestDispatcher rdsp = request.getRequestDispatcher(target);

System.out.println("go..............."+rdsp);
rdsp.forward(req, resp);
}
else
chain.doFilter(req, resp);
}
private ArrayList includes = new ArrayList(); public void init(FilterConfig config) throws ServletException {

this.includes.addAll( Arrays.asList(config.getInitParameter("includeServlets").split(",")));
}
}

 

最终web.xml中的配置如下:


xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


Snippet
com.social.util.Snippet


Snippet
/Snippet


redisp

filters.ReDispatcherFilter

includeServlets

Snippet

redisp

/*






struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter


struts2
/*


index.jsp

servlet和struts2一起使用,实现绝对路径下的图片输出到jsp页面,搜素材,soscw.com

servlet和struts2一起使用,实现绝对路径下的图片输出到jsp页面

标签:des   http   java   get   使用   width   

原文地址:http://www.cnblogs.com/zhaochunhua/p/3798704.html


评论


亲,登录后才可以留言!