Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 924|回复: 0

SSM框架之关于使用JSP作为视图展示问题解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-5-2 18:48:01 | 显示全部楼层 |阅读模式

    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视图解析器在实际开发中常见的问题,以供大家参考解决一些问题

      

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-4 04:58 , Processed in 0.067400 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表