【代码如下】
LoginErrorServlet:登录失落败,手动拼接login.html页面,并将缺点信息动态地添加进去。arduino复制代码 //3.给浏览器天生相应信息 boolean result = service.login(username,password); String msg = result ? 34;用户上岸成功" : "用户上岸失落败"; request.setAttribute("msg",msg); if (result){ //上岸成功 response.sendRedirect("/success.html"); }else { //上岸失落败 //转发到处理缺点的servlet中 request.getRequestDispatcher("/loginErrorServlet").forward(request,response); }
2. LoginErrorServlet:手动拼接html页面,动态展示登录缺点信息。
scss复制代码@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //相应给用户 response.setContentType("text/html;charset=utf-8"); //吸收缺点的信息 String msg = (String) request.getAttribute("msg"); //获取输出流 PrintWriter writer = response.getWriter(); //拼接登录的html页面 response.getWriter().print("<html>"); response.getWriter().print("<body>"); response.getWriter().print("<form action='loginInterServlet' method='post'>"); response.getWriter().print(" <font style='color: red'>"+msg+"</font><br/>"); response.getWriter().print("用户名:<input type='text' name='username'/><br/>"); response.getWriter().print("密码:<input type='password' name='password'/><br/>"); response.getWriter().print("<input type='submit' value='登录'/>"); response.getWriter().print("</form>"); response.getWriter().print("</body>"); response.getWriter().print("</html>"); }
解释:上述虽然能够达到我的需求。但是他有以下两个缺陷:
拼接麻烦开拓效率低;阅读性差,代码难以掩护;
问题:思考既然以前在servlet有上述缺陷,为什么还要利用拼接呢?
由于如果我们想在html页面显示缺点的信息,我们只能采取这种办法,html页面不能够书写java代码。而我们既不采取上述拼接标签的办法,还想实现大略的效果。我们可以利用jsp技能,在jsp中可以书写java代码同时还可以书写html标签。这样 就能够利用jsp技能在客户端和做事端直接进行数据交互了。
1.2 JSP是什么JSP全名为Java Server Pages,中文名叫java做事器页面,实在质是一个Servlet ,它是由Sun 公司倡导、许多公司参与一起建立的一种动态网页 技能标准。实在便是一个既能书写Servlet代码又能书写HTML代码的文件。
1.3 创建JSP文件sql复制代码在web目录下,新建一个jsp文件,点击鼠标右键New --- JSP---给这个文件取个名字。
【图1 创建JSP】
文件内容如下:
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body></body></html>
1.4 在JSP中书写代码
jsp中既可以书写java代码,同时还可以书写html标签。我们完成练习如何在jsp页面中书写java代码。
【需求】
在jsp页面上获取当前日期,并将其格式化成字符串"yyyy-MM-dd HH:mm:ss";将这个字符串展示在浏览器上;解释:
1)jsp中的注释:<%--注释内容--%>,添加注释的快捷键是:ctrl+/;
2)在jsp中书写代码有三种办法,我们这里先先容一种,格式:
<%java代码%>
【参考代码】demo01.jsp
arduino复制代码<%@ page import="java.util.Date" %><%@ page import="java.text.SimpleDateFormat" %><%-- Created by IntelliJ IDEA. Date: 2018-01-09 Time: 19:15 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body> <%-- jsp中的注释 【需求】 1. 在jsp页面上获取当前日期,并将其格式化成字符串"yyyy-MM-dd HH:mm:ss"; 2. 将这个字符串展示在浏览器上; --%> <% //获取当前系统韶光 Date d = new Date(); //创建日期格式化解析器工具 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //利用日期格式化解析器工具调用方法格式化日期工具d String s_date = sdf.format(d); //掌握台输出 System.out.println("s_date = " + s_date); //将这个字符串展示在浏览器上 response.getWriter().print(s_date); %></body></html>
【运行结果】启动tomcat,并且访问这个jsp页面。
在浏览器看到 format格式的日期:
【掌握台输出】
ini复制代码s_date = 2018-01-09 19:28:22
2、JSP的运行事理
通过上面的jsp初体验, 我们看到jsp中既可以编写java代码也可以直接编写html代码,相对servlet更加方便.并且我们通过浏览器访问到的jsp页面,末了在浏览器中看到了相应到浏览器中的结果。那么全体过程的实行流程是若何的呢,我们可以参考如下图:
通过上面的实行流程,我们可以找到jsp天生的.java源文件,这样就可以知道jsp的真正事理,同时可以看下jsp为什么是servlet。
如何查看天生的.java源文件呢?
我们可以到tomcat中查看一下上面案例中的jsp页面是怎么样的一种存在。IDEA借助tomcat发布web项目的机制:动态发布(为每一个web项目创建一个单独的发布文件)。我们可以通过tomcat个中日志中的CATALINA_BASE路径找到我们当前这个JSP页面在tomcat中的位置:
【图1 IDEA发布项目的路径】
找到这个目录后,会看到以下3个文件夹:
【图2 文件目录】
我们打开C:\Users\admin.IntelliJIdea2017.3\system\tomcat\Tomcat_8_5_311_day05目录创造有两个文件:
【图3 JSP被翻译后的代码】
打开demo01_jsp.java文件后,代码如下所示:
我们可以看到当前的jsp文件被翻译成了一个类,这个类继续HttpJspBase类,那么这个HttpJspBase类又是什么?
把稳:jsp的翻译由做事器完成,HttpJspBase类一定也是tomcat做事器的内容,以是我们须要找到org.apache.jasper.runtime.HttpJspBase这个类,这个类可以到tomcat的安装目录下的lib文件夹下找到jasper.jar,将其解压,找如下目录:org\apache\jasper\runtime,找到HttpJspBase.class。
利用反编译工具打开,如下所示:
通过不雅观察源码,根据我们所学习的继续关系,我们创造JSP实在底层便是一个servlet。通过不雅观察源码,我们创造我们刚刚编写的所有代码都在该Servlet里面的service方法内部。
swift复制代码public final class demo01_jsp extends org.apache.jasper.runtime.HttpJspBase { public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { try { response.setContentType("text/html;charset=UTF-8"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write('\r'); out.write('\n'); out.write("\r\n"); out.write("\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write(" <title>Title</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write(" "); out.write("\r\n"); out.write(" "); //获取当前系统韶光 Date d = new Date(); //创建日期格式化解析器工具 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //利用日期格式化解析器工具调用方法格式化日期工具d String s_date = sdf.format(d); //掌握台输出 System.out.println("s_date = " + s_date); //将这个字符串展示在浏览器上 response.getWriter().print(s_date); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>\r\n"); } catch (java.lang.Throwable t) { 。。。。 }}
总结:
1.<% %>中书写的代码被直接解析成java代码;
2.jsp之以是可以编写html代码,实在实质上也是类似我们利用Servlet直接输出的。也便是说底层还是像我们之前做法一样进行标签拼接。html部分都被out.write("")方法以字符串的形式拼接,然后相应给浏览器;
3.在这个java文件中有个_jspService,这个方法有两个参数request,response;
4.由于我们自己编写的代码全部都落入到了service方法内部一开始就已经声明了request,response,session,application(ServletContext)等工具了,这些工具成为之jsp内置工具。
3、JSP中书写java代码的三种办法在JSP页面的body标签中,可以直接书写html代码和JS代码。但是,如果在JSP页面中书写java代码。必须遵照固定的格式,才能够生效;JSP页面中书写java代码有三种办法:1.脚本片段;2.脚本声明;3.脚本表达式;
办法一:脚本片段脚本片段指的是一段java代码。书写格式:<% java 代码 %>
【示例】 demo02.jsp
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body><% //书写java代码,向浏览器输出数据 response.getWriter().println("hello jsp");%></body></html>
【被翻译后的源码】
swift复制代码 out.write("\r\n"); out.write(" "); response.getWriter().println("hello jsp"); out.write("\r\n");
【页面结果】:
办法二:脚本声明
erlang复制代码脚本片段虽然可以嵌入java代码,但是如果,我们要给当前的jsp中定义一些成员方法或者成员变量,就须要一个新的技能——脚本声明.
解释:通过查看jsp的源代码我们创造,脚本片段的代码都会存在service方法中,而方法中是不可以定义一个方法的。
脚本声明的格式:<%! 书写Java代码 %>
【示例一】声明成员变量 demo03.jsp
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body><%! int num = 10; public void method(){}%></body></html>
【被翻译后的代码】成员变量
办法三:脚本表达式
虽然脚本声明和脚本片段已经可以书写Java代码了,但是如果我们要利用java代码向页面输出一些内容,还是须要 利用原来的response工具,比较繁琐,因此,我们须要一个更加简便的办法,可以代替response向页面输出内容 ——这个便是脚本表达式。
脚本表达式的格式:<%= 向浏览器输出的内容 %> 等价于:out.print( 向浏览器输出的内容)
【示例】在页面输出信息
bash复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body><%="我爱摸鱼"%><%="上海程序员摸鱼"%><%response.getWriter().print("response");%></body></html>
把稳:
上面代码中,我们书写代码的顺序是先:
arduino复制代码<%="我爱摸鱼"%><%="上海程序员摸鱼"%>
再:
vbscript复制代码response.getWriter().print("response");
可是浏览器查看数据的结果是
vbscript复制代码response 我爱摸鱼 上海程序员摸鱼
缘故原由:response.getWriter()获取的输出流是:PrintWriter。而脚本表达式<%=%> 等价于:out.print( 向浏览器输出的内容).并且这种办法获取的输出流是:JspWriter。实在导致上述输出结果前后顺序便是PrintWriter和JspWriter。
JspWriter:将输出的内容先放到jsp内置的缓冲区中,然后再刷新输出。
PrintWriter:是不该用jsp内置的缓冲区,直接将内容写到网页中。
总结:
1.不要同时利用脚本表达式和response同时往页面输出信息,会涌现顺序不一致。征象:response会涌如今最前面。利用一种输出即可。
2.脚本表达式<%= str %> :在页面输出内容,在service方法中起浸染;
3.脚本片段<% %> :在service方法中,原样输出的代码片段;属于局部为,放在_jspService方法中
4.脚本声明:<%! String str = "程序员" %> :定义成员变量;
4、JSP的三大指令4.1 指令概述JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出效果,而只是见告引擎如何处理JSP页面中的别的部分。
指令用来声明JSP页面的一些属性,比如编码办法,文档类型。我们在servlet中也会声明我们利用的编码办法和相应的文档类型的,而JSP便是用指令来声明的。
【1】JSP页面的3大指令css复制代码a) page:页面<%@page contentType="text/html;charset=utf-8" %> 解释:声明jsp页面的编码办法b) taglib:引入标签库c) include:包含
【2】指令的格式
swift复制代码<%@指令名 属性名="属性值"%>
4.2 taglib指令
【浸染】
复制代码用于在JSP页面中导入JSTL标签库;
【格式】
ini复制代码<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>解释:表示引入外部的jstl标签库的。prefix="c" 表示前缀uri="http://java.sun.com/jsp/jstl/core" 表示jstl标签库的地址
4.3 include指令
【浸染】
复制代码在一个JSP页面中静态包含其余一个JSP页面;
【格式】
ini复制代码<%@include file="URL" %> 指定要导入页面的地址
【利用示例】
需求:课后的原型中的页面放到web文件夹下面。然后打开主页index.jsp.在主页中引入header.jsp页面。
xml复制代码<!--引入头部--><div id="header"> <%@include file="header.jsp"%></div>
【效果】
小结
三大指令是什么?分别的浸染是?
page:设置网页上一些属性taglib:导入标签库include:包含另一个JSP页面5、page指令5.1、page指令概述【1】page指令的浸染page是jsp中必须利用的一个指令,用于设置JSP上各种页面的属性,见告tomcat如何将一个JSP翻译成Servlet
【2】语法格式css复制代码<%@page 属性名="属性值" %>
可以放在JSP中任何位置,一样平常建议放在页面的最顶部
5.2、page指令的属性【1】导包干系属性:ini复制代码language="java" 当前页面利用的措辞,不写默认是javaimport="java.util." 导入java.util下所有类,导包
办法一: 每个page指令导入一个类
less复制代码<%@page import="java.text.SimpleDateFormat"%><%@page import="java.util.Date"%>
办法二: 一个page指令的import属性导入所有的包,包之间利用逗号分隔
ini复制代码<%@page import="java.util.Date,java.text.SimpleDateFormat"%>
浸染:相称于导包
【代码演示】
ini复制代码<%--<%@ page import="java.util.Date" %><%@ page import="java.text.SimpleDateFormat" %><%@ page import="java.util.ArrayList" %>--%><%@ page import="java.util.,java.text.SimpleDateFormat" %><%-- Created by IntelliJ IDEA. Date: 2018-10-10 Time: 14:59 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body><% //创建日期工具 Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); ArrayList<String> list = new ArrayList<>();%></body></html>
【2】与编码干系属性:
ini复制代码<%@ page contentType="text/html;charset=UTF-8" language="java"%>
【浸染】设置相应编码
vbscript复制代码response.setContentType("text/html;charset=UTF-8");
【3】与缺点干系干系属性:
ini复制代码1、errorPage="缺点页面的URL": 用于指定如果当前页面出错,转发到哪个页面去:<%@ page language="java" errorPage="error.jsp"%>2、isErrorPage="false":默认是false,指定true表示是缺点页面 当前这个页面是否是一个缺点页面,缺点页面可以多利用一个内置工具。exception:<%@ page isErrorPage="true"%>
缺点页面跳转的3种设置:
1、通过page指令的errorPage属性指定:如果页面出错,转发到error.jsp这个页面
ini复制代码<%@ page errorPage="error.jsp"%>
代码演示:
typescript复制代码<%--跳转到缺点页面--%><%@page errorPage="../error.jsp" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body><% int i = 1 / 0;%> hello world</body></html>
typescript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><%--声明是缺点页面--%><%@page isErrorPage="true" %><html><head> <title>Title</title></head><body> <h2>缺点页面</h2> <%=exception.getMessage()%></body></html>
页面效果:
2、通过web.xml文件指定缺点码:相应状态码为404则跳转到404.jsp页面
如果不指定,那么按照以前报错办法,会涌现如下缺点页面:
我们可以在web.xml进行配置跳转到更加好看一些的页面。
xml复制代码<!-- 指定缺点页面 --><error-page> <!-- 指定缺点码 --> <error-code>404</error-code> <!-- 出错往后跳转到哪个页面 --> <location>/404.jsp</location></error-page>
404.jsp页面代码:
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body> <img src="/404.jpg"/></body></html>
3、通过web.xml文件指定缺点类型:发生空指针,则跳转到null.jsp页面
xml复制代码<!-- 指定缺点的类型 --><error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/null.jsp</location></error-page>
demo02.jsp
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body> <% String s = null; s.length(); %></body></html>
报空指针非常后的页面:null.jsp
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body> <h2>发生空指针非常了</h2></body></html>
浏览器效果:
page指令小结:
属性名
浸染
language="java"
指定JSP页面利用措辞
import="{package.class
package.}"
导入包: 1. 每个import包入一个包 2. 一个import导入多个包,利用逗号分隔
errorPage="relative_url"
当前页面出错,转发到哪个缺点页面
isErrorPage="true
false"
当前是否是一个缺点页面
contentType="mimeType [ ;charset=characterSet ]"
指定页面类型和编码,不指定会有乱码
isELIgnored="true
false"
是否忽略EL表达式,true表示EL不起浸染
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="true"%><html><head> <title>Title</title></head><body>${35}</body></html>
6、JSP常用动作标签6.1、什么是动作标签
JSP动作标签利用XML语法格式的标记来掌握Servlet引擎的行为 。利用JSP动作标签可以动态包含其他jsp页面、把用户跳转到其余的页面、为Java插件天生HTML代码。
6.2、常用动作标签JSP页面动作标签很多,常用的紧张有以下3种:
makefile复制代码<jsp:include/>:动态包含<jsp:forward/>:跳转 类似之前学习的转发技能<jsp:param/>:参数设置
【浸染】
复制代码用于一个JSP页面动态包含另一个JSP页面
【语法】
ini复制代码<jsp:include page="URL"/> URL是被包含的JSP页面
【利用示例】
a.jsp
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body> <h1>我是A页面</h1> <%int m1=10; %> <!-- 静态包含: --> <%@include file="b.jsp" %> <!-- 动态包含 --> <%-- <jsp:include page="b.jsp"/> --%></body></html>
b.jsp
javascript复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body> <h2>我是B页面</h2> <%int m=20; %></body></html>
【动态包含和静态包含】
静态包含include指令
动态包含include动作
语法格式
<%@include file="URL"%>
<jsp:include page="URL"/>
包含的办法
静态包含包含的是页面的内容。如果A包含B,则先将B的页面内容复制到A页面中,再运行A页面。 B页面中不能涌现与A页面同名的变量
动态包含包含的是页面的实行结果,如果A包含B,则先将B实行,再将B实行的结果包含到A页面中,实行A页面。 B页面中可以涌现与A页面中同名的变量
天生Servlet个数
只能天生了一个Servlet
天生了两个Servlet
解释:
如果只是引入jsp,不须要改变,那么利用静态引入。如果引入的jsp页面是变革的,那么利用动态引入。
【2】<jsp:forward>用于页面的转发,与request.getRequestDispatcher("/URL").foward(request,response);功能一样的
ini复制代码<jsp:forward page="URL"/> 转发
【3】<jsp:param>
用于给<jsp:forward>和<jsp:include>供应参数
ini复制代码<jsp:param value="张三" name="user"/>
forward和param动作目标forward浸染param的功能forward功能:用于转发,相称于request.getRequestDispatcher("/URL").forward(request, response)语法
ini复制代码<jsp:forward page="/页面地址"/>
param功能:给forward和include供应参数名和值语法:做为子标签存在需求:在c.jsp页面中利用转发标签forward转发到d.jsp页面。c.jsp页面
javascript复制代码<%-- Created by IntelliJ IDEA. Date: 2018-10-10 Time: 16:41 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body> <h2>c页面</h2> <% //办理中文乱码问题 <jsp:param name="username" value="张三"/> 是在d.jsp后面携带数据跳转到d.jsp页面的,通过浏览器的,须要先按照UTF-8编码之后在进行通报。然后在d.jsp页面利用request.getParameter("username")获取数据 request.setCharacterEncoding("UTF-8"); //向域工具request中存储数据 request.setAttribute("age",19); %> <%--转发动作,携带的参数,可以在d.jsp上吸收这参数,通过浏览器转发过去的,以是要想获取param携带的数据必须利用getParameter()方法获取数据--%> <jsp:forward page="d.jsp"> <jsp:param name="username" value="张三"/> </jsp:forward></body></html>
d.jsp页面:
javascript复制代码<%-- Created by IntelliJ IDEA. Date: 2018-10-10 Time: 16:41 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body> <h2>d页面</h2> <%--获取request域工具中的数据--%> <%=request.getAttribute("age")%> <%--获取转发param标签通过浏览器携带的数据--%> <%=request.getParameter("username")%></body></html>
案例演示从c.jsp转发到d.jspc在要求域中添加键和值,d看能够得到值并且输出c转发的时候带参数,username和age,在d中获取并且输出汉字乱码问题的办理转发,url地址栏并没有发生改变效果
我们创造,我们在JSP页面中书写的代码终极都会翻译到_jspService()方法中,我们创造这个方法中有两个形参:HttpServletRequest工具 ,HttpServletResponse工具 。以是说,JSP的实质便是一个Servlet。我们可以直接在JSP页面上利用这两个工具。
【需求】登录页面改造
改造登录后的页面,用户上岸失落败往后,跳转到login.jsp,在jsp页面中动态显示用户上岸缺点中的信息。
【思路】
登录失落败后直接转发到一个jsp页面;在jsp页面上利用request工具获取request中的值;【LoginServlet代码】
解释:LoginServlet中,登录失落败之后,直接转发到login.jsp页面。
ini复制代码protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //办理中文乱码问题 request.setCharacterEncoding("utf-8"); //获取用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); UserServiceInter service = new UserServiceInterImpl(); boolean result = service.login(username,password); String msg = result ? "用户上岸成功" : "用户上岸失落败"; request.setAttribute("msg",msg); if (result){ response.sendRedirect("/success.html"); }else { //转发到login.jsp页面 request.getRequestDispatcher("/login.jsp").forward(request,response); } }
【login.jsp页面】
xml复制代码<%@ page contentType="text/html;charset=UTF-8" language="java" %><!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>登录页面</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/login.css" rel="stylesheet"> <script src="js/jquery.js"></script> <script src="js/bootstrap.js"></script></head><body><% String msg = (String) request.getAttribute("msg");%><div class="container text-center"> <form class="form-signin" action="/loginInterServlet" method="get"> <h2 class="form-signin-heading">登录页面</h2> <font color="red"><%=msg%></font> <input type="text" name="username" class="form-control" placeholder="用户名" required autofocus> <input type="password" name="password" class="form-control" placeholder="密码" required> <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button> </form></div></body></html>
解释:上述代码中:
css复制代码<font color="red"><%=msg%></font>
能够利用msg获取数据,由于编译之后存在于同一个类中,编译jsp如下所示:
效果图:浏览器访问login.html页面
登录密码输入缺点:
小结:
JSP浸染:给浏览器天生相应信息;JSP特点:动态网页,html+java,由做事器来运行的。实质上是一个Servlet;书写Java代码的三种办法:脚本片段:java代码片段,在service方法中起浸染。格式:<% System.out.println("hello") %>;脚本表达式:直接在页面输出内容,在service方法中起浸染,等价于out.print(内容)。格式:<%= "上海打工摸鱼"%>脚本声明:定义成员变量,方法。在当前类中都起浸染。<%!int a=10;%>JSP页面常用的工具:request,response;