jsp上传文件如何实现(jsp获取上传文件名)

本书简介

书名为《轻量级JavaEE企业应用实战》,是本人在学习JavaEE框架的时候阅读的第一本书,本书对于框架及相关基础知识讲述的比较详细和浅显,适合初学者和需要全面了解JavaEE知识的人群。

本文内容为第二章的第1部分内容

JSP/Servlet相关技术详解--那些已经模糊的基础知识

WEB应用和web.xml

1.构建WEB应用

使用IDE创建项目?当然可以。但我们今天来学学不用IDE如何创建一个WEB应用。步骤如下:

(1)在任意目录下新建一个文件夹作为应用根目录,笔者以webDemo文件夹建立一个web应用

(2)在应用根目录下创建一个WEB-INF文件夹(区分大小写)

(3)进入Tomcat中找到任何一个默认WEB应用,将其WEB-INF下的web.xml文件复制到自己所创建的对应文件夹下

(4)配置web.xml文件(PS:相关配置我会另写文章讲解)

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1" metadata-complete="true">
</web-app>

(5)在WEB-INF目录下,新建两个文件夹:classes和lib,这两个文件夹都是用于保存WEB应用所需的Java类文件,区别是classes保存单个class文件;lib保存打包后的JAR文件

(6)现已建立了一个空WEB应用。将该应用复制到Tomcat的webapps路径下

(7)将JSP文件放在WEB应用的根路径下,就可以通过浏览器来访问这些页面了,URL路径:
http://localhost:port/webDemo/*.jsp

如上所述,WEB应用的目录结构如下:
<webDemo>
|--WEB-INF
|			|--classes
|			|--lib
|			|--web.xml
|--*.jsp

2.配置描述符web.xml

web.xml文件被称为配置描述符,在Servlet2.5之前,WEB应用必须包含一个web.xml文件,且必须放在WEB-INF路径下。WEB-INF是个特殊的文件夹,WEB容器会包含该文件夹下的内容,但浏览器无法访问WEB-INF下的任何内容。

PS:对于Servlet3.0规范而言,web.xml不再是必须的,但通常还是建议保留

web.xml可以实现如下的所有配置功能

(1)配置JSP

(2)配置Servlet

(3)配置Listener

(4)配置Filter

(5)配置标签库

(6)配置JSP属性

(7)配置JAAS授权认证

(8)配置资源引用

(9)配置WEB应用首页

JSP基本原理

JSP/Servlet相关技术详解--那些已经模糊的基础知识

JSP文件必须在JSP服务器内运行JSP文件必须生成Servlet才能执行每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成ServletJSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面JSP页面内容包含两个部分:静态部分(HTML标签及静态内容)、动态部分(受Java程序控制的内容)JSP页面会被Tomcat在work编译成两个文件:*_jsp.java,*_jsp.class。此文件是一个标准Servlet类

JSP注释

JSP注释不会输出到客户端,格式如下:

<%-- 注释内容 --%>

JSP声明

JSP声明用于声明变量和方法

<%! 声明部分 %>

JSP输出

<%=表达式%>

PS: 表达式后不能有分号,效果等同于out.println

JSP脚本

<% 代码 %>

PS:JSP脚本中的内容,将作为Servlet中service方法的方法体。因此在其中声明的变量为局部变量,并且不可以在脚本中定义方法

JSP的编译指令(3个)

编译指令格式如下

<%@ 编译指令 属性名="属性值"...%>

1.page:是针对当前页面的指令,位于页面顶端

JSP/Servlet相关技术详解--那些已经模糊的基础知识

属性说明:

language:声明JSP页面使用的脚本语言,默认java
extends:指定JSP编译后的类所继承的父类或接口
import:用来导入包,默认导入的包有:java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.serlvet.http.*
session:设置当前页面是否需要session
buffer:指定输出缓冲区大小。输出缓冲区用于JSP内部对象out,默认8KB
autoFlush:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。true正常输出,false产生异常
info:设置JSP程序说明,通过Servlet.getServletInfo()获取该值
errorPage:指定错误处理页面。如果页面报错,且未做异常处理,则跳转错误处理页面
isErrorPage:设置本JSP页面是否为错误处理页面
contentType:用于设置页面的文件格式和编码字符集。默认MIME类型为text/html;默认字符集为:ISO-8859-1
pageEncoding:设置页面的编码字符集

2.include:指定包含另一个页面

语法如下:

<%@include file="相对路径"%>

include指令可以将外部文件嵌入当前页面,这是静态include语句,它会把目标页面的其他编译指令也包含进来。即先把目标页面的代码融入当前页面后再编译。

PS:如果被包含的页面需要经常改变,建议使用<jsp:include>,它是动态include语句

3.taglib:用户定义和访问自定义标签

JSP的动作指令(7个)

jsp:forward:执行页面转向,将请求转发到下一个页面
jsp:param:用于传递参数,必须与其他支持参数的标签一起使用
jsp:include:动态导入JSP页面
jsp:plugin:用于下载JavaBean或Applet到客户端执行
jsp:userBean:创建JavaBean实例
jsp:setProperty:设置JavaBean实例的属性值
jsp:getProperty:获取JavaBean实例的属性值

1.forward指令

用于页面转发,可转发到静态页面、动态页面或Servlet。转发后的请求参数不会丢失。

语法如下:

<jsp:forward page="相对路径">
    <jsp:param name="key" value="value"/>
</jsp:forward>

转发时可通过param指令传递参数,并通过如下方式获取值:

<%=request.getParameter("key")%>

2.include指令

动态的页面导入命令,它不会导入被包含页面的编译指令,仅将被导入页面的body内容插入本页。

语法如下:

<jsp:include page="相对路径" flush="true">
    <jsp:param name="key" value="value"/>
</jsp:include>

flush属性设置输出缓存是否转移到被导入文件中,true则包含在被导入文件中,false则包含在原文件中。

动态导入和静态导入的区别
(1)静态导入是将被导入页面的代码完全融入,两个页面融合成一个Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容
(2)静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用
(3)动态导入可以传递额外的参数

3.useBean、setProperty、getProperty指令

这三个指令都是JavaBean相关指令。在我们将重复代码定义成Java类的方法后,这三个指令可用于调用。

useBean语法如下:

<jsp:userBean id="name" class="classname" scope="page|request|session|application"/>
id:是JavaBean的实例名
class:指定JavaBean的实现类
scope:指定JavaBean实例的作用范围,page(当前页面有效)、request(本次请求有效)、session(本次会话有效)、application(当前应用一直有效)

setProperty语法如下:

<jsp:setProperty name="BeanName" property="propertyName" value="value"/>

getProperty语法如下:

<jsp:getProperty name="BeanName" property="propertyName"/>

举个例子,如下图:

JSP/Servlet相关技术详解--那些已经模糊的基础知识

4.param指令

param指令无法单独使用,可以与如下指令结合使用:

(1)jsp:include

(2)jsp:forward

(3)jsp:plugin

JSP内置对象(9个)

application:ServletContext实例,代表所属WEB应用本身
config:ServletConfig实例,代表应用配置信息
exception:Throwable实例,代表其他页面的异常,只有当前页面是错误处理页面时可用
out:JspWriter实例,代表页面输出流,用于输出内容
page:代表页面本身,及生成的Servlet类
pageContext:PageContext实例,代表页面上下文,可访问页面的共享数据
request:HttpServletRequest实例,该对象封装了一次请求和请求参数
response:HttpServletResponse实例,代表服务器响应
session:HttpSession实例,代表一次会话。当浏览器与站点建立连接时,会话开始;关闭浏览器时会话结束

PS:JSP内置对象要么是Servlet方法的局部变量,要么是方法的形参,所以我们可以直接在脚本中调用他们。

1.application对象

application两个作用

  • 在整个WEB应用中让多个JSP、Servlet之间共享数据(使用setAttribute,getAttribute)
  • 访问WEB应用的配置参数(使用getInitParameter)

2.config对象

用于Servlet获取配置参数(使用getInitParameter)

3.exception对象

exception对象仅在异常处理页面有效

4.pageContext对象

使用pageContext可以访问page、request、session、application范围的变量

getAttribute(String name):取得page范围内的属性
getAttribute(String name, int scope):取得指定范围内的属性,
scope包含PageContext.PAGE_SCOPE、PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE、PageContext.APPLICATION_SCOPE
setAttribute(String name, String value):设置page范围内的属性
setAttribute(String name, String value, int scope):取得制定范围内的属性

使用pageContext可以获取其他内置对象

getRequest():获取request对象
getResponse():获取response对象
getServletConfig():获取config对象
getServletContext():获取application对象
getSession():获取session对象

5.request对象

(1)获取请求头/请求参数

getParameter(String paramName):获取请求参数的值
getParameterMap():获取所有请求参数名和值组成的Map对象
getparameterValues(String name):获取请求参数多个值时所组成的数组
getHeader(String name):获取指定的请求头的值

GET与POST

GET方式的请求:GET请求会将请求参数的名和值转换成字符串,并附加在原URL之后,URL和参数之间以”?”分隔,多个参数之间以”&”分隔,且请求传送的数据量较小,一般不大于2KB

POST方式的请求:POST请求参数的大小不受限制,往往取决于服务器的限制,POST传输的数据量比GET传输的数据量大,且请求参数放在HTTP HEADER中传输,安全性相对较高

PS:

(1)不是每个表单域都会生成请求参数,只有带有name属性的表单域才行

(2)每个有name属性的表单域对应一个请求参数

(3)如果有对个表单域有相同的name属性,则多个表单域只生成一个请求参数,且该参数有多个值

(4)表单域的name属性为请求参数名,value属性为请求参数值

如果表单域设置了disabled=”disabled”属性,则不会生成请求参数

(2)操作request范围的属性

setAttribute(String name, Object value):设置request范围属性
getAttribute(String name):获取request范围属性

(3)执行forward或include

getRequestDispatcher(String path).forward(request, response):跳转页面
getRequestDispatcher(String path).include(request, response):包含页面

6.response对象

(1)response响应生成非字符响应

getOutputStream():获取输出流

(2)重定向

sendRedirect("path"):重定向,重定向会丢失所有请求参数

forward与redirect对比

JSP/Servlet相关技术详解--那些已经模糊的基础知识

(3)增加cookie

addCookie(Cookie cookie):增加cookie
getCookies():获取cookie数组

7.session对象

seesion代表一次用户会话,即客户端浏览器连接服务器开始,到关闭浏览器结束。session属性可在一次会话内在多个页面间共享数据。session属性值必须是可序列化的Java对象。

setAttribute(String attName, Object attValue):设置session属性值
getAttribute(String attName):获取session属性值

争议与思考

我们日常开发经常使用浏览器来访问WEB应用,IE、360、火狐、谷歌你觉得哪个浏览器最好用?为什么呢?评论区留言吧!

版权声明:本文图片和内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送联系客服 举报,一经查实,本站将立刻删除,请注明出处:https://www.4kpp.com/8277.html

(0)
漫空客漫空客
上一篇 2023年4月23日
下一篇 2023年4月23日

相关推荐

  • 壶口瀑布在哪(黄河壶口瀑布在哪个省)

    今天给大家介绍壶口瀑布在哪里,以及黄河壶口瀑布在哪个省对应的知识点。希望对你有帮助,也别忘了收藏这个站点。 壶口瀑布在哪里 壶口瀑布位于陕西省宜川县和山西省蓟县境内。西与陕西省延安…

    投稿 2023年4月23日
    1220
  • 咎由自取什么意思(一切都是我咎由自取什么意思)

    今天我来介绍一下自责的含义,以及我所说的自责所对应的知识点。希望对你有帮助,也别忘了收藏这个站点。 什么叫活该? 奇怪:灾难。灾难或罪恶是自己造成的。指自己造成的。 习语的由来:三…

    投稿 2023年4月23日
    1190
  • 如何处理滞销宝贝(如何处理滞销宝贝的问题)

    亚马逊也越来越卷,很多卖家表示自己的产品在仓库已经积压了一段时间,这种滞销的产品给卖家带来很大的麻烦,如何才能够解决这个问题呢? 一、产品滞销带来的问题 积压资金 如果商品一直卖不…

    投稿 2023年4月23日
    980
  • 变频空调价格(海信1.5匹变频空调价格)

    今天给大家分享一个关于变频空调价的问题(海信1.5微微变频空调价)。以下是这个问题的总结。让我们来看看。 什么是变频空调制? 变频空调制是一种可以自动调节制冷或制热功率的空调制。它…

    投稿 2023年4月23日
    970
  • 买空调注意什么(买空调注意什么问题)

    今天跟大家分享一下关于买空(买空)要注意什么的问题。以下是这个问题的总结。让我们来看看。 购买空 tune需要注意哪些问题? 夏天来了,很多人会考虑买空降温。但是,对于没有买过空音…

    投稿 2023年4月23日
    890
  • 个体户清税证明怎么办理(个体户清税注销流程)

    大小新闻客户端9月16日讯(ymg全媒体记者 王修齐) 近日,有企业向政企通“12345”热线咨询企业税务注销方面的问题,记者就此类相关问题联系了税务局。 记者:请问哪些纳税人可免…

    投稿 2023年4月23日
    1640
  • 教你怎么远程监控老婆手机(不被对方察觉手机定位)

    教你怎么远程监控老婆手机(不被对方察觉手机定位)微信里有很多有意思的小功能,或许就在你打开的菜单里,或许就是你没有注意到。今天来看个有点意思的功能。那就是如何百思特网查看别人微信的…

    2023年4月23日
    2770
  • 什么是第6感(第六感指的是哪六感)

    今天,我要向大家介绍什么是第六感,第六感意味着什么。希望对你有帮助,也别忘了收藏这个站点。 什么是第六感?? 人类第六感有十种表现。 我做了一些梦,这些梦真的发生了。 我去过一个新…

    投稿 2023年4月23日
    2320
  • 微信转账能撤回吗(微信转账怎么撤回步骤)

    通过笔者实际给朋友转账测试了一下,得到的答案是:转账之后,是没有“撤回”这个选项的。在转账图标上长按只有“提醒”与“删除”两个选项。 转账方截图,所用手机华为Mate30 转出的钱…

    2023年4月23日
    1150
  • 电视机顶盒(网络电视机顶盒怎么用?)

    电视机顶盒(网络电视机顶盒怎么用?) 昨天有个朋友问我网络电视机顶盒怎么用?与家中的广电数字机顶盒相比有哪些优势?其实想想这两个问题应该是绝大部分听说了网络电视机顶盒的朋友都会询问…

    2023年4月22日
    1490

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注