当前位置 : 主页 > 编程语言 > java >

JSP (1): 安装,简单demo,如何查看java源码,jsp的工作原理以及转码编码方式

来源:互联网 收集:自由互联 发布时间:2021-06-25
安装 首先下好tomcat和eclipse,eclipse建议使用比较新的版本,旧版本编写jsp需要安装插件十分麻烦。 学校提供给我们的工具,win10亲测可用 (2 积分) 可能出现的问题:tomcat闪退(建议按

安装

首先下好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的内在规范决定的,不受外界控制。

第三阶段:从服务器到浏览器

网友评论