准备工作,导入一些依赖
<dependencies> <!--Servlet 的依赖--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <!--jsp的依赖--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <!--jstl 表达式的依赖--> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <!-- taglibs 标签库 --> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-impl</artifactId> <version>1.2.5</version> <scope>runtime</scope> </dependency> </dependencies>
任何一种独立的语言都有自己的语法,jsp作为java的一种应用技术,它拥有一些自己的扩充语法,Java所有语言搜支持
<%= new java.util.Date()%> //常量或变量表达式 <% int i=1; %> //java代码(嵌套Java脚本) <%! static { //JSP声明(也可以叫方法) System.out.println("loading"); } %>
JSP自定义页面:
当我们在网页发生错乱的时候:例如 服务器异常 500 ,找不到资源 404
我们就可以在web.xml中自定义这些页面的走向,然后在指定页面中提出一些解决方法,就可以避免进入tomcat中自带的错误页面
<error-page> <error-code>500</error-code> //自定义500错误页面 <location>/error/500.jsp</location> </error-page> <error-page> <error-code>404</error-code> //自定义404错误页面 <location>/error/404.jsp</location> </error-page>
<!-- @include 会将两个页面合并在一起的:就只有一个页面了 --> <%@ include file="common/Header.jsp"%> <h1>公共页面测试</h1> <%@ include file="common/Footer.jsp"%> <%--jsp标签:拼接页面,本质还是三个页面;内置的一些变量常量互不干扰;一般使用这个--%> <jsp:include page="common/Header.jsp"/> <h1>网页主体</h1> <jsp:include page="common/Footer.jsp"/>
上面的代码实现的是网站的公共页面的测试:以及两种实现方法和区别。
JSP:九大内置对象
- PageContext 存东西
- Request 存东西
- Response
- Session
- Application 【servletContext】存东西
- Config 【servletConfig】
- out
- page
- exception
<body> <% pageContext.setAttribute("name1","马明1"); request.setAttribute("name2","马明2"); session.setAttribute("name3","马明3"); application.setAttribute("name4","马明4"); %> <%--脚本中的代码会被原封不动的转换到JSP_java 要求:这里的代码必须要保证Java的正确性 --%> <% //pagecontext中取出,我们通过寻找的方式来 String name1 =(String) pageContext.findAttribute("name1"); String name2 =(String) pageContext.findAttribute("name2"); String name3 =(String) pageContext.findAttribute("name3"); String name4 =(String) pageContext.findAttribute("name4"); String name5 =(String) pageContext.findAttribute("name5");//不存在 %> <%--使用EL 表达式寻找--%> <h1>取出的值为:</h1> <h2>${name1}</h2> <h2>${name2}</h2> <h2>${name3}</h2> <h2>${name4}</h2> <h2>${name5}</h2><%--这个对象不存在:所以EL 表达式不输出--%> <h2><%=name5%></h2><%--这个对象存在:但是这种表达式会输出:null--%> </body>
这四个存入数据对象的作用域为:
pageContext:保存数据只在一个页面中有效,作用域最低,看完,退出页面就需要重新加载
resquest:保存的数据只在一次请求中有效,请求转发的时候会携带这个数据,一旦请求消失,数据也会消失
session:保存的数据只会在一次会话中有效,用户使用一次后依旧可以用(单个用户),从打开浏览器到彻底关闭浏览器
application:保存的数据在服务器范围内都有效,一个用户用完了,其它用户也可以使用,从打开服务器到关闭服务器
注:pagecontext从网页获取数据的方式:采用由低到高------page--->request--->session-->application
页面转发:
pageContext.forward("路径名")----------------前端实现
request.getRequestDispatcher("路径名").forward(request,response);--------------后端实现(servlet实现)