博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决jsp访问jsp与Servlet访问jsp路径存在的差异性比较
阅读量:7087 次
发布时间:2019-06-28

本文共 2950 字,大约阅读时间需要 9 分钟。

  hot3.png

在开发JSP与Struts时会遇到:解决jsp访问路径与Servlet访问路径不比配问题:第一种解决方法:例子: xx.jsp 该jsp存在于WEB的目录为:/admin/login.jsp 此jsp中的使用的图片路径为: ../image/bg.gif ../css/css.css 以上为正常写法,当然如果你的WEB项目下只有.jsp没有Servlet或是Action之类的Servlet是不会有问题的。但问题就出现在此项目中有了Servlet,例如Struts的Action. 如现Servlet时,通过某jsp跳到某jsp还可以,但当通过jsp访问到servlet,在通过servlet访问某它jsp时。会出现图片和样式都找不到了。问题出现了,当通过.jsp访问另一个jsp时,他们的相对路径是相同的所以他们访问服务器资源的../image/bg.gif都是可用的, 但是当通过Servlet访问.jsp时的相对路径是image/bg.gif。这说明Servlet的相对路径就是你WEB项目的根路径。而jsp的相对路径,就是你访问的那个.jsp的当前路径,而不是根。所以解决办法是这样的所项目中所有的访问到资源的地方都改成:1、 修改后的写法: image/bg.gif css/css.css(修改后只有通过Servlet也就Action访问某jsp时,该jsp显示正常,而通过jsp访问其它jsp则会显示不正常,上面说了这是因为他们的相对路径不同)但修改后不是所有的jsp都是通过Servlet进去的。所以问题又出现了。hehe.^_^所以可以使用这种方式: 2、<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath();//注意这里这里是获取服务路径 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";//然后在加上端口 %>        
My JSP 'MyJsp.jsp' starting page 按照以上的做法,把所有jsp前面+上<%=basePath%> 这样就可以保证每个jsp的相对路径是根了。这样就和Servlet一致了。 第二种解决方法:具体就不详细举例了: 大体思路: 1、写一个Servlet,该Servlet主要就起到导航做用.例如: public final class LinksAction extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ //注意这里使用的是request.getParameter("urlName")而不是request.getAttribute("urlName") try{ if(isJsp(request.getParameter("link"))){ //System.out.println(request.getParameter("link")); request.getRequestDispatcher(request.getParameter("link")).forward(request,response); }else{ System.out.println("您好1"); request.getRequestDispatcher("/index.jsp").forward(request,response); } }catch(Exception e){ e.printStackTrace(); } } /* *该方法为了防止前get方法接收一个其它uri的地址, *判断里面是否包含有.jsp的字符串。 */ public boolean isJsp(String uri){ if(uri.indexOf(".jsp")>0){ return true; }else{ return false; } } } 2、配置该Servlet
link_action
com.javass.service.LinksAction
link_action
/forword.jsp
3、使用该Servlet(不过这样有点大了,hehe,我最早先就这样用.还把.Servlet映射了.jsp的后缀hehe,很想很搞啊.)
大家都知道把jsp放到WEB-INF/下面这样对.jsp的代码是安全的。(但同样问题是在WEB-INF/下的.jsp访问其它.jsp是无法访问的,只有通过Servlet才能进到WEB-INF下) 所以通过以上方法,可以有效的访问WEB-INF/下的jsp. 第三种解决方法:1、把所有jsp都放在WEB-INF下面。 但WEB-INF下是不可以直接访问其它的jsp,2、在WEB-INF/下的.jsp访问其它.jsp是无法访问的,所以需要通过Servlet才能进到WEB-INF下。 在这里我们使用一个Action代替.. Action: public class IndexAction extends BaseAction { public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse httpServletResponse) { return mapping.findForward(str); } }3、在Struts-Config.xml中配置forward
4、在外部使用 个人资料管理转自:http://hi.baidu.com/53665366/item/494d244f8201f7eda4c06679

 

转载于:https://my.oschina.net/garyun/blog/602963

你可能感兴趣的文章
jquery html动态添加的元素绑定事件详解
查看>>
日常英语---九、MapleStory Link Skills Guide
查看>>
最强科技实力支撑海尔走出“全球化”道路
查看>>
“平潭-高雄”货运直航顺利首航
查看>>
2018年澳门赌场毛收入增14% 贵宾厅增长放缓
查看>>
杭州机场春运预计起降航班3.3万架次 国际和地区增开428架次
查看>>
菲律宾一座“慰安妇”少女像设置仅两天就被撤走
查看>>
美总统特朗普驳斥美媒涉通俄门报道:极具侮辱性
查看>>
[2]十道算法题【Java实现】
查看>>
深入React的生命周期(下):更新(Update)
查看>>
js实现栈
查看>>
前端必备,50 个 Chrome Developer Tools 必备技巧
查看>>
客户故事:4家银行如何打造新一代移动金融中心
查看>>
NDK开发中这些基本知识你都懂吗
查看>>
自动化运维工具ansible的实践
查看>>
一个22万张NSFW图片的鉴黄数据集?我有个大胆的想法……
查看>>
do 一下来了一个 redux
查看>>
Vue教程09:双向绑定对象中属性原理
查看>>
如何实现VM框架中的数据绑定
查看>>
关于this
查看>>