版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWeb开发从入门到实践JavaWebDevelopmentFromIntroductiontoPracticeJSP技术Chap05提纲JSP技术介绍JavaServerPages的基本概念及其与Servlet的关系,主要用于动态网页开发。基本语法部分讲解了JSP标签、表达式和脚本的使用,内置对象和文件上传下载功能则涉及了JSP中常用的服务器对象和处理文件的技术。5.1JSP概述5.2基本语法5.3JSP内置对象5.4文件的上传与下载5.1JSP概述5.1.1什么是JSP5.1.2JSP运行原理5.1.1什么是JSPJSP(JavaServerPages,Java服务器页面)是以Java为基础开发的,它是在传统的网页HTML文件中插入Java程序段和JSP标记,后缀名为“.jsp”。JSP的主要特点:跨平台:可以应用于Windows、Linux、Mac等系统中业务代码分离组件重用预编译多样化和功能强大的开发工具的支持5.1.2JSP运行原理用户访问Servlet时,Web服务器根据请求的URL地址在web.xml文件中找到对应的<servlet-mapping>,然后将请求交给<servlet-mapping>对应的Servlet程序去处理。JSP文件不需要在web.xml配置文件中进行配置,因为Tomcat服务器的conf目录的web.xml文件中实现了JSP的相关配置。<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup></servlet><servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern></servlet-mapping>web.xml文件5.1.2JSP运行原理JSP执行过程:1、客户端浏览器发出请求,请求访问JSP文件。2、Web容器将JSP转译成Servlet源码文件。3、Web容器将产生的源码文件编译成字节码文件。4、Web容器加载编译后的代码并执行。5、Web容器将执行结果响应至客户端浏览器。图
5-1
JSP运行原理5.1.2JSP运行原理JSP转译生成Servlet源码文件publicfinalclassA_jspextendsorg.apache.jasper.runtime.HttpJspBaseimplementsorg.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports{}A.jsp转译后的文件A_jsp.java代码如下:
A_jsp继承了org.apache.jasper.runtime.HttpJspBase类publicabstractclassHttpJspBase
extendsHttpServletimplementsHttpJspPage{ privatestaticfinallongserialVersionUID=1L;
protectedHttpJspBase(){} ...}5.2基本语法5.2.1JSP脚本标记5.2.2JSP指令标记5.2.3JSP动作标记5.2.1JSP脚本标记JSP脚本小程序:<%Java程序段%><%@pagecontentType="text/html;charset=UTF-8"language="java"%><html> <head>
<title>输出直角三角形</title>
</head>
<body>
<%
for(inti=0;i<5;i++){//遍历行
for(intj=0;j<=i;j++){//遍历每行中的*号
out.print("*");
}
out.print("<br/>");//每行输出后回车
}
%>
</body>
</html>案例:输出一个五行的直角三角形5.2.1JSP脚本标记JSP声明:<%!变量或方法的定义%><%! intm=0;//声明一个成员变量 intadd(intx,inty){//声明一个方法 returnx+y; }%><body><% intn=0;//声明一个局部变量 m++; n++; intresult=add(1,2); out.print("成员变量m="+m+"<br/>"); out.print("局部变量n="+n+"<br/>"); out.print("二数的和sum="+result);%></body>案例:成员变量和局部变量的使用5.2.1JSP脚本标记JSP表达式:<%=变量或表达式%><body> <%inti=10;%> <%=i+"+1="+(i+1)%></body>案例:创建一个JSP页面,使用JSP表达式输出数据JSP注释静态注释:<!--HTML风格的注释-->Java注释://单行注释
/*
多行注释
*/JSP注释:<%--JSP注释--%>5.2.2JSP指令标记常用的JSP指令标记包括page指令、include指令和taglib指令。page指令:<%@page属性1="属性1的值"属性2="属性2的值"%>表
5-1page指令的属性及其描述属性描述contentType确定响应的MIME类型和字符编码,常见的MIME类型有text/html(HTML解析器)、application/msword(Word应用程序)、images/jpeg(JPEG图形)等。例如,contentType="text/html;charset=UTF-8"language指定JSP页面使用的脚本语言,一般设置为“java”import导入一个或多个包和类,例如,导入Java的sql包,import="java.sql.*"isErrorPage指定当前页面是否可以作为另一页面的错误处理页面,例如,isErrorPage="true"errorPage指定当前网页的出错处理网页的URL,例如,errorPage="err.jsp"5.2.2JSP指令标记include指令:<%@includefile="URL"%><body>
<%@includefile="head.jsp"%>
<p>
1.惟沉默是最高的轻蔑。<br/>
2.勇者愤怒,抽刃向更强者;怯者愤怒,却抽刃向更弱者。<br/>
3.我之所谓生存,并不是苟活,所谓温饱,不是奢侈,所谓发展,也不是放纵。<br/></p>
</body><body>
<h2><center>名言名句大全</center></h2>
</body>head.jspinclude.jsp5.2.2JSP指令标记taglib指令:<%@taglibprefix="前缀"uri="标签库URI"%>引入JSTL标签库:<%@taglibprefix="c"uri="/jsp/jstl/core"%>5.2.3JSP动作标记常用的JSP动作标记包括include、forward、param<jsp:include>、<jsp:param>动作标记动作标记<jsp:include>的作用是将JSP文件、HTML网页文件或其他文本文件动态嵌入到当前JSP网页中。<jsp:param>动作标记以“名称-值”对的形式为对应页面传递参数,<jsp:param>动作标记不能单独使用,可以作为<jsp:include>、<jsp:forward>动作标记的子标记使用,其基本语法如下:<jsp:includepage="URL">
<jsp:paramname="属性名"value="属性值"/></jsp:include>5.2.3JSP动作标记案例:使用递归求第n个斐波那契数1、parameter.jsp2、fibonacci.jsp<body>
<h2>加载fibonacci.jsp页面,输出第n个斐波那契数</h2><jsp:includepage="fibonacci.jsp">
<jsp:paramname="n"value="6"/>
</jsp:include>
</body><%!intfun(intn){if(n==1||n==2){return1;}else{ returnfun(n-1)+fun(n-2);}}
%>
<body>
<%
Stringn=request.getParameter("n");
out.print("第"+n+"个斐波那契数:"+ fun(Integer.parseInt(n)));%>
</body>图
5-6
斐波那契数的运行结果5.2.3JSP动作标记<jsp:forward>动作标记动作标记<jsp:forward>用于从该标记出现处停止当前JSP页面执行,重定向到其他指定页面。重定向的目标可以是静态的HTML页面、JSP页面,其基本语法如下:<jsp:forwardpage="页面URL"><jsp:paramname="属性名"value="属性值"/></jsp:forward>5.2.3JSP动作标记1、forword.jsp案例:<jsp:forward>动作标记的使用<jsp:forwardpage="target.jsp">
<jsp:paramname="country"value="中国"/></jsp:forward>2、target.jsp<body>
<%
Stringcountry=request.getParameter("country");out.print(country+"加油!<br/>");
%>
红星高悬,照亮了中国的前进道路,指引着我们奋勇向前。
</body>图
5-7
<jsp:forward>动作标记的使用5.3JSP内置对象5.3.1out对象5.3.2pageContext对象5.3.3exception对象5.3JSP内置对象表5-2
JSP内置对象、描述及其作用域对象描述作用域requestHttpServletRequest类的实例,用于获取用户请求信息requestresponseHttpServletResponse类的实例,用于向客户端发送响应信息pagepageContextPageContext类的实例,用于获取上下文信息pagesessionHttpSession类的实例,用于保存用户信息sessionapplicationServletContext类的实例,用于保存整个应用的共享信息applicationoutJspWriter类的实例,用于页面输出pageconfigServletConfig类的实例,用于获取web应用配置信息pagepage代表当前被访问JSP页面的实例化pageexceptionException类的对象,代表发生错误的JSP页面中对应的异常对象page5.3.1out对象out对象是向客户端输出内容常用的对象。表5-3out内置对象的常用方法方法描述voidprint()输出数据voidnewLine()输出换行voidclear()清除缓冲区中的数据,若缓冲区是空的,则会产生IOException异常voidclearBuffer()清除缓冲区中的数据,若缓冲区是空的,并不会产生IOException异常voidflush()清空缓冲区数据,并输出到网页intgetBufferSize()返回缓冲区大小getRemaining()返回缓冲区剩余空间的大小booleanisAutoFlush()是否自动输出缓冲区中的数据voidclose()关闭输出流5.3.1out对象案例:out对象的使用<body>
<%
intsize=out.getBufferSize();
booleanflag=out.isAutoFlush();
out.print("缓冲区大小:"+size+"<br/>");out.print("是否自动输出缓冲区中的数据:"+flag);%>
</body>5.3.2pageContext对象pageContext对象(页面上下文对象),用于获取当前JSP页面的相关信息表
5-4pageContext内置对象的常用方法方法描述ServletRequestgetRequest()获取request内置对象ServletResponsegetResponse()获取response内置对象HttpSessiongetSession()获取session内置对象ServletConfiggetServletConfig()获取config内置对象ServletContextgetServletContext()获取application内置对象ObjectgetPage()获取page内置对象ExceptiongetException()获取exception内置对象JspWritergetOut()获取out内置对象ObjectgetAttribute(Stringkey,intscope)获取scope范围、关键字为key的属性对象voidsetAttribute(Stringkey,Objectvalue,intscope)设置scope范围的属性对象voidremoveAttribute(Stringkey,intscope)从scope范围中移除关键字为key的属性对象5.3.2pageContext对象案例:pageContext对象的使用<body>
<%
pageContext.getRequest().setAttribute("encoding","UTF-8");//设置属性
//获取属性,默认返回Object类型
Stringencoding=(String)pageContext.getAttribute("encoding",2);out.print("请求域中encoding的值="+encoding);%>
</body>5.3.3exception对象案例:exception对象的使用1、error.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"isErrorPage="true"%>
<html>
<head>
<title>错误页面</title>
</head>
<body>
<%
exception.printStackTrace(response.getWriter());%>
</body>
</html>2、arithmeticException.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"errorPage="error.jsp"%>
<html>
<head>
<title>数学运算异常</title>
</head>
<body>
<%
inti=10;
intj=i/0;
%>
</body>
</html>5.3.3exception对象图
5-8
运行结果exception对象是一个与Error有关的内置对象,使用该对象的页面必须设置page指令的isErrorPage属性为true。5.4文件的上传与下载5.4.1文件的上传5.4.2文件的下载5.4.1文件的上传文件上传的表单设置表单method属性必须设置为post,enctype设置为“multipart/form-data”。使用表单元素<inputtype=”file”>上传文件,该元素包含一个按钮,点击按钮选择待上传的文件<formmethod="post"action="/UploadServlet"enctype="multipart/form-data">
用户名:<inputtype="text"name="username"/><br/>
头像:<inputtype="file"name="photo"/><br/>
<inputtype="submit"value="提交"><inputtype="reset"value="重置"></form>图
5-9
上传页面5.4.1文件的上传创建名为UploadServlet的Servlet,用于上传文件@WebServlet("/UploadServlet")
@MultipartConfig(maxFileSize=10*1024*1024)//设置最大文件大小为10MB
publicclassUploadServletextendsHttpServlet{
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
resp.setContentType("text/html;charset=utf-8");
PrintWriterout=resp.getWriter();
Stringusername=req.getParameter("username");//获取用户名
Partpart=req.getPart("photo");//获取头像
FileuploadDir=newFile(getServletContext().getRealPath("/upload"));//文件上传目录
if(!uploadDir.exists()){//判断上传目录是否存在,不存在则创建
uploadDir.mkdir();
}
5.4.1文件的上传Stringfilename=part.getSubmittedFileName();//原始文件名
//以当前日期作为文件名,避免与服务器已有文件重名
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmssSSS");
StringnewFilename=sdf.format(newDate());//当前日期格式化为字符串
Stringext=filename.substring(filename.lastIndexOf("."));//截取文件扩展名
Stringpath=uploadDir+File.separator+newFilename+ext;//拼接上传路径
part.write(path);//上传文件到服务器upload目录中
out.println("用户名:"+username+"<br/>");out.println("原始文件名:"+filename+"<br/>");
out.println("文件上传到:"+path);
}
}注意:上传多个文件需要修改以下内容。表单中多添加几个表单元素<inputtype=”file”>,这些元素的name属性设置成不一样。Partpart=req.getPart("photo")改成Collection<Part>parts=req.getParts(),然后使用for循环遍历parts集合,循环体内代码与单文件上传类似。5.4.2文件的下载文件下载的二种方式:一是通过超链接实现下载二是通过编写程序实现下载,需要设置两个报头。一是设置Content-Type报头为application/x-msdownload二是设置Content-Disposition报头为attachmentresp.setHeader("Content-Type","application/x-msdownload");resp.setHeader("Content-Disposition","attachment;filename="+filename);5.4.2文件的下载案例:通过编写程序实现下载编写网页<h2>利用程序实现下载</h2>
<ahref="/fileupload/DownLoadServlet?filename=20240117103415360.png">下载</a>编写Servlet@WebServlet("/DownLoadServlet")
publiccla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025下半年四川自贡市属事业单位考试聘用人员高频重点提升(共500题)附带答案详解
- 2025下半年北京市延庆县事业单位招聘39人历年高频重点提升(共500题)附带答案详解
- 2025上海地铁第一运营限公司多职能队员(巡视)(储备)招聘50人高频重点提升(共500题)附带答案详解
- 2025上半年贵州六盘水市事业单位及国企业招聘应征入伍大学毕业生【92】人高频重点提升(共500题)附带答案详解
- 2025上半年四川省江油市事业单位招聘95人历年高频重点提升(共500题)附带答案详解
- 农村建设诚信承诺书模板
- 银行网点智能系统布线合同
- 商场屋面瓦安装合同
- 2024年租房合同终止协议3篇
- 2024年物业中介服务定金协议
- 以学增智-提升推进高质量发展的本领研讨发言稿
- 2023年10月自考00055企业会计学真题及答案含评分标准
- 幼儿园人事工作总结
- 可修改版五年级数学期中考试答题卡模板
- 精装修工程工作界面划分
- 山东省青岛市市北区2023-2024学年九年级上学期11月期中数学试题
- 【语文】上海市三年级上册期末复习试题(含答案)
- 遥感技术基础第二版课后答案
- 项目式高中化学教学《保护珊瑚礁的措施-沉淀溶解平衡》
- 犯罪现场勘察题库(348道)
- 八段锦操作评分标准
评论
0/150
提交评论