2023年6月9日 星期五 地点:镇江市软通极客人才学院
主要内容:了解并掌握JSP的基本知识
说到JSP,就得讲它的由来:Servlet做动态页面响应这种方式有几个问题: 1)有大量的字符串拼接操作,操作复杂。 2)前端工程师修改页面代码困难 为了解决以上问题sun公司给出了:Java Server Page——简称JSP技术 JSP是为了同时满足动态生成网页和简化页面书写的需求诞生的。
在JSP文件的编写过程中,共有三种注释方法 HTML的注释,将输出到客户端,JSP注释,不翻译到Java文件中,JSP注释只有在JSP文件中可见,在Java脚本中注释,将翻译到Java文件中,依然是注释语句。
接下来讲JSP指令---JSP可以通过指令元素而影响容器翻译生成Java类的整体结构。JSP中常用的指令有三个:page、include、taglib,本章主要学习其中的两个:page指令、include指 令。
page指令是最复杂的一个指令,共有13个属性。page指令作用于整个JSP页面,可以将指令放在JSP页 面任何一个位置。1)其指令属性之一----import,用来来引入JSP文件需要使用的类。可以使用逗号同时引入多个包,也可以在一个JSP 文件中多次使用import。值得注意的是,import是page指令中唯一一个可以在一个JSP文件中多次出现 的属性,其他属性在一个JSP文件中只能出现一次。2)其指令属性之二--- pageEncoding ,pageEncoding属性用来设置JSP文件的页面编码格式。其指令属性之三---session,用来设置JSP页面是否生成session对象。该属性默认值为true,可以设置成false。session属性值设置为false后,该JSP翻译生成的类中将没有内置对象session,该JSP不参与会话。3)errorPage,errorPage属性设置JSP页面的错误页面。当JSP中发生异常或错误却没有被处理时,容器将请求转发到 错误页面。4)isErrorPage。isErrorPage属性默认值是false,可以设置为true。在JSP的错误页面中,将isErrorPage设置为true,则 该页面翻译生成的Java类中,将生成exception内置对象。注意:即使一个页面没有设置isErrorPage=“true”,也可以作为错误页面使用,区别在是否有内置对象 exception内置对象产生。
JSP中另外一个常用指令,用来静态包含其他页面。所谓静态包含,指的是在翻译期间, 把包含的页面也翻译到当前页面的Java文件中,所谓Java源文件就实现“二合一”。 若在main.jsp中编写如下代码: <%@ include file="copyright.jsp"%>过程:翻译main.jsp时,会把copyright.jsp文件翻译插入到相应位置。
接下来介绍.JSP标准动作。JSP规范中定义了一系列的标准动作。Web容器按照规范进行了实现,可以解析并执行标准动作。1)forward,forward动作:在JSP页面中进行请求转发。2)include。include动作:在JSP页面中,进行动态包含。因为是动态包含,所以可以在包含时传递请求参数。而include标准动作与include指令的区别就在于1.静态包含 include指令 动态包含 include标准动作 2.静态包含 动态包含 3.include指令的属性是file,实现静态包含,发生在翻译阶段,将包含的jsp文件翻译进去 include标准动作的属性是page,实现动态包含,发生在请求阶段,将包含的jsp文件直接翻译成java文 件。3)param。param动作往往作为子动作使用,为forward和include动作传递参数。
然后老师又讲了EL(Expression Language 语法:${ 表达式})表达式&EL的内置对象,他的作用是代替jsp中脚本表达式的功能,简化对java代码的操作。
EL使用 - 获取作用域的值。获得四个容器(page、request、session、ServletContext :域对象)的数据,在ScopeServlet中:
@WebServlet(name = "ScopeServlet" , urlPatterns = "/scope")
public class ScopeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
this.doGet(request, response);
}
scope.jsp中:<%
pageContext.setAttribute("name", "赵六");
%>
当前页作用域:${pageScope.name} <br>
请求作用域:${requestScope.name} <br>
会话作用域:${sessionScope.name} <br>
上下文作用域:${applicationScope.name} <br>
<br>
${name}
${aaa}
值得注意的是,获取属性时,若使用表达式的话,指定的key不存在,表达式会得到null;而使用EL表达式取出的时候指定的key不存在,页面上什么都没有。
此外还有关于EL使用 - 解析复杂数据的一些简单内容,复杂数据:数组,集合(List Map),自定义对象(Person User Animal)。还有EL使用 - 执行运算。至此关于EL的运算的讲解结束。
为期5天的实习也正式宣告结束,虽然我收获的不多,有很多没听懂的地方,但是,至少我用心听的东西,都已经记载了脑子里,收获多少还是有的。希望未来对于Java的学习,不会只停留在这5天的实习,而是对于我一个属于计算机专业的学生一生的学习和研究!