分析使用纯Servlet开发web应用的缺陷
- 在Servlet当中编写HTML等前端代码,存在什么问题?
- 代码java程序中编写前端代码,编写难度大有错误在IDEA中发现不了 ,麻烦,java程序中编写前端代码,程序的耦合度非常高
,维护成本高
解决
我们只需要写这个Servlet程序中的前端的那段代码,然后让机器将我们写的前端代码自动翻译生成Servlet这种java程序,然后机器再自动将java程序编译生成class文件,然后再使用JVM调用这个class方法
- 代码java程序中编写前端代码,编写难度大有错误在IDEA中发现不了 ,麻烦,java程序中编写前端代码,程序的耦合度非常高
JSP
- 我的第一个jsp程序:
- 再WEB-INF目录之外创建一个index.jsp文件,改文件没有任何内容
- 将上面的项目部署后,启动服务器,打开浏览器,访问以下地址:
- http://localhost:8080/jsp/index.jsp展现的是一个空白
- 实际上访问的这个:index.jsp,底层执行的是index_jsp.class这个程序。
- 这个index.jsp会被tomcat翻译成index_jsp.java文件,然后tomcat服务器又将index_jsp.java编译生成index_jsp.class文件
- 访问index.jsp,实际上执行的是index_jsp.java文件 - 空执行后可在
后面的地址在我的电脑中搜索
java程序放到work里面 - 我们在浏览器访问jsp他的底层还是Servlet
- 打开index_jsp.java
总结
JSP实际上就是一个Servlet,jsp的生命周期和Servlet的生命周期完全相同,完全就是一个东西,没有任何区别,jsp和servlet一样都是单例的
- jsp文件第一次访问的时候是比较慢的,为什么?
- 为什么大部分的运维人员在给客户演示项目的时候,为什么提前先把所有的jsp文件先访问一遍
- 因为第一次访问需要把jsp文件翻译成java源文件,还要编译生成class字节码文件,创建servlet对象调用对象的init和servlet方法
- 第二次比较快的原因是直接调用单例servlet对象的service方法即可。 - 对jsp进行错误调试的时候,要打开JSP文件对应的java文件,检查java代码
举例
在jsp中输入abc
会在service中显示
- JSP的基础语法
- 在JSP文件中直接编写的文字都会自动翻译到Servlet类的service方法的out.write(“翻译到这里”),直接翻译到双引号里,被java程序当做普通字符串打印输出到浏览器
- jsp没有默认UTF-8,需在jsp中设置如下UTF-8
<%@page contentType="text/html;charset=UTF-8" %>
- 怎么在JSP中编写java程序
- <% java语句;%>
- 在这个符号当中编写的被视为java程序,注意要以;结尾,被翻译到Servlet类的service方法内部
- 在<% %>这个符号里面写java代码时候,你正在方法体中写代码
- <% java语句;%>
举例
这样写的java代码会直接暴漏在service方法中
这样写放到了out.print中
- JSP注释
<%-- --%>不会被翻译到java源代码当中
错误代码
因为在方法体中不能写静态代码块和静态方法,需注释掉
- <%! %>在这个符号编写的java程序会自动翻译到service方法之外,这个语法很少用,会直接写到类体当中,很少使用因为在service方法外面写静态变量和实例变量,都会存在线程安全问题,JSP就是servlet,servlet是单例的,多线程并发的环境下,这个静态变量和实例变量一旦有修改操作,必然会存在线程安全问题
JSP输出语句
- <% %>在这个符号中可以直接使用out对象,输出一个java变量,因为有java程序所以有out
<%
String name="jack";
out.print("name=" +name);
%>
- 输出一个字符串,可以直接写到jsp中,因为可以直接翻译到out.print()中
- 如果输出的内容中含有java代码,这个时候可以使用以下语法格式
- <%= %>
- 在等号的后面编写要输出的内容
- 这个符号会被翻译到srvice中,被翻译成 out.print();
- 何时用:输出的内容中含有java的变量,输出的内容是一个动态的内容,不是一个死的字符串,如果输出的是一个固定的字符串直接在JSP中编写即可
- 举例
JSP和Servlet的区别
- 职责不同:
- Servlet的职责:收集数据(逻辑处理,业务处理,连接数据库,获取收集数据)
- JSP的职责:展示数据(JSP的强项是做数据的展示)
总结
- JSP中直接编写普通字符串(会翻译到service方法的out.write(“这里”))
- <% %> (翻译到service方法内部,里面是java语句)
- <%! %>(翻译到service外部)
- <%= %> (翻译到service内部,翻译为out.print();)
- <%@page contentType=“text/html;charset=UTF-8” %>(page指令,用来设置响应内容指令)