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

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

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

例如定义了一个servlet:

<servlet>
<servlet-name>Snippet</servlet-name>
<servlet-class>com.social.util.Snippet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Snippet</servlet-name>
<url-pattern>/Snippet</url-pattern>
</servlet-mapping>

其中Snippet是显示图片的servlet,代码如下:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Snippet  extends HttpServlet{
     public void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
    
           this.doPost(req, resp);
        }
     
     @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

resp.setContentType("text/html; charset=UTF-8");
            resp.setContentType("image/jpeg");    //设置图片格式格式,这里可以忽略
            
            FileInputStream fis = new FileInputStream("E:/tomcat/temp/1350558335484.jpg");
            OutputStream os = resp.getOutputStream();
            
            try {
                int count = 0;
                byte[] buffer = new byte[1024*1024];
                while ( (count = fis.read(buffer)) != -1 )
                    os.write(buffer, 0, count);
            } catch (IOException e){  
               e.printStackTrace();  
    
             }finally {
    
       if(os!=null)
    
                os.close();
    
                if(fis != null)
    
       fis.close();
            }
     }
    
}

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

如你的页面里有个<img>元素来显示图片,使用<img src="Snippet" width="60" height="20"/>是肯定不行的,你必须定义一个action 如:

package com.social.action;

import com.opensymphony.xwork2.Action;

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

}

然后在该struts2中配置该Action

<action name="image" class="com.social.action.GetImg">
<result>/Snippet</result>
</action>

最终那个img中这么使用<img src="data:image" width="60" height="20"/>这样就可以用servlet了。

在同一个项目中,如果既用到servlet又用了struts框架,运行项目时可能无法正常使用
servlet,解决办法如下:
该类是定义了一个过滤器,当既用到struts2有用到servlet时,
必须用该过滤器对所有的servlet做一次过滤,否则servlet将无法正常运行。 同时在web.xml
中,在定义struts的核心控制器前面添加该过滤器,添加代码如下:
<filter>
<filter-name>redisp</filter-name>
<filter-class>filters.ReDispatcherFilter(该过滤器的类名)</filter-class>
<init-param>
<param-name>includeServlets</param-name>
<param-value>所有配置的servlet名字</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>redisp</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

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<String> includes = new ArrayList<String>(); public void init(FilterConfig config) throws ServletException {

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

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

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
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">

<servlet>
<servlet-name>Snippet</servlet-name>
<servlet-class>com.social.util.Snippet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Snippet</servlet-name>
<url-pattern>/Snippet</url-pattern>
</servlet-mapping>

<filter>

<filter-name>redisp</filter-name>

<filter-class>filters.ReDispatcherFilter</filter-class>

<init-param>

<param-name>includeServlets</param-name>

<param-value>Snippet</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>redisp</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<filter>
<filter-name>struts2</filter-name>
<!-- 指定过滤器对应的实际物理类,该类在struts2的核心代码库jar包中可以找到 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

转载于:https://www.cnblogs.com/zhaochunhua/p/3798704.html

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

  1. HttpHandler:给指定路径下的图片添加水印显示

    圣诞节,25日,要交ACCP5.0认证的项目,其中有这样一个要求:书店的所有图书的封面放在了\images\convers\下面,要求所有引用这一路径下的图片都添加书店的店名水印图片.就是说拦截Htt ...

  2. cv2.imread无法读取/保存中文路径下的图片的解决方法

    cv2.imread无法读取/保存中文路径下的图片的解决方法 关于无法读取 用cv2.imread读取中文路径下的图片会出现空.这种情况下windows会出现,mac好像还没出现过. 解决方法是,使用 ...

  3. java 图片的路径_【JAVA技术】如何展现绝对路径下的图片

    问题描述:通常情况下,我们在jsp页面上要想显示图片,直接用html的标签即可,但是img标签的src属性的值为图片存放的相对地址.如果图片文件没有存放在整个工程中,此时就需要访问图片文件的绝对路径, ...

  4. tomcat中实现特定路径下的图片的url访问Tomcat配置图片保存路径,图片不保存在项目路径下...

    使用Tomcat作为服务器的时候,如果不配置图片保存路径,将图片保存在项目路径下,那么再次打war包发布项目可能会造成图片的丢失,每次重启前将图片先保存再copy到服务器明显不方便,这时可以配置图片保 ...

  5. jsp显示服务器路径下的图片,jsp 从服务器获取图片路径

    jsp 从服务器获取图片路径 内容精选 换一换 批量获取智能图片下载路径POST /v1/{user_id}/intelligence-data/pictures状态码: 200状态码: 400获取图 ...

  6. javaweb利用servlet与struts2实现可点击刷新的基础图片验证码

    javaweb利用servlet实现图片验证码 验证码是登录验证的技术,可以一定程度防止恶意脚本刷网站,造成服务器压力. 具体实现思想很简单: 首先利用servlet产生一个随机的验证码, 保存在se ...

  7. java 显示服务器的图片,【JavaWeb】实现读取本地服务器路径下的图片

    Servlet层代码: package com.ysw.demo; import javax.servlet.ServletException; import javax.servlet.Servle ...

  8. OpenCV C++ imread填写路径下有图片却读不出 求助!!!!!!

    求助!!如图!! 网上说的那种Debug和release的情况我也试过了 怎样都读不进图片真的让人崩溃= = 情况更新 我把图片换一个目录下存放就可以读到了,但是没找出目录和目录的区别. 同一个目录下 ...

  9. vue background-image路径下的图片打包后找不到的问题

    参考 https://segmentfault.com/q/1010000009700735 的解决办法.

最新文章

  1. Linux的简单Nginx
  2. java finally块_java finally块后的语句是否要执行
  3. [js]promise学习2
  4. ecshop快速购买
  5. springboot 整合springsecurity
  6. 广告关闭php,电脑右下角的广告怎么去掉
  7. 计算机网络战队名称大全,响亮的战队名字大全,吓到敌人了!
  8. 为你的简书和 GitHub 设定个性域名 1
  9. python 100天 pdf 最新版_GitHub - Nolan2018/Python-100-Days: Python - 100天从新手到大师
  10. 短信系统实现原理(基于redis)
  11. 贪婪洞窟2 素材解密
  12. 股票指标 PHP,怎样将股票指标改为选股指标
  13. 11G新特性 -- archival(long-term)backups
  14. 信源编码作业【01】利用Audacity软件语音信号的频谱分析
  15. 找个程序员做老公,最靠谱!
  16. 导数公式(1)-基本求导公式
  17. Maven | 05.Maven项目结构及Maven命令
  18. 网络测试工具netperf介绍
  19. 【产品时评】微信的堕落
  20. MTPuTTY配置ssh连接Gitlab

热门文章

  1. 放弃月薪过万的城市工作,返乡创业做农业,面对未知风险,你敢尝试吗?
  2. 电商垄断的形式不是对某一行业的具体垄断
  3. 互联网思维借鉴的两个核心
  4. 怎么删除安卓手机里没用的文件夹,如何知道哪个有用哪些没用?
  5. 2020年,把i3 4170升级成e3 1231 v3有必要吗,顺便我想把750Ti换成1650s?
  6. 为什么200M宽带还是会很慢?
  7. Qt——P10 自定义的信号和槽
  8. HTML中常见问题汇总贴
  9. 使用DBATools编写SQL Server对象脚本
  10. Python-爬取我去图书馆座位编码