JSP入门

区分一下html、servlet、jsp的区别:

              html页面:

              静态页面,写标签显示数据方便,但是不能再页面中使用java代码,使用变量

             Servlet:

              可以在java代码中处理用户请求时通过response对象给用户响应一个页面

              可以在页面中显示变量,但是写页面过于繁琐

         jsp 本质是一个Servlet,服务器创建了jsp语法规则,按照jsp语法写的页面 服务器可以翻译为Servlet文件,然后将页面中的内容按照格式写入到响应报文中交给浏览器显示

              java server page, 只能在服务器中运行

              HTML+Servlet强强联合,以页面的形式开发,又可以在页面中使用java代码变量又可以快速的书写html标签

jsp的本质以及运行原理:

    jsp的本质和运行原理:  本质是Servlet,是对Servlet的扩展

              服务器接受到用户的jsp请求时,服务器首先按照jsp语法将jsp页面翻译为Servlet.java文件

                   -存放在:tmp0\work\Catalina\localhost\07_web_jsp\org\apache\jsp

                   - 间接实现了Servlet接口: 翻译后的java类 extends HttpJspBase extends javax.servlet.http.HttpServlet

                   - 需要在web.xml中配置:jsp页面在被访问时由服务器管理翻译编译执行

                            在tomcat的web.xml配置文件中发现

                                     <servlet>

                                        <servlet-name>jsp</servlet-name>

                                        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>                                                                                                                                          </servlet>

                                     <servlet-mapping>

                                        <servlet-name>jsp</servlet-name>

                                        <url-pattern>*.jsp</url-pattern>

                                        <url-pattern>*.jspx</url-pattern>

                                    </servlet-mapping>

              再将Servlet文件编译为class文件

              再调用class文件的生命周期方法处理用户请求[构造器、init、service]

          学习jsp就是学习服务器的jsp引擎如何将jsp页面翻译为Servlet文件

              1、模板元素:

                   html内容:   页面中的纯文本、标签、html注释..

                   作用:显示页面

                   翻译:将html内容直接翻译到service方法中作为out.write()的字符串参数写入到响应体中,最终被浏览器显示

              例子:

              直接书写,想让页面显示的内容直接通过标签书写

              out.write("<h1>hehe</h1>");的字符串参数写入到响应体中

              2、jsp脚本片段:

                   java代码

                   作用:控制页面中逻辑

                   翻译:直接按顺序拷贝到service方法中,service方法内可以写啥jsp脚本片段就可以写啥

               例子:

                <%="a" %> 

              3、jsp表达式:

                   java变量

                   作用:向响应体中写入变量的值

                   翻译: 按顺序翻译到service方法中作为out.print()的参数将变量的值写入到响应体显示到页面中

                例子:

                jsp表达式

                作为out.print()的参数写入到响应体,print方法可以要什么参数,就可以写啥

 

 

例子(遍历集合中的数据,将数据输入到表格中,主要是脚本片段的使用<% %>

<body>

     <!-- 模拟创建数据 -->

     <%

         List<User> list = new ArrayList<User>();

         list.add(new User(1, "hehe1" , "123456" , "hh@atguigu.com"));

         list.add(new User(2, "hehe2" , "223456" , "hh@atguigu.com"));

         list.add(new User(3, "hehe3" , "323456" , "hh@atguigu.com"));

         list.add(new User(4, "hehe4" , "423456" , "hh@atguigu.com"));

         list.add(new User(5, "hehe5" , "523456" , "hh@atguigu.com"));

     %>

     <!-- 通过jsp脚本片段遍历集合,通过jsp表达式将遍历的变量值显示到页面中 , 通过html模板元素显示表格 -->

     <!-- 表格的一行可以显示一个user的数据,一列可以显示user的一个属性,表格的行数由集合的长度决定 -->

     <table border="1" width="70%" align="center">

         <tr>

              <th>id</th>

              <th>账号</th>

              <th>密码</th>

              <th>邮箱</th>

         </tr>

     <%

         for(User user: list){

              //每次遍历得到一个user对象,可以创建一个tr显示

     %>

              <!-- 创建tr -->

              <tr>

                  <td><%=user.getId() %></td>

                  <td><%=user.getUsername() %></td>

                  <td><%=user.getPassword() %></td>

                  <td><%=user.getEmail() %></td>

              </tr>

     <%

         }

     %>

     </table>

</body>

 

 

 

jsp中注释:(主要是在jsp页面中,注释jsp代码要用<%-- --%>,用java注释和html注释不管用

 

 

jsp页面中的注释:

              1、html注释: 会被jsp引擎翻译到java代码中,作为out.write()的字符串参数写入到响应体中

                       但是浏览器html引擎解析响应体时会忽略html注释

                       注释页面中的html内容

              2、java注释: 一般是在jsp脚本片段中使用,相当于在service方法中写注释,会被jsp引擎拷贝到service方法中

                       但是jvm将java类编译为class文件时会忽略java注释

                       注释脚本片段中java代码中的内容

              3、jsp注释:jsp相关内容不能使用java注释和html注释,必须使用jsp注释

                       语法:<%-- --%>

                       jsp引擎在将jsp页面翻译为servlet时会忽略jsp注释

 

 

 

jsp中指令和动作:

         page指令:

          属性

              language:   jsp页面支持的语言

              contentType: 设置响应报文的响应头[解决响应乱码]

              pageEncoding: jsp引擎将当前jsp页面翻译为servlet时使用的编码

              import: 导包

              buffer: out输出流的缓冲区大小

              errorPage: 当前页面发生错误跳转的错误页面

              isErrorPage: 设置当前jsp页面为错误页面  默认false不是

              isELIgnored: 是否忽略EL表达式  默认false不忽略

              session: 设置是否支持在浏览器的一次访问过程中共享数据 默认true支持

 

     jsp指令:对jsp页面的相关配置

              jsp的语法解析的优先级比标签高

              jsp所有的内容都是由服务器的jsp引擎解析执行,路径也是由服务器先解析,绝对路径的基准地址:http://localhost:8080/项目名

              基本语法:<%@ 指令名 属性="属性值" %>

                  4.1 page指令  知道

                       <%@ page 属性="属性值" %>

                  4.2 include指令: 静态包含指令,jsp03.jsp可以将另外一个页面静态包含到当前页面中

                       <%@ include 属性="属性值" %>

                       <%-- <%@ include file="/helloworld.jsp" %>  --%>

                       file属性:要引入的页面地址

                       引入的过程:

                            当前页面中如果有静态指令,先将静态指令要引入的页面代码原封不动拷贝到当前页面中

                            再对当前页面进行翻译、编译、再执行

                            特点:  只会翻译编译执行一个文件,效率高

                  4.3 taglib指令 : 用来引入jstl标签库的

                       <%@ taglib 属性="属性值" %>

          

                  5、jsp的动作标签:  模拟html标签的形式使用java代码

                   每个动作标签本质就是一套java代码

                   转发标签: 转发到其他页面

                   <jsp:forward></jsp:forward>

                        jsp就是动作标签的前缀名

                        page属性:要转发的页面地址

                   动态包含标签:动态的将目标页面包含到当前页面中[不用、和inclue指令进行比较]

                         <jsp:include page=""></jsp:include>

                         jsp引擎先将当前页面和目标页面都翻译为java类,再编译为class文件,运行当前页面的servlet时,执行到动态包含的代码时,再通过java代码执行目标页面的servlet

                         特点:两个页面都会被翻译编译、执行,通过java代码关联起来的[效率低]

        例子:<jsp:forward page="/helloworld.jsp"></jsp:forward>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

救救孩子把

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值