SSM框架之关于使用JSP作为视图展示问题解决方案
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/**"="/static/images/"="/images/**"="/static/js/"="/js/**"="/static/layer/"="/layer/**"="/static/layui/"="/layui/**"/> 或者是在web.xml这么写 静态资源放行 --> servlet-mapping> servlet-name>default</url-pattern>/view/>/assets/>/components/*>/header/*>/layouts/*>/snippets/*> >/swagger-ui/*>*.html> > 需要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; 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) void contextDestroyed(ServletContextEvent arg0) { TODO Auto-generated method stub ServletContextListener#contextInitialized(ServletContextEvent) contextInitialized(ServletContextEvent arg0) { } } ServerStartupListener.java javax.servlet.ServletContext; javax.servlet.ServletContextEvent; * 获取Web应用路径 * @author yc * class ServerStartupListener extends BaseListener { @Override contextInitialized(ServletContextEvent sce) { Web应用对象 ServletContext application= sce.getServletContext(); 获取web应用路径 String path = application.getContextPath(); 将Web应用路径保存到应用范围中 application.setAttribute("APP_PATH",path); } } ? 并在web.xml配置如下监听器即可: listenerlistener-class>com.blog.listener.ServerStartupListener> 该监听器最好放在org.springframework.web.context.ContextLoaderListener监听器下面。 ? 3.关于使用jstl标签库问题 注意要引用这个maven依赖 dependency> groupId>jstlartifactIdversion>1.2> 至于为什么要使用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/" /> ="suffix"=".jsp" />可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 bean> ? 如果是将jsp放在WEB-INF下可以这么写: ="/WEB-INF/view/" > 至于为什么放在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视图解析器在实际开发中常见的问题,以供大家参考解决一些问题
? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- javafx – 如何更改自动完成TextField(ControlFX
- java – VisualVM连接到本地TomEE非常慢,不能进行
- MyEclipse8.6首次运行maven项目图标上没有小M的标
- java – 使用Kotlin的Hibernate:@ManyToOne(fet
- java – Short toHexString
- java – 通过接口上的注释使@Cachable条目无效?
- 手把手教你使用flex eclipse整合spring
- Java自定义注解Annotation的使用
- java – AngularJS Spring MVC具有安全性 – 从哪
- 多线程 – 为什么信号/插槽不能与多个线程一起工