jsp页面是放在webroot目录下和web-inf下优缺点

理解JSP存放位置对安全性及访问方式的影响
本文探讨了将JSP页面存放在webroot目录与web-inf目录下的不同影响,包括安全性、访问方式及编码维护的优缺点,并通过实例展示了如何利用过滤器控制直接访问与间接跳转。

http://blog.sina.com.cn/s/blog_73e11065010139m2.html

jsp放在webroot目录下 这样就可以让用户直接访问,jsp放在web-inf目录下就必须要通过请求才能访问。
因此放在web-inf下jsp页面显得要安全。

既然这样 ,那是不是只要是需要通过请求才可以访问的页面就一定要放在web-inf目录下呢
还有放在webroot和放在web-inf目录下都各有什么明显的优缺点 。

通过设置过滤器,放在webroot下面的文件也可以实现不能直接访问。

一般项目都是要求隐藏性的,只让客户通过请求访问而不是直接访问jsp页面。若放在webroot下面,肯定要加一个过滤器阻止所有对*.jsp的访问。只要比较的话:
放在webroot下面:优点,程序结构清晰,便于编码和维护;缺点,要加过滤器。
放在web-inf下面:优点,不用过滤器;缺点,打乱了程序结构,编码和维护麻烦点。
摘自:http://topic.youkuaiyun.com/u/20091016/12/41dbfb7f-a812-4525-9400-369ca11b7069.html

 

 

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

放在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-config.xml进行配置,如下:

例4:WEB-INF/struts-config.xml文件

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

<!-- ========== Action Mapping Definitions ============================== -->

<action-mappings>

<action path="/test"type=" test.TestAction" scope="request">

<forward name="test" path="/WEB-INF/jsp/test/test.jsp"/>

</action>

</action-mappings>

</struts-config>

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

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

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

<html>

<body>

<form name="testform" action="/test">

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

</form>

</body>

</html>

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

package test;
import javax.servlet.http.*;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;


public class TestAction extends Action

{

public ActionForward perform(ActionMapping mapping,ActionForm form, HttpServletRequest req,

HttpServletResponse res)

{

return mapping.findForward("test");

}


}

可以看到,这个类是继承Action类的,所有的控制类都必须继承Action类,这个类里面有一个perform方法,跳转到这个类都是从这个方法进行访问的(新版本可以是execute方法),现在这个方法里面只有一条语句,这句话的意思就是跳转到一个别名为test的页面,也就是/WEB-INF/jsp/test/test.jsp页面,这样我们点击test按钮后,IE就会显示“跳转成功!”这条信息,这表示系统允许这样的跳转。

摘自:http://azrael6619.iteye.com/blog/508725

注意:CSS文件要存放在根目录,此时引用要用绝对路径!!!引用格式如:/项目名/css文件夹/*.css



<think>好的,我现在要帮助用户了解如何在不使用Spring或Struts框架的情况下,使用JSPTomcat开发Java Web项目,并集成MySQL或Oracle数据库,同时选择合适的ORM框架,比如MyBatis、MyBatis-Plus或Hibernate。我需要整理出最佳实践示例代码。 首先,用户明确要求不使用SpringStruts,这意味着项目需要基于传统的ServletJSP结构。我需要考虑如何配置Tomcat服务器,以及如何集成数据库ORM框架。 接下来,数据库方面,用户提到MySQL或Oracle。这两种数据库的连接配置类似,主要区别在于驱动类连接URL。需要分别给出两种数据库的配置示例。 关于ORM框架的选择,用户提到了MyBatis、MyBatis-PlusHibernate。这三个框架各有特点。MyBatis需要编写SQL,灵活性高;MyBatis-Plus在MyBatis基础上提供了更多便捷的CRUD方法;Hibernate则是全自动的ORM,使用HQL或Criteria。需要分别说明如何集成这三个框架,并比较它们的优缺点,帮助用户选择最合适的。 接下来,项目结构方面,传统的Java Web项目通常遵循MVC模式,分为模型(Model)、视图(View,即JSP)、控制器(Controller,即Servlet)。需要说明如何组织项目结构,包括包名、配置文件的位置等。 然后是配置步骤,比如web.xml的配置,Servlet的映射,ORM框架的配置文件(如MyBatis的mybatis-config.xml,Hibernate的hibernate.cfg.xml)的位置内容。需要确保这些配置正确,并且能够被Tomcat正确加载。 对于示例代码部分,可能需要展示一个简单的CRUD操作。例如,用户管理系统的增删改查。需要分别用不同的ORM框架实现,并给出对应的ServletJSP代码。比如,使用MyBatis时,需要编写Mapper接口XML文件;使用Hibernate时,需要实体类DAO层实现。 另外,用户提到分页功能,可能需要集成MyBatis的分页插件,比如PageHelper,或者Hibernate的分页方法。需要说明如何实现分页查询,并展示相关代码。 还需要考虑事务管理,因为不使用Spring的话,事务需要手动管理,比如在Servlet中获取数据库连接,设置自动提交为false,执行多个操作后提交或回滚。需要提醒用户注意事务的边界异常处理。 依赖管理方面,用户可能需要使用Maven或Gradle来管理库的依赖。需要给出pom.xml中必要的依赖项,比如Servlet API、JSTL、MyBatis、Hibernate、数据库驱动等。同时,需要确保这些依赖的版本兼容,比如Tomcat 10以上可能需要Jakarta Servlet API,而旧版本使用javax。 部署到Tomcat的步骤也需要简要说明,比如如何打包成WAR文件,如何配置Tomcat的server.xml或context.xml中的数据库连接池(如果使用连接池的话),以及如何将WAR部署到webapps目录下。 最后,要比较MyBatis、MyBatis-PlusHibernate的优缺点,帮助用户根据项目需求选择合适的框架。例如,如果项目需要高度定制化的SQL,MyBatis更合适;如果需要快速开发,MyBatis-Plus的CRUD方法更方便;如果希望完全面向对象,减少SQL编写,Hibernate可能更好。 在写示例代码时,需要注意JSP中尽量避免过多的Java代码,使用JSTLEL表达式来展示数据。同时,Servlet应该处理请求参数,调用服务层或DAO层的方法,然后转发到JSP页面显示结果。 可能还需要提到Web.xml中配置欢迎页面、错误页面,以及Servlet的URL映射。此外,需要注意字符编码的过滤,防止中文乱码,可以通过实现一个Filter并配置到web.xml中。 总结一下,步骤大致如下: 1. 创建项目结构,配置Tomcat。 2. 添加必要的依赖(Servlet、JSTL、ORM框架、数据库驱动)。 3. 配置数据库连接(JDBC或连接池)。 4. 集成ORM框架,配置相关文件。 5. 编写实体类、DAO层、Service层(如果需要)、Servlet控制器JSP视图。 6. 实现CRUD操作分页功能。 7. 处理事务异常。 8. 测试并部署到Tomcat。 现在需要将这些步骤具体化,并给出对应的代码示例配置文件内容,确保用户能够按照步骤操作成功。</think>### 使用JSP+Tomcat开发Java Web项目实践指南 #### 一、基础环境配置 1. **项目结构**(Maven标准) ``` src/main/java └─com/example/dao # DAO接口与实现 └─com/example/model # 数据模型 └─com/example/servlet # Servlet控制器 src/main/webapp └─WEB-INF ├─classes # 编译后的class文件 ├─lib # 依赖库 └─web.xml # 核心配置文件 └─index.jsp # 入口页面 ``` 2. **Maven依赖示例**(以MySQL+MyBatis为例) ```xml <dependencies> <!-- Servlet API --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>3.0.0</version> </dependency> <!-- MyBatis核心 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> </dependencies> ``` #### 二、数据库连接配置 1. **JDBC工具类**(通用连接池示例) ```java public class DBUtil { private static DataSource dataSource; static { // 使用HikariCP连接池 HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb?useSSL=false"); config.setUsername("root"); config.setPassword("123456"); dataSource = new HikariDataSource(config); } public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } } ``` #### 三、ORM框架集成对比 | 框架 | 配置文件 | 编程风格 | 典型应用场景 | |--------------|---------------------------|-------------------------------|----------------------| | MyBatis | mybatis-config.xml | SQL映射文件+接口绑定 | 需要精细控制SQL | | MyBatis-Plus | application.yml (可选) | 继承BaseMapper+Lambda表达式 | 快速CRUD开发 | | Hibernate | hibernate.cfg.xml | 对象关系映射+Criteria查询 | 复杂对象模型管理 | #### 四、MyBatis集成示例 1. **mybatis-config.xml配置** ```xml <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/dao/UserMapper.xml"/> </mappers> </configuration> ``` 2. **Mapper接口与XML映射** ```java public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User selectUserById(int id); } ``` ```xml <!-- UserMapper.xml --> <mapper namespace="com.example.dao.UserMapper"> <select id="selectAll" resultType="com.example.model.User"> SELECT * FROM users </select> </mapper> ``` #### 五、Servlet与JSP交互示例 1. **用户列表展示Servlet** ```java @WebServlet("/user/list") public class UserListServlet extends HttpServlet { private UserMapper userMapper; @Override public void init() throws ServletException { SqlSessionFactory factory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsStream("mybatis-config.xml")); userMapper = factory.openSession().getMapper(UserMapper.class); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<User> users = userMapper.selectAll(); request.setAttribute("users", users); request.getRequestDispatcher("/WEB-INF/views/userList.jsp").forward(request, response); } } ``` 2. **JSP页面展示(使用JSTL)** ```jsp <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <table> <c:forEach items="${users}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> </tr> </c:forEach> </table> ``` #### 六、事务管理要点 ```java try (SqlSession session = sqlSessionFactory.openSession()) { try { UserMapper mapper = session.getMapper(UserMapper.class); mapper.insert(user1); mapper.update(user2); session.commit(); // 显式提交事务 } catch (Exception e) { session.rollback(); // 异常回滚 throw e; } } ``` #### 七、分页实现方案 1. **MyBatis分页插件集成** ```java PageHelper.startPage(1, 10); // 第1页,每页10条 List<User> users = userMapper.selectAll(); PageInfo<User> pageInfo = new PageInfo<>(users); ``` #### 八、部署到Tomcat 1. 打包命令:`mvn clean package` 2. 将生成的WAR文件放入`$TOMCAT_HOME/webapps` 3. 访问地址:`http://localhost:8080/your-project-name/user/list`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值