文档章节

JSP&Servlet路径问题

fairy1674
 fairy1674
发布于 2015/12/22 22:24
字数 929
阅读 19
收藏 0

如果带WebRoot,那么js、css、img都应该放到WebRoot目录下,否则访问会有问题。千万不要放在WEB-INF下,因为WEB-INF下的内容只有服务器转发可以访问到,出于安全考虑。

如果不带有WebRoot目录,那么可以放在WEB-INF外面(建立的文件夹中)。

一、JSP、Servlet中的相对路径

a) 在JSP

/”代表站点(服务器)根目录http://127.0.0.1/

b)     在Servlet

/”代表Web应用的根目录http://127.0.0.1/JSP_Servlet_Path/

request.getRequestDispatcher("/a/a.jsp").forward(request, response);

相对路径/a/a.jsp中/相对于web应用的根目录,所以相当于请求跳转到绝对路径

http://127.0.0.1/JSP_Servlet_Path/a/a.jsp

response.sendRedirect("/JSP_Servlet_Path/b/b.jsp");

因为重定向中的方法是传递给浏览器,用于重新发送请求的,而在浏览器端“/”代表,相对于站点根目录http://127.0.0.1/,所以这里必须要加上/JSP_Servlet_Path,这样浏览器重新请求的地址为:http://127.0.0.1/JSP_Servlet_Path/b/b.jsp

package com.jsp_servlet_path.rqq;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class JSP_Servlet extends HttpServlet {
 
    @Override
    public voiddoGet(HttpServletRequest request, HttpServletResponse response)
                    throwsServletException, IOException {
                    
           doPost(request,response);
    }
 
    @Override
    public voiddoPost(HttpServletRequest request, HttpServletResponse response)
                        throwsServletException, IOException {
               System.out.println(request.getContextPath());
                //请求转发,在服务器端,"/"代表(相对于)web应用http://localhost:8000/JSP_Servlet_Path/
               //所以请求转发的绝对路径为http://localhost:8000/JSP_Servlet_Path/a/a.jsp
                // request.getRequestDispatcher("/a/a.jsp").forward(request,response);
               //请求重定向,将方法中的地址参数传递给浏览器,让浏览器重新发送请求,
               //"/"代表(相对于)服务器站点http://localhost:8000/
               //所以相当于浏览器重新请求了绝对路径http://localhost:8000/JSP_Servlet_Path/b/b.jsp
               response.sendRedirect("/JSP_Servlet_Path/b/b.jsp");
               //response.sendRedirect(request.getContextPath()+ "/b/b.jsp");
    }
}

二、JSP中加入basePath

<%
    String path = request.getContextPath();
    String basePath= request.getScheme()+"://"
        +request.getServerName()+":"
        +request.getServerPort()+path+"/";
%>
<head>
<base href="<%=basePath%>">

    注:相当于所有的href相对路径前面都加入了:

               http://localhost:8000/JSP_Servlet_Path/

三、JSP与Servlet相互访问

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.5"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>JSP_Servlet</servlet-name>
    <servlet-class>com.jsp_servlet_path.rqq.JSP_Servlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>CopyOfJSP_Servlet</servlet-name>
    <servlet-class>com.jsp_servlet_path.rqq.CopyOfJSP_Servlet</servlet-class>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>JSP_Servlet</servlet-name>
    <url-pattern>/servlet/JSP_Servlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CopyOfJSP_Servlet</servlet-name>
    <url-pattern>/servlet/CopyOfJSP_Servlet</url-pattern>
  </servlet-mapping>
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
<%@ page language="java"import="java.util.*"pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPEHTMLPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
  <head>
   <basehref="<%=basePath%>">
   
   <title>My JSP 'index.jsp' starting page</title>
         <metahttp-equiv="pragma"content="no-cache">
         <metahttp-equiv="cache-control"content="no-cache">
         <metahttp-equiv="expires"content="0">   
         <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
         <metahttp-equiv="description"content="This is my page">
         <!--
         <linkrel="stylesheet" type="text/css"href="styles.css">
         -->
  </head>
 
  <bodybackground="/JSP_Servlet_Path/img/main1.jpg">
   This is index.jsp page. <br>
   <%--href中隐含了basePath,因为<basehref="<%=basePath%>">--%>
   <ahref="a/a.jsp">a.jsp(a/a.jsp)</a><br/>
   <ahref="/JSP_Servlet_Path/a/a.jsp">a.jsp(/JSP_Servlet_Path/a/a.jsp)</a><br/>
   <ahref="a/c/c.jsp">c.jsp(a/c/c.jsp)</a><br/>
   <ahref="a/c/e/e.jsp">e.jsp(a/c/e/e.jsp)</a><br/>
   <imgsrc="/JSP_Servlet_Path/img/2012317253390833.jpg"><br/>
   <imgsrc="a/main1.jpg"><br/>
   <ahref="servlet/JSP_Servlet?i=0">JSP_Servlet(servlet/JSP_Servlet)</a>
<a href="/JSP_Servlet_Path/servlet/JSP_Servlet?i=0">
JSP_Servlet(/JSP_Servlet_Path/servlet/JSP_Servlet)</a><br/>
    <ahref="servlet/JSP_Servlet?i=100">请求JSP_Servlet,并转发给CopyOfJSP_Servlet</a>
  </body>
</html>
package com.jsp_servlet_path.rqq;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class JSP_Servlet extends HttpServlet {
 
    @Override
    public voiddoGet(HttpServletRequest request, HttpServletResponse response)
                    throwsServletException, IOException {
                    
           doPost(request,response);
    }
 
    @Override
    public voiddoPost(HttpServletRequest request, HttpServletResponse response)
                        throwsServletException, IOException {
            System.out.println(request.getContextPath());
            //请求转发,在服务器端,"/"代表(相对于)web应用http://localhost:8000/JSP_Servlet_Path/
            //所以请求转发的绝对路径为http://localhost:8000/JSP_Servlet_Path/a/a.jsp
            // request.getRequestDispatcher("/a/a.jsp").forward(request,response);
            //请求重定向,将方法中的地址参数传递给浏览器,让浏览器重新发送请求,
            //"/"代表(相对于)服务器站点http://localhost:8000/
            //所以相当于浏览器重新请求了绝对路径http://localhost:8000/JSP_Servlet_Path/b/b.jsp
            response.sendRedirect("/JSP_Servlet_Path/b/b.jsp");
            //response.sendRedirect(request.getContextPath()+ "/b/b.jsp");
             Stringstr_i = request.getParameter("i");
             int i =new Integer(str_i);
             switch(i) {
                    case 0:
                        request.getRequestDispatcher("/index.jsp").forward(request,response);
                        System.out.println("index.jsp");
                        break;
                    case 1:
                        request.getRequestDispatcher("/a/a.jsp").forward(request, response);
                        System.out.println("a.jsp");
                        break;
                    case 2:
                        request.getRequestDispatcher("/b/b.jsp").forward(request,response);
                        System.out.println("b.jsp");
                        break;
                    case 3:
                        request.getRequestDispatcher("/a/c/c.jsp").forward(request,response);
                        System.out.println("c.jsp");
                        break;
                    case 100:
                        request.getRequestDispatcher("/servlet/CopyOfJSP_Servlet").forward(request,response);
                        System.out.println("forward to CopyOfJSP_Servlet");
                        break;
                    default:
                        System.out.println("default");
                        return;
             }
    }
}


© 著作权归作者所有

共有 人打赏支持
fairy1674
粉丝 1
博文 87
码字总数 112947
作品 0
成都
程序员
javax.servlet.jsp.XXXX cannot be resolved to a typ

jsp&servlet报红线javax.servlet.jsp.XXXX cannot be resolved to a type类似错误解决办法 javax.servlet.jsp.JspException cannot be resolved to a type javax.servlet.jsp.PageContext ca......

writeademo
2016/08/01
23
0
大数据开发培训:0基础学习Java编程语言有哪些知识点?

Java 技术通用、高效、具有平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网等,学习Java首先要知道学习知识点有哪些。在这就用加米谷大数据培训...

加米谷大数据
07/25
0
0
jsp中9个内置对象与servlet对应关系

参考: 《jsp&servlet学习笔记.第2版.林信良》 《JSR-245 JavaServer Pages 2.2 Maintenance Release Specification》 隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWrit...

artshell
2014/02/05
0
0
Weblogic和tomcat的区别

Weblogic和tomcat的区别 介绍:weblogic是由美国bea公司出品的,他是基于javaEE的一个中间件。Weblogic 9.0的版本是现在最常用的。Weblogic是用于开发,集成、部署和管理大型分布式Web应用、...

zhaomb
2016/09/10
89
0
Linux命令行安装weblogic

应用场景 应用服务器,将做好的网站应用,需要发布到网上让其他人访问,那么我们就需要应用服务器,比如tomcat,比如jboss,还有这里讲的weblogic,他们都作为应用服务器,各有优势,需要权衡...

wsc449
2017/12/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生...

engeue
12分钟前
0
0
通过ajax访问远程天气预报服务

http://www.webxml.com.cn/zh_cn/index.aspx 更改wsdl文件 打开文件将15行,51行,101行去掉 然后把文件复制到c盘 然后在桌面上面就生成了文件 将文件打成jar包 package cn.it.ws.weather;...

江戸川
今天
1
0
聊聊storm的tickTuple

序 本文主要研究一下storm的tickTuple 实例 TickWordCountBolt public class TickWordCountBolt extends BaseBasicBolt { private static final Logger LOGGER = LoggerFactory.getLogg......

go4it
今天
1
0
自动装箱和自动拆箱

自动装箱和自动拆箱 Java 提供了 8 种基本数据类型,每种数据类型都有其对应的包装类型,包装类是面向对象的类,是一种高级的数据类型,可以进行一些比较复杂的操作,它们是引用类型而不再基...

tsmyk0715
今天
2
0
简易审计系统

1、有时候我们需要对线上用户的操作进行记录,可以进行追踪,出现问题追究责任,但是linux自带的history并不会实时的记录(仅仅在内存中,当用户正常退出(exit logout )时才会记录到history文件里...

芬野de博客
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部