JSP存放在 WEB-INF 跟webroot的区别

本文探讨了JSP页面存放在webroot与WEB-INF目录下的区别。webroot便于编码与维护,但需设置过滤器;WEB-INF目录下无需过滤器,但可能使结构复杂。文章还讨论了不同目录对页面跳转的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSP存放在 WEB-INF 跟webroot的区别

转载  2015年08月13日 16:31:09


    放在webroot下面:优点,程序结构清晰,便于编码和维护;缺点,要加过滤器。 
放在web-inf下面:优点,不用过滤器;缺点,打乱了程序结构,编码和维护麻烦点。

    webroot其实是一个名字而已,在部署后是看不到的,访问的时候在url里肯定也是没有的,当然webroot也可以换成别webcontent等都可以。
    如果把这些JSP页面文件移到WEB-INF 目录下,在调用页面的时候就必须把"WEB-INF"添加到URL中。

    我们知道,实现页面的跳转有两种方式,一种是通过redirect的方式,一种是通过forward的方式。redirect方式的跳转,系统会在一个新的页面打开要跳转的网页;而forward方式跳转,系统会在原来的页面上打开一个要跳转的网页。所以放到WEB-INF目录下的文件是不允许采用redirect方式的跳转来访问的,如下

例1:/test/test1.jsp文件

<html>

  <body>

    <form name="testform" action="/WEB-INF/jsp/test/test.jsp">

      <input type = "submit" value="test">

    </form>

  </body>

</html>

    上面这段语句只有一个名为test的按钮,如果单击这个按钮是,系统就会跳转到/WEB-INF/jsp/test/test.jsp,它的代码如下:

例2:/WEB-INF/jsp/test/test.jsp文件

<html>

<body>

跳转成功!

</body>

</html>

事实上,这个跳转是无法成功的,点击按钮后,IE会报“403 Forbidden”的错误。


而forward方式的跳转则可以成功,如下代码:

例3:/test/test2.jsp文件

<html>

<body>

<form name="testform">

<jsp:forward page = "/WEB-INF/jsp/test/test.jsp" />

 

</form>

</body>

</html>

    请注意上面红色的语句,这段就是通过forward的形式来访问/WEB-INF/jsp/test/test.jsp文件,在IE输入地址http://localhost/test1/test2.jsp,网页上就显示“跳转成功!”的信息了,这表示放到了WEB-INF可以通过forward的方式来访问。


    个人认为,像这种方式的可能不大时候采用一般jsp进行编程的系统,因为很多页面上都有采用submit这样的方式来进行跳转,但这种方式却非常适合采用struts结构的系统。因为采用这个结果大多是先跳转到一个Action类,然后在Action类进行相关处理后(比如说获取相关的信息保存到session中,进行有效性的判断),然后再forward到另外一个页面,这样放到WEB-INF中的jsp代码可以被正常访问,也防止了对这些页面的直接访问,下面我来举例说明。

    下面我们先对配置文件struts.xml进行配置,如下:

例4:

<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="sns" extends="struts-default">
<action name="forw" class="com.company.action.Login" method="login">
<result name="c">/WEB-INF/index.jsp</result>

</action>
</package>
</struts>


    上面这个配置非常简单,请看红色部分,这里定义了一个action类,它的路径为/WEB-INF/index.jsp,所对应的类为com.company.action.Login,它都一个跳转页面,别名为c,对应的页面为/WEB-INF/index.jsp

    下面我们对例1的内容进行修改,使其跳转到/test去。

例5:修改后的/test/test1.jsp文件

<html>

  <body>

    <form type="post" action="forw.action">
     <input type="submit" value="ok">
    </form>

  </body>

</html>

    这样我们在IE中访问http://localhost/test/test1.jsp,然后点击test按钮,页面就会跳转到com.company.action.Login这个类来,下面是这个类的内容。

package com.company.action;


import com.opensymphony.xwork2.ActionSupport;


public class Login extends ActionSupport {

public String login(){
System.out.println("进入方法了");
return "c";
}
}

  使用struts2

版权声明:本文为博主原创文章,未经博主允许不得转载。

<think>好的,用户想在Mac上通过命令行部署本地JSP项目到Tomcat服务器,并且项目中包含WEB-INF文件夹。我需要根据提供的引用信息和Tomcat的相关知识来整理步骤。 首先,根据引用[2],Tomcat在Mac下启动是通过运行startup.sh,所以部署前可能需要先停止Tomcat,避免文件占用。然后,引用[1]提到项目需要放在webapps目录下,通常是把WAR文件或项目文件夹复制过去。但用户的项目是本地已有的,可能需要直接部署文件夹。 接下来,用户的项目结构是否正确?JSP项目应该有WEB-INF子目录,里面包含web.xml等配置。如果项目结构正确,可以直接将整个项目文件夹复制到Tomcat的webapps目录下。例如,项目文件夹名为myapp,那么复制到webapps后,访问路径应该是localhost:8080/myapp。 另外,引用[4]提到,如果存在ROOT文件夹,可能需要删除原有的,才能正确加载新项目。不过用户的项目不是ROOT,所以可能不需要这一步,除非他们想部署为默认应用。 然后,是否需要打成WAR包?根据引用[4],有时候直接复制WAR文件到webapps,Tomcat会自动解压。用户的项目如果已经是文件夹结构,可以直接复制,或者打包成WAR再部署。打包命令可能是jar cvf myapp.war *,在项目根目录下执行。 还要注意权限问题,Mac下可能需要使用sudo来复制文件到Tomcat的目录,特别是如果Tomcat安装在系统目录下。另外,部署完成后,需要重启Tomcat,或者Tomcat会自动检测新的文件。不过有时候可能需要手动重启,确保应用加载。 总结步骤大致是: 1. 确认项目结构正确,有WEB-INF文件夹。 2. 停止Tomcat(可选,但安全起见)。 3. 将项目文件夹或WAR文件复制到webapps目录。 4. 启动Tomcat,访问应用。 需要检查引用中的信息,比如引用[2]的启动方法,引用[1]的部署路径,引用[4]关于ROOT的注意事项,但用户的情况可能不需要处理ROOT。另外,引用[3]提到context.xml的配置,可能涉及上下文路径的设置,但用户可能只需要基本部署,暂时不需要修改配置。 可能还需要提到如何打包项目为WAR文件,如果用户没有现成的,可以用jar命令。另外,检查Tomcat的日志文件,如logs/catalina.out,以便排查部署错误。 最后,确保所有步骤适用于Mac命令行环境,使用终端操作,路径可能需要调整为用户的实际Tomcat安装路径。</think>### Mac命令行部署JSP项目到Tomcat的步骤 #### 1. **确认项目结构** - 项目需包含标准Web应用结构: ``` your_project/ ├── WEB-INF/ │ ├── web.xml │ ├── classes/ (存放编译后的.class文件) │ └── lib/ (依赖的JAR包) └── index.jsp (示例JSP文件) ``` - 若项目未打包为WAR文件,建议通过以下命令生成: ```bash cd /path/to/your_project jar -cvf your_project.war * ``` #### 2. **停止Tomcat服务(可选)** ```bash # 进入Tomcat的bin目录 cd /usr/local/apache-tomcat-9.0.50/bin/ # 执行关闭脚本 ./shutdown.sh ``` #### 3. **部署项目到webapps目录** - **直接复制项目文件夹**(适用于开发调试): ```bash # 将项目文件夹复制到webapps目录 sudo cp -r /path/to/your_project /usr/local/apache-tomcat-9.0.50/webapps/ ``` - **或部署WAR文件**(推荐生产环境): ```bash sudo cp /path/to/your_project.war /usr/local/apache-tomcat-9.0.50/webapps/ ``` - Tomcat启动时会自动解压WAR文件[^1]。 #### 4. **启动Tomcat服务** ```bash # 进入Tomcat的bin目录 cd /usr/local/apache-tomcat-9.0.50/bin/ # 赋予执行权限 chmod +x *.sh # 启动Tomcat ./startup.sh ``` #### 5. **验证部署** - 访问 `http://localhost:8080/your_project/` - 若显示JSP页面内容,则部署成功。 #### 6. **排查常见问题** - **权限不足**:使用`sudo`或在Tomcat目录执行: ```bash sudo chmod -R 755 /usr/local/apache-tomcat-9.0.50/webapps/ ``` - **端口冲突**:检查`conf/server.xml`中`<Connector port="8080">`是否被占用。 - **项目未加载**:查看日志文件`logs/catalina.out`: ```bash tail -f /usr/local/apache-tomcat-9.0.50/logs/catalina.out ``` --- ### 相关问题 1. **如何配置Tomcat的虚拟主机?** (需修改`server.xml`并定义`<Host>`标签[^3]) 2. **如何优化Tomcat的JVM内存参数?** (通过`bin/catalina.sh`设置`JAVA_OPTS="-Xms512m -Xmx1024m"`) 3. **Tomcat热部署如何实现?** (启用`reloadable="true"`属性或使用IDE插件[^5]) --- ### 引用说明 - 项目部署路径参考`webapps`目录规范 - Tomcat启停脚本的使用方法[^2] - 上下文配置与日志排查的关联性[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值