安装
首先下好tomcat和eclipse,eclipse建议使用比较新的版本,旧版本编写jsp需要安装插件十分麻烦。
学校提供给我们的工具,win10亲测可用 (2 积分)
可能出现的问题:tomcat闪退(建议按照里面的步骤看看自己的tomcat能否成功在电脑上运行再配置)
然后进行配置:Eclipse配置Tomcat + demo
基础知识
默认会一点 java 和 html。
新手一般都在<body>...</body>中进行编写代码的操作,我们目前就只讨论<body></body>中的内容。
介绍下必须掌握的注释方式和表达式:
<!-- --> : html注释,我一般是喜欢用这个的,用浏览器的开发人员工具看得见这个注释,直接shift+ctrl+?让eclipse自行判断 该用什么注释就好了。
<%-- --%>: jsp的注释,用户使用浏览器开发人员工具看不到这个注释<%! %> : 只能变量的声明,方法的定义。在这里声明的变量相当于全局变量。而在脚本段<% %> 中的变量属于局部变量
<% %> : 脚本段:里面写java代码。可以和html的标签混合使用...
如果不使用这个,直接在<body></body>中写java代码,那么就直接 原样输出,这段java代码,并不会运行 。
<%= %> :输出表达式:java变量或者有返回值的方法名称
<br> : 换行符号
注意:1、上面的 jsp 表达式不要随意打破格式!比如<% %>,中间可以随便加空格,但是<和%是绝对不能加空格的,否则格式不对会出现报错异常的。2、上面的表达式都是相互独立的,不要嵌套在一起使用,比如不要<% <% %> %>这样使用。除了注释和输出表达式(取某变量值的表达式,多应用在动作元素中)以外。避坑指南
直接上代码可能更好理解~
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!--注意点1--> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <%! int a=0; %> <!--注意点2--> <% int b=0; %> <!--注意点2--> <% a++; b++; %> <%= "a的值是:"+a %> <br> <%= "b的值是: "+b %> <!-- <%="b的值是: "+b %>等价于<% out.println("b的值是: "+b); %> --> </body> </html>
输出: a的值是:1
b的值是: 1
注意点1:为了防止中文乱码问题,最好将charset=ISO-8859-1"pageEncoding=" ISO-8859-1" 换成 charset=UTF-8" pageEncoding="UTF-8"
注意点2:现在请点击一下左上角的刷新按钮,会发现这时候a开始自加,而b总是1,不变的。
注意到了么?a是在<%! %>声明中定义的,而b是在脚本段<% %>中定义的。a是一个全局变量,b是局部的。每次刷新一次页面,即重新执行一次<% %>和<%= >中的内容。全局变量是不会因为刷新而消失,重新赋值的。而局部变量就没那么好运了,每次他都会重新初始化。这就是为什么a变化,b不变的原因。
查看jsp编译好的java源码
不相信我说的?那我们可以去到我们安装tomcat的文件目录下查看java代码看看a是不是全局变量 :
以我的路径为例:D:\2018new\aha\apache-tomcat-8.5.29\work\Catalina\localhost\ROOT\org\apache\jsp
如果找不到或者文件不对的话:eclipse打开经过 jsp 编译后的java文件
打开后发现下面有一个class和java文件,我们刚刚运行的jsp代码转换成 java文件就是这样的,打开java文件后我们会发现:
我们可以看到变量a在java中的确是一个全局变量,而b则是在方法中实现的局部变量。
补个小知识点:关于jsp的转码编码问题
工作原理如下图:
任何JSP文件本质上是一个Java Servlet程序,类的名称为将JSP文件中的“.”转变成为下划线(可以去看看java文件)
每个JSP页面就是一个Servlet实例——JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。JSP在服务器上是要先被编译成Servlet的。
pageEncoding:指定JSP页面自身的字符编码,作用是设置JSP编译成Servlet时使用的编码。
即要告诉编译器:我们想用什么编码去编程
contentType:指定服务器端向浏览器端发送数据时采用的MIME类型和字符编码
即要告诉服务器:你要用什么样的编码显示界面
一个JSP的源文件需要经过 三个阶段,两次编码,才能完成一次完整的输出。
第一阶段:jsp->java。将jsp编译成Servlet(.java)文件。用到的指令是pageEncoding,根据pageEncoding=“XXX”的指示,找到编码的规则为“XXX”,服务器在将JSP文件编译成.java文件时会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8编码的JAVA源码(即.java)
第二阶段:从UTF-8到UTF-8。在这一阶段中,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。这一过程是由JVM的内在规范决定的,不受外界控制。
第三阶段:从服务器到浏览器