JSP作为视图层展示数据,已经有很长一段时间了,不管是在校学习还是企业工作,总会或多或少接触这个。特别是对于一些传统中小型或者一些几年前的企业而言,有很多使用JSP作为视图展示层。

JSP本质是就是Servlet,Servlet可以说也是JSP。

用图描述就是如下:

通过上述两张图,足以知道,不管是JSP还是Servlet最后都是以HTML的形式在前端显示。

关于JSP和Servlet学习教程可以参考这个教程:http://www.runoob.com/jsp/jsp-tutorial.html

JSP作为视图展示数据,通常情况下会有这么几个问题?

1.如果是SpringMVC拦截条件为*.do,可以不考虑静态资源被拦截问题,如果是/的话,就不得不考虑了。通常情况下,解决办法如下:

在SpringMVC的配置文件中写:

    <!-- 使用注解 -->
<mvc:annotation-driven/>
<mvc:resources location="/static/css/" mapping="/css/**"/>
<mvc:resources location="/static/images/" mapping="/images/**"/>
<mvc:resources location="/static/js/" mapping="/js/**"/>
<mvc:resources location="/static/layer/" mapping="/layer/**"/>
<mvc:resources location="/static/layui/" mapping="/layui/**"/>

或者是在web.xml这么写

 <!-- 静态资源放行 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/view/</url-pattern>
<url-pattern>/assets/</url-pattern>
<url-pattern>/components/*</url-pattern>
<url-pattern>/header/*</url-pattern>
<url-pattern>/layouts/*</url-pattern>
<url-pattern>/snippets/*</url-pattern>
<url-pattern>/swagger-ui/*</url-pattern>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

需要SpringMVC配置文件补充<mvc:default-servlet-handler/>

如果是这样使用,需要注意的是必须放在SpringMVC的前端控制器前面,否则是不起作用的。

2.使用jsp视图解析器,路径问题需要注意

解决办法:在web.xml配置或者直接在jsp页面每个静态资源../或者../../替换为${pageContext.request.contextPath}

${pageContext.request.contextPath},因为通过它直接就获得上下文路径。

还有就是新建两个类定义全局路径,也是可以解决这个问题的。

BaseListener.java

package com.blog.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; /**
* Application Lifecycle Listener implementation class BaseListener
*
*/
public class BaseListener implements ServletContextListener { /**
* Default constructor.
*/
public BaseListener() {
// TODO Auto-generated constructor stub
} /**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
} /**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
} }
ServerStartupListener.java
package com.blog.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent; /**
* 获取Web应用路径
* @author yc
*
*/
public class ServerStartupListener extends BaseListener { @Override
public void contextInitialized(ServletContextEvent sce) { // Web应用对象
ServletContext application= sce.getServletContext(); // 获取web应用路径
String path = application.getContextPath(); // 将Web应用路径保存到应用范围中
application.setAttribute("APP_PATH", path); } }

并在web.xml配置如下监听器即可:


    <listener>
<listener-class>com.blog.listener.ServerStartupListener</listener-class>
</listener>

该监听器最好放在org.springframework.web.context.ContextLoaderListener监听器下面。

3.关于使用jstl标签库问题

注意要引用这个maven依赖

<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

至于为什么要使用jstl,简单的说比<%%>简洁方便,相对灵活,功能也比较强大。

当然了,建议不要滥用,滥用的代价会导致维护起来十分困难。

如果你的jstl是使用1.0版本的话,遇到不能使用的问题可以参考这个链接:https://blog.csdn.net/whh743/article/details/53580954

4.视图解析器问题

视图解析一般是没有问题的,除非路径写错了,或者tomcat应用服务器存在问题。不然的话一般配置正确的视图解析器路径,都会正常解析并返回视图数据。

SpringMVC配置文件,正确配置内容如下:

    <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/" />
<property name="suffix" value=".jsp" /><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
</bean>

如果是将jsp放在WEB-INF下可以这么写:

    <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" /><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
</bean>

至于为什么放在WEB-INF下,原因是因为用户不能直接通过浏览器输入URL访问对应的jsp文件或者是其他资源,简单的说这样有利于安全性。

5.关于用户信息保存Session问题,不管是Servlet(JSP)或者是在SPringMVC中,都可以通过如下代码定义Session的属性及其值和获取属性及其值

HttpSession session=request.getSession();
session.setAttribute("User", user);
HttpSession session  = request.getSession();
session.getAttribute(“名称”);------得到session放入进去的信息。
session.getAttributeNames()-----得到session里面所有的信息名称。
session.getMaxInactiveInterval()----得到session最大存活时间。
seesion.getId();------得到session的id。比较有用的属性,可以实现共享session。
session.getCreationTime()-----session创建时间。

小结:

本文主要围绕的是关于JSP视图解析器在实际开发中常见的问题,以供大家参考解决一些问题

  

SSM框架之关于使用JSP作为视图展示问题解决方案的更多相关文章

  1. SSM框架整合(实现从数据库到页面展示)

    SSM框架整合(实现从数据库到页面展示) 首先创建一个spring-web项目,然后需要配置环境dtd文件的引入,环境配置,jar包引入. 首先让我来看一下ssm的基本项目配件.(代码实现) 1.首先 ...

  2. 搭建ssm框架,可实现登录和数据展示以及增删改查

    需求: 后台使用ssm(spring-springMVC-mybatis)进行整合 前台使用bootstrap框架 前后台交互使用Ajax进行发送 表结构: 登录页面后显示所有用户信息,可对每条进行增 ...

  3. 关于SSM框架项目中jsp页面EL表达式使用的一些疑问(一)

    问题 ssm框架整合中,jsp页面中EL表达式所引用的对象“page”可以在controller中使用mav.addObject(“page”,pag )进行添加,如果省略mav.addObject( ...

  4. SSM框架之批量增加示例(同步请求jsp视图解析)

    准备环境:SSM框架+JDK8/JDK7+MySQL5.7+MAVEN3以上+Tomcat8/7应用服务器 示例说明: 分发给用户优惠券,通过checkbox选中批量分发,对应也就是批量增加. 对于公 ...

  5. [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World

    来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...

  6. 百度富文本编辑器ueditor在jsp中的使用(ssm框架中的应用)

    折腾了一下午终于把百度富文本编辑器ueditor搞定了!   项目地址:https://github.com/724888/lightnote_new     首先我参考了一个ueditor的demo ...

  7. Shiro + SSM(框架) + Freemarker(jsp)

    Shiro + SSM(框架) + Freemarker(jsp)讲解的权限控制Demo,还不赶快去下载? 我们知道Ajax不能做页面redirect和forward跳转,所以Ajax请求假如没登录, ...

  8. java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化

    一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...

  9. 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架

    自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...

随机推荐

  1. MySQL的排序方式

    MySQL中 进行排序的方式: Select * from 表名 [where 条件 order by  字段名(默认的是ASC升序排列)] ASC是升序排列,DESC用来指定降序排列 Oracle中 ...

  2. Maven项目下启动后Eclipse报错:org.springframework.web.context.ContextLoaderListener

    严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis ...

  3. Web缓存加速指南(转载)

    这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中.为了简要起见,某些实现方面的细节被简化或省略了.如果你更关心细节实现则完全不必耐心看完本文,后面参考 ...

  4. Aspose.cells常用用法1

    代码: var execl_path = @"G:\zhyue\backup\项目修改-工作日常\2018-11-12 区域楼盘中心点和放大比例计算\a.xlsx"; Workbo ...

  5. CSS实现各类分栏布局

    在CSS中,实现分栏布局有两种方法.第一种方法是使用四种CSS定位选项(absolute .static.relative和fixed)中的绝对定位(absolute positioning),它可以 ...

  6. 612.1.002 ALGS4 | Analysis of Algorithms

    我们生活在大数的时代 培养数量级的敏感! Tip:见招拆招 作为工程师,你先要能实现出来. 充实基础,没有什么不好意思 哪怕不完美.但是有时候完成比完美更重要. 之后再去想优化 P.S.作者Rober ...

  7. git pull文件时和本地文件冲突的问题

    在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...

  8. python学习:数据类型检查

    函数调用时可能会出现数据类型不匹配的问题,为了保证代码的鲁棒性,最好加上数据类型检查. 应用举例: if not isinstance(x, (int, float)):      raise Typ ...

  9. 1.Spring——七大主要模块

    Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Content. 下面分别简单介绍: 1.Spring Core Core模块是Spring的核心类库 ...

  10. Spring常用注解简单汇总

    使用注解之前要开启自动扫描功能,其中base-package为需要扫描的包(含子包). <context:component-scan base-package="cn.test&qu ...