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

本文讨论了JSP页面放置在webroot与web-inf目录下的优缺点,并对比了这两种做法的安全性和编码便利性。

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

问:

jsp放在webroot目录下 这样就可以让用户直接访问,jsp放在web-inf目录下就必须要通过请求才能访问。
因此放在web-inf下jsp页面显得要安全。 
既然这样 ,那是不是只要是需要通过请求才可以访问的页面就一定要放在web-inf目录下呢
还有放在webroot和放在web-inf目录下都各有什么明显的优缺点 。
答1:

通过设置过滤器,放在webroot下面的文件也可以实现不能直接访问。所以说放在哪里就看习惯是什么样了。

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

答2:

我作个比喻,放web-inf下为方法甲,放webroot下为方法乙.
就像一条河,本来有一个独木桥,人容易掉下去.
于是甲不走独木桥(不使用webroot访问jsp),只是在边上造一座安全的桥通行(用服务端转发方式访问jsp).
乙说有桥为什么不走,造桥多破坏环境呀,他要走独木桥,可是他的做法是先将独木桥踹飞("加一个过滤器阻止所有对*.jsp的访问"),再在原地造一座安全的桥通行(阻止了所有对*.jsp的访问,必然还需要一个服务端转发方式来访问jsp页面)
既然都不走独木桥为什么要那么麻烦还去理独木桥?直接另造座桥就好了.桥造在原地和造在边上有什么区别.更何况,两者在转发时的区别只不过是转发url中甲比乙多了一个文件夹.入口还不是一样.
放在webroot下又麻烦(要针对用户直接访问作一些预防动作)又不安全(一些敏感页面),放在web-inf下也不见得打乱了项目文件结构,怕和classes lib弄混,可以在web-inf下创个名为jsp的文件夹专放jsp文件.
直接用模板框架如freemarker,省了这些个麻烦~``
<think>好的,用户问的是“SSM是什么”,我需要先确认SSM在哪个上下文中使用。通常,在软件开发领域,SSM指的是Spring、Spring MVCMyBatis这三个框架的组合。不过也有可能指其他领域的术语,比如系统管理中的某个缩写,但根据用户之前的问题关于IOC容器,应该是指Java的框架组合。 接下来,我需要详细解释这三个框架各自的作用以及它们如何协同工作。用户可能是一个刚开始学习Java Web开发的人,需要了解常用的技术栈。可能需要从每个框架的基本功能入手,说明为什么这三个会被组合在一起使用。 首先,Spring框架的核心是IOCAOP,负责管理对象依赖注入。用户之前已经了解过IOC容器,这部分可以稍微带过,重点说明Spring在SSM中的作用。然后是Spring MVC,处理Web层的请求响应,控制流程。最后是MyBatis,作为持久层框架,与数据库交互。需要解释这三个层次如何分工合作,形成一个完整的Web应用结构。 可能还需要比较SSM其他框架组合,比如Spring Boot,或者更早的SSH(Struts+Spring+Hibernate),帮助用户理解为什么SSM成为主流选择。例如,MyBatis相对于Hibernate更灵活,适合需要复杂SQL优化的场景。 另外,用户可能想知道SSM的优缺点,或者学习路径。虽然用户没有直接问,但作为补充信息可能会有帮助。比如,SSM需要较多的配置,而Spring Boot简化了配置,但理解SSM有助于掌握底层原理。 还需要考虑用户是否有实际项目经验。如果是初学者,可能需要给出一个简单的项目结构示例,说明各部分如何配合。例如,Controller层处理请求,调用Service层,Service层调用Mapper层访问数据库。同时,可能需要提到相关的配置文件,比如Spring的applicationContext.xml、Spring MVC的dispatcher-servlet.xml以及MyBatis的mybatis-config.xmlMapper XML文件。 此外,用户可能对如何搭建SSM环境感兴趣,虽然问题没有直接问,但可以简要提及需要的步骤,比如添加依赖、配置web.xml、设置组件扫描等。但避免过于深入,保持回答的针对性。 最后,要确保回答结构清晰,分点说明,每个框架单独介绍,然后整体工作流程,可能加上常见配置示例对比其他技术栈,帮助用户全面理解SSM是什么以及其应用场景。</think>SSM 是 Java Web 开发中广泛使用的三大主流框架组合的简称,由 **Spring** + **Spring MVC** + **MyBatis** 组成,主要用于构建企业级分层架构的 Web 应用。以下是详细解析: --- ### 一、框架组成与分工 | 框架 | 作用域 | 核心功能 | 典型注解/配置 | |-------------|-------------|----------------------------------|----------------------| | **Spring** | 容器层 | 依赖注入(IOC)、面向切面编程(AOP) | `@Component`, `@Autowired` | | **Spring MVC** | Web层 | 处理HTTP请求、MVC架构实现 | `@Controller`, `@RequestMapping` | | **MyBatis** | 持久层 | 数据库操作、ORM映射 | `@Mapper`, `@Select` | --- ### 二、典型项目结构 ```bash src/ ├─ main/ │ ├─ java/ │ │ └─ com.example/ │ │ ├─ controller/ # Spring MVC控制器(处理HTTP请求) │ │ ├─ service/ # 业务逻辑层(实现类加@Service) │ │ ├─ dao/ # 数据访问层(MyBatis Mapper接口) │ │ └─ entity/ # 实体类(对应数据库表) │ ├─ resources/ │ │ ├─ spring/ # Spring配置(applicationContext.xml) │ │ ├─ mybatis/ # MyBatis配置(mybatis-config.xml) │ │ └─ mapper/ # SQL映射文件(UserMapper.xml) │ └─ webapp/ │ └─ WEB-INF/ │ └─ web.xml # Web应用入口配置 ``` --- ### 三、核心交互流程 ```mermaid sequenceDiagram participant Browser participant DispatcherServlet participant Controller participant Service participant Mapper participant DB Browser->>DispatcherServlet: 1.发起HTTP请求 DispatcherServlet->>Controller: 2.路由到对应Controller Controller->>Service: 3.调用业务逻辑 Service->>Mapper: 4.执行数据操作 Mapper->>DB: 5.发送SQL语句 DB-->>Mapper: 6.返回查询结果 Mapper-->>Service: 7.返回数据对象 Service-->>Controller: 8.返回处理结果 Controller-->>DispatcherServlet: 9.返回ModelAndView DispatcherServlet-->>Browser: 10.渲染视图响应 ``` --- ### 四、关键配置示例 #### 1. Spring 配置(applicationContext.xml) ```xml <!-- 数据源配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!-- MyBatis整合 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!-- Mapper扫描 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.dao"/> </bean> ``` #### 2. Spring MVC 配置(dispatcher-servlet.xml) ```xml <!-- 注解驱动 --> <mvc:annotation-driven/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 静态资源处理 --> <mvc:resources mapping="/static/**" location="/static/"/> ``` #### 3. MyBatis Mapper 接口 ```java public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User selectUserById(int id); } ``` --- ### 五、与其他技术栈对比 | 组合 | 优势 | 适用场景 | |------------|-----------------------------|-------------------------| | **SSM** | 灵活可控、适合复杂SQL场景 | 传统企业级项目 | | **Spring Boot + MyBatis** | 快速启动、约定大于配置 | 微服务/快速开发项目 | | **SSH** (Struts2+Spring+Hibernate) | 全栈解决方案 | 遗留系统维护 | --- ### 六、学习路线建议 1. **Spring**:掌握IOC容器、AOP原理、事务管理 2. **Spring MVC**:理解请求处理流程、参数绑定、视图解析 3. **MyBatis**:学习动态SQL、结果集映射、缓存机制 4. **整合实践**:配置数据源、事务管理、日志集成 5. **扩展提升**:结合Redis缓存、Shiro安全框架、Quartz定时任务 --- **常见问题**: Q: SSM 与 Spring Boot 有何区别? A: SSM 需要手动配置各个组件(如XML配置),而 Spring Boot 通过自动配置起步依赖简化了整合过程,但底层核心仍基于 Spring 技术体系。学习 SSM 有助于理解框架底层工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值