赞
踩
开源⼩型web服务器 ,完全免费,主要⽤于中⼩型web项⽬,只⽀持Servlet和JSP 等少量javaee规范(就是JavaWeb编程接⼝)https://tomcat.apache.org/
下载好之后,安装到任意⽬录
安装步骤:
1. 下载Tomcat
2. 解压到⼀个没有特殊符号的⽬录中(⼀般纯英⽂即可)
3. 进⼊到解压的⽬录下找到bin\startup.bat双击启动即可
注意:不建议将服务器软件放在磁盘层次很多的⽂件夹中!2
不建议放在中⽂路径下!
tomcat安装需要配置JAVA_HOME环境变量
1、bin:该⽬录下存放的是⼆进制可执⾏⽂件,如果是安装版,那么这个⽬录下会有两个exe⽂件:
tomcat9.exe、tomcat9w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗⼝启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat⽂件,startup.bat⽤来启动Tomcat,但需要JDK的配置,shutdown.bat⽤来停⽌Tomcat;
2、conf:这是⼀个⾮常⾮常重要的⽬录,这个⽬录下有四个最为重要的⽂件:
server.xml:配置整个服务器信息。例如修改端⼝号,添加虚拟主机等;
tomcat-users.xml:存储tomcat⽤户的⽂件,这⾥保存的是tomcat的⽤户名及密码,以及⽤户的⻆⾊信息。可以按着该⽂件中的注释信息添加tomcat⽤户,然后就可以在Tomcat主⻚中进⼊Tomcat Manager⻚⾯了;
web.xml:部署描述符⽂件,这个⽂件中注册了很多MIME类型,即⽂档类型。这些MIME类型是客户端与服务器之间说明⽂档类型的,如⽤户请求⼀个html⽹⻚,那么服务器还会告诉客户端浏览器响应的⽂档是text/html类型的,这就是⼀个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html⽂件了。但如果服务器响应的是⼀个exe⽂件,那么浏览器就不可能显示它,⽽是应该弹出下载窗⼝才对。MIME就是⽤来说明⽂档的内容是什么类型的!
context.xml:对所有应⽤的统⼀配置,通常我们不会去配置它。
3、lib:Tomcat的类库,⾥⾯是⼀⼤堆jar⽂件。如果需要添加Tomcat依赖的jar⽂件,可以把它放到这个⽬录中,当然也可以把应⽤依赖的jar⽂件放到这个⽬录中,这个⽬录中的jar所有项⽬都可以共享之,但这样你的应⽤放到其他Tomcat下时就不能再共享这个⽬录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个⽬录下;
4、logs:这个⽬录中都是⽇志⽂件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在⽇志⽂件中。
5、temp:存放Tomcat的临时⽂件,这个⽬录下的东⻄可以在停⽌Tomcat后删除!
6、webapps:存放web项⽬的⽬录,其中每个⽂件夹都是⼀个项⽬;如果这个⽬录下已经存在了⽬录,那么都是tomcat⾃带的项⽬。其中ROOT是⼀个特殊的项⽬,在地址栏中没有给出项⽬⽬录时,对应的就是ROOT项⽬。
http://localhost:8080/examples,进⼊示例项⽬。其中examples就是项⽬名,即⽂件夹的名字。
7、work:运⾏时⽣成的⽂件,最终运⾏的⽂件都在这⾥。通过webapps中的项⽬⽣成的!可以把这个⽬录下的内容删除,再次运⾏时会⽣再次⽣成work⽬录。当客户端⽤户访问⼀个JSP⽂件时,Tomcat会通过JSP⽣成Java⽂件,然后再编译Java⽂件⽣成class⽂件,⽣成的java和class⽂件都会存放到这个⽬录下。
8、LICENSE:许可证。
9、NOTICE:说明⽂件。
通过url访问服务器:
url:http://服务器的ip地址:端⼝号/项⽬名/被访问的⻚⾯
示例:http://localhost:8080/test0918
注: (1)启动tomcat后,tomcat会加载部署在服务器端的所有项⽬
(2) 浏览器访问的⻚⾯是服务器端的⻚⾯,基本上服务器的项⽬和⼯作空间的项⽬要保持⼀致
1,点击Run---EDit Configurations.
2.点击左侧“+”号,找到Tomcat Server---Local(若是没有找到Tomcat Server 可以点击最后⼀⾏ 34
items more)
3.在Tomcat Server -> local-> Server -> Application server项⽬下,点击 Configuration ,找到本地
Tomcat 服务器,再点击 OK按钮。
⾄此,IntelliJ IDEA配置Tomcat完成。
1.点击左上⻆的File-->New-->Project
2.找到Java Enterprise之后,在Application Sever中找到⾃⼰的Tomcat,同时勾选中Web Application
3.第⼀项是你的⼯程名字,第⼆个是你的⼯程路径,选择好之后点击finish
4.创建classes和lib⽂件夹,名字不可改
像这样
5.配置jar包和classes包:
5.1 在File中找到Project Structure
5.2 点击Modules ,选择Paths,选中Use module compile output path ,把路径改成刚刚创建的classes⽂件夹
5.3 ok后再点旁边的Dependencies,点击"+"号,选择1 JARs or directories
5.4,选择你刚刚创建的lib⽂件夹,OK
5.5 选中jar Directory。
6.部署项⽬:将本地项⽬安装到服务器中
6.1回到主界⾯后,点击Run ,选择Edit Configurations
6.2 看tomcat已经有啦,这是java Enterprise的好处啦,点击Deployment
6.3点击右上⻆的三⻆形
6.4 运⾏成功。
⾄此,intellij idea创建并设置javaweb⼯程全部完成,
修改配置⽂件:/conf/server.xml
如果将端⼝号改成80,则访问项⽬时的请求路径就可以省略端⼝号。
给tomcat增加管理员信息:
配置conf/tomcat-users.xml
注意:tomcat启动的时候会加载webapps下的所有项⽬
(1) Servlet(Server Applet),全称Java Servlet。是⽤Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据,⽣成动态Web内容。狭义的Servlet是指Java语⾔实现的⼀个接⼝,⼴义的Servlet是指任何实现了这个Servlet接⼝的类,⼀般情况下,⼈们将Servlet理解为后者。
(2) Servlet运⾏于⽀持Java的应⽤服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝⼤多数情况下Servlet只⽤来扩展基于HTTP协议的Web服务器。
(3) Servlet⼯作模式:
① 客户端发送请求⾄服务器
② 服务器启动并调⽤Servlet,Servlet根据客户端请求⽣成响应内容并将其传给服务器
③ 服务器将响应返回客户端
对于CPU的一个核新而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是 在同一时刻运行。 其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。
(1) Servlet接⼝定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载⼊内存,并产⽣Servlet实例和调⽤它具体的⽅法。但是要注意的是,在⼀个应⽤程序中,每种Servlet类型只能有⼀个实例。
(2)⽤户请求致使Servlet容器调⽤Servlet的Service()⽅法,并传⼊⼀个ServletRequest对象和⼀个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如
TomCat)封装好的,并不需要程序员去实现,程序员可以直接使⽤这两个对象。
(3)ServletRequest中封装了当前的Http请求,因此,开发⼈员不必解析和操作原始的Http数据。
ServletResponse表示当前⽤户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给⽤户。
(4)对于每⼀个应⽤程序,Servlet容器还会创建⼀个ServletContext对象。这个对象中封装了上下⽂
(应⽤程序)的环境详情。每个应⽤程序只有⼀个ServletContext。每个Servlet对象也都有⼀个封装Servlet配置的ServletConfig对象。
当客户端⾸次发送第⼀次请求后,由容器(web服务器(tomcat))去解析请求, 根据请求找到对应的servlet,判断该类的对象是否存在,不存在则创建servlet实例,调取init()⽅法 进⾏初始化操作,初始化完成后调取service()⽅法,由service()判断客户端的请求⽅式,如果是get,则执⾏doGet(),如果是post则执⾏doPost().处理⽅法完成后,作出相应结果给客户端.单次请求处理完毕。
当⽤户发送第⼆次以后的请求时,会判断对象是否存在,但是不再执⾏init(),⽽直接执⾏service⽅法,调取doGet()/doPost()⽅法。
当服务器关闭时调取destroy()⽅法进⾏销毁。
四个过程:
(1)实例化 --先创建servlet实例
(2)初始化 --init()
(3)处理请求 ---service()
(4)服务终⽌ --destory()
HttpServletRequest表示Http环境中的Servlet请求。它扩展于javax.servlet.ServletRequest接⼝)
常⽤⽅法:
1)String getParameter(String name) 根据表单组件名称获取提交数据,返回值是String
注:服务器在接收数据时使⽤字符串统⼀接收
2)String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据
3)void setCharacterEncoding(String charset) 指定每个请求的编码(针对post请求才起作⽤)
4)RequestDispatcher getRequestDispatcher(String path) --跳转⻚⾯
返回⼀个RequestDispatcher对象,该对象的forward( )⽅法⽤于转发请求
示例:
5)存值 request.setAttribute("key",value);
request.getRequestDispatcher("../success.jsp").forward(request,response);
6)取值 request.getAttribute("key");//取值后需要向下转型
示例: String a1=(String)request.getAttribute("uname");
注意点1:客户端如何发送数据给服务器
⽅式1:通过表单 get/post提交
⽅式2:通过a标签发送数据(get提交)
这⾥的key值=表单元素的控件名,value值=表单中控件的value属性值
注:第⼀个参数使⽤?拼接,之后的参数使⽤&拼接,获取数据还是通过 String
name=request.getParameter("name");
⽅式3:通过地址栏直接拼接-get请求
⽅式4:js提交数据-get请求 location.href="⽬标请求?key=value&key=value"
注:⽅式2/3都属于get提交⽅式,表单提交可以使⽤get、post提交⽅式
注意点2:处理请求乱码的问题
⽅式1:setCharacterEncoding("UTF-8");//post提交时管⽤
⽅式2: String s=new String(变量名.getBytes("ISO-8859-1"),"UTF-8");//针对于get提交时中⽂乱码
示例: String s=new String(request.getParameter("key").getBytes("ISO-8859-1"),"GBK");
⽅式3:修改tomcat中配置⽂件://使⽤于get提交
在Tomcat⽬录结构\conf\server.xml中设置字符集
注意点3:get和post的区别
1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数⽤&连接。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上⾯的item=bandsaw就是实际的传输数据。
因此,GET请求的数据会暴露在地址栏中,⽽POST请求则不会。
2、传输数据的⼤⼩
在HTTP规范中,没有对URL的⻓度和传输的数据⼤⼩进⾏限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的⻓度有限制。因此,在使⽤GET请求时,传输数据会受到URL⻓度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据⼤⼩进⾏限制,Apache、IIS都有各⾃的配置。
3、安全性
POST的安全性⽐GET的⾼。这⾥的安全是指真正的安全,⽽不同于上⾯GET提到的安全⽅法中的安全,上⾯提到的安全仅仅是不修改服务器的数据。⽐如,在进⾏登录操作,通过GET请求,⽤户名和密码都会暴露再URL上,因为登录⻚⾯有可能被浏览器缓存以及其他⼈查看浏览器的历史记录的原因,此时的⽤户名和密码就很容易被他⼈拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击
在Service API中,定义了⼀个HttpServletResponse接⼝,它继承⾃ServletResponse接⼝,专⻔⽤来封装HTTP响应消息。 在HttpServletResponse接⼝中定义了向客户端发送响应状态码,响应消息头,响应消息体的⽅法。
常⽤⽅法:
void addCookie(Cookie var1);//给这个响应添加⼀个cookie
void sendRedirect(String var1) ;//发送⼀条响应码,将浏览器跳转到指定的位置
PrintWriter getWriter() 获得字符流,通过字符流的write(String s)⽅法可以将字符串设置到response缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。
setContentType() 设置响应内容的类型
重定向和转发的对⽐
1:重定向:response.sendRedirect()
转发:request.getRequestDispatcher("../success.jsp").forward(request,response);
相同点:都⽤来跳转⻚⾯
不同点:
a.重定向时地址栏会改变,request中存储的数据会丢失.转发时地址栏显示的是请求⻚⾯的地
址,request数据可以保存。
b.转发属于⼀次请求⼀次响应,重定向属于两次请求(地址栏修改了两次)两次响应。
补充:使⽤out对象往⻚⾯中输出js或html,css
注:使⽤js跳转⻚⾯,也会丢失request中的数据
会话的概念:从打开浏览器到关闭浏览器,期间访问服务器就称为⼀次会话
request存的值只能在单次请求中保存,保存的数据不能跨⻚⾯,当重定向时,request存的值会丢失
session的数据可以在多个⻚⾯中共享,即使重定向⻚⾯,数据不会丢失
session中可以包含n个request。
常⽤⽅法:
void setAttribute(String key,Object value) 以key/value的形式保存对象值,将数据存储在服务器端
Object getAttribute(String key) 通过key获取对象值
void invalidate() 设置session对象失效
String getId() 获取sessionid,当第⼀次登录成功后,session会产⽣⼀个
唯⼀的id,浏览器之后访问时如果发现id值还是之前id,那么说明 当前访问的属于同⼀个会话
void setMaxInactiveInterval(int interval) 设定session的⾮活动时间
示例:
⽅式1: session.setMaxInactiveInterval(10*60);//设置有效时间为10分钟
⽅式2:修改web.xml
int getMaxInactiveInterval() 获取session的有效⾮活动时间(以秒为单位),默认的有效时间:30
分钟
void removeAttribute(String key)
从session中删除指定名称(key)所对应的对象
⼩结 :让session失效的⽅式
(1)invalidate() (2)removeAttribute("key") (3)直接关闭浏览器。
示例:使⽤session验证⽤户是否登录
补充:
⾃动刷新到某⻚⾯:
注:在head标签中添加该标签,单位:秒
request.setCharacterEncoding("utf-8");代码的耦合度太⾼,不便于后期维护修改。可以通过初始化参数实现
实现⽅式:
(1)web.xml中先定义初始化参数
(2)servlet中获得初始化参数,重写init()⽅法
注意:这种⽅式的初始化参数仅限于当前servlet中使⽤。
全局初始化参数
(1)定义,context-param是和servlet标签同级别
(2)获得数据
JSP全名为Java Server Pages,中⽂名叫java服务器⻚⾯,其根本是⼀个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与⼀起建⽴的⼀种动态⽹⻚技术标准。JSP技术有点类似ASP技术,它是在传统的⽹⻚HTML⽂件(*.htm,*.html)中插⼊Java程序段(Scriptlet)和JSP标记(tag),从⽽形成JSP⽂件,后缀名为(*.jsp)。 ⽤JSP开发的Web应⽤是跨平台的,既能在Linux下运⾏,也能在其他操作系统上运⾏。
JSP将⽹⻚逻辑与⽹⻚设计的显示分离,⽀持可重⽤的基于组件的设计,使基于Web的应⽤程序的开发变得迅速和容易。
*.html 静态⻚⾯(包含固定的⻚⾯内容)
*.jsp 动态⻚⾯(⻚⾯数据可以动态更新,⽀持嵌套java代码和html代码)
JSP通过⼩脚本(<% java代码%>)嵌套代码
page指令:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
如果把⼀个数据存在request域中,取值操作如下:
jsp中的注释
当浏览器访问http://localhost:8080/day9_1/index.jsp。服务器发现后缀为.jsp,它会根据路径找到
index.jsp⽂件,会将index.jsp翻译成index_jsp.java⽂件,对这个java⽂件进⾏编译,产⽣⼀个
index_jsp.class⽂件,将class⽂件加载运⾏。将JSP翻译成java⽂件,它是将JSP中的所有的HTML代码通过流进⾏输出,也就是说最终翻译成class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的⽅式写回浏览器。所以在JSP中展示出了HTML代码
JSP中⼀共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception
request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信
息,主要⽤于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求⽅式以及请求参数等)。request对象的作⽤域为⼀次请求。
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response
对象也具有作⽤域,它只在JSP⻚⾯内有效。所属类型:HttpServletResponse
session 对象是由服务器⾃动创建的与⽤户请求相关的对象。服务器为每个⽤户都⽣成⼀个
session对象,⽤于保存该⽤户的信息,跟踪⽤户的操作状态。session对象内部使⽤Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,⽽不仅仅局限于字符串类型。HttpSession
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息
会在整个应⽤中都有效。与session对象相⽐,application对象⽣命周期更⻓,类似于系统的“全局变量”ServletContext
区别:
request:单次请求
session:浏览器访问期间(会话期间)
application:服务器启动期间,所存的数据可以跨浏览器
out 对象⽤于在Web浏览器内输出信息,并且管理应⽤服务器上的输出缓冲区。在使⽤ out 对
象输出数据时,可以对数据缓冲区进⾏操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭,如:
pageContext 对象的作⽤是取得任何范围的参数,通过它可以获取 JSP⻚⾯的out、
request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP⻚⾯中可以直接使⽤ pageContext对象。
config 对象的主要作⽤是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() ⽅法可以获取⼀个config对象。当⼀个Servlet 初始化时,容器把某些信息通过config对象传递给这个
Servlet。 开发者可以在web.xml ⽂件中为应⽤程序环境中的Servlet程序和JSP⻚⾯提供初始化参数。
page 对象代表JSP本身,只有在JSP⻚⾯内才是合法的。 page隐含对象本质上包含当前 Servlet
接⼝引⽤的变量,类似于Java编程中的 this 指针。
exception 对象的作⽤是显示异常信息,只有在包含 isErrorPage="true" 的⻚⾯中才可以被使⽤,
在⼀般的JSP⻚⾯中使⽤该对象将⽆法编译JSP⽂件。excepation对象和Java的所有对象⼀样,都具有系统提供的继承结构。exception 对象⼏乎定义了所有异常情况。在Java程序中,可以使⽤try/catch关键字来处理异常情况; 如果在JSP⻚⾯中出现没有捕获到的异常,就会⽣成 exception 对象,并把exception 对象传送到在page指令中设定的错误⻚⾯中,然后在错误⻚⾯中处理相应的 exception 对象。
(1)先在可能发⽣错误的⻚⾯中添加errorPage属性:
(2) 在error.jsp⻚⾯中设置isErrorPage="true" 的属性
(使⽤exception对象之前,需要先将当前⻚⾯设置成错误⻚⾯)
jsp的作⽤域:
pageContext -> request -> session -> application
当前⻚⾯ 单次请求有效 当前会话期间 服务器运⾏期间有效
JSP指令⽤来设置整个JSP⻚⾯相关的属性,如⽹⻚的编码⽅式和脚本语⾔。
语法格式如下:
(1)Page指令
Page指令为容器提供当前⻚⾯的使⽤说明⼀个JSP⻚⾯可以包含多个page指令
Page指令的语法格式:
<%@ page attribute="value" %>
(2) Include指令
JSP可以通过include指令来包含其他⽂件。被包含的⽂件可以是JSP⽂件、HTML⽂件或⽂本⽂件。包含的⽂件就好像是该JSP⽂件的⼀部分,会被同时编译执⾏。
Include指令的语法格式如下:
include 指令中的⽂件名实际上是⼀个相对的 URL 地址。
如果您没有给⽂件关联⼀个路径,JSP编译器默认在当前路径下寻找。
(3)Taglib指令
JSP API允许⽤户⾃定义标签,⼀个⾃定义标签库就是⾃定义标签的集合。
Taglib指令引⼊⼀个⾃定义标签集合的定义,包括库路径、⾃定义标签。
uri属性确定标签库的位置,prefix属性指定标签库的前缀(可⾃定义)。
(1)什么Expression Language 表达式语⾔
最初定义于JSTL1.0部分
在JSP2.0中,EL从JSTL中剥离出来,放置在JSP规范中,称为JSP2.0规范的⼀部分
在JSP中使⽤EL表达式,可以简化对象和变量的访问是EL表达式
(2)EL表达式语法
语法格式:${需要展示信息的名字}
注意:
当表达式没有指定变量或者对象的范围时,那么容器会依次从pageContext—>request—>session—>application中查找该变量或对象,我们可以通过隐含对象获得指定作⽤域的值:
pageScope对象,⽤于获取当前⻚⾯的属性值
requestScope对象,⽤于获取请求范围的属性值
sessionScope对象,⽤于获取会话范围的属性值
applicationScope对象,⽤于获取程序范围的属性值
语法:
${requestScope.key}
(3)EL中基础操作符
(1) 什么是JSTL
JSP标准标签库(JSTL)是⼀个JSP标签集合,它封装了JSP应⽤的通⽤核⼼功能。
JSTL⽀持通⽤的、结构化的任务,⽐如迭代,条件判断,XML⽂档操作,国际化标签,SQL标签。 除了这些,它还提供了⼀个框架来使⽤集成JSTL的⾃定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。核⼼标签 格式化标签 sql标签 xml标签 jstl函数
(后⾯详细解释)
(2) JSTL的作⽤和语法格式
作⽤:简化jsp⻚⾯编写代码
语法格式:
1. 下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两
个 jar ⽂件:standard.jar 和 jstl.jar ⽂件拷⻉到 /WEB-INF/lib/ 下。
2. 在JSP⻚⾯中引⼊<%@ taglib prefix=”⻚⾯使⽤的名称” uri=”功能范围的路径”%>
(3) 核⼼标签
①核⼼标签是最常⽤的 JSTL标签。引⽤核⼼标签库的语法如下:
② 核⼼标签的分类
表达式操作 out、set、remove、catch
流程控制 if、choose、when、otherwise
迭代操作 forEach、forTokens
URL操作 import、param、url、redirect
Set标签
<c:set> 主要⽤来将变量存储⾄JSP范围中 或是JavaBean的属性或Map对象中
(4)格式化标签
1、fmt:formatDate 作⽤:将⽇期类型格式化为指定模式的字符串
属性
value:将要被格式化的数据
pattern:格式化的模式,与SimpleDateFormat的参数设置⼀样
var:格式化后的字符串所要存放的变量,若不指定var,则会将格式化的结果直接显示在⻚⾯
scope:变量存放的域属性空间,默认page
type:其取值为date、time、both,表示给出的value是⽇期、时间、还是两者都包含,默认是date
2、fmt:parseDate 作⽤:⽤于将指定字符串转化为⽇期类型
<fmt:parseDate value="${now }" pattern="yyyy-MM-dd" var="today"/>
Value服务器获取的时间
Pattern:转换的格式
Var:⻚⾯显示的变量
3、fmt:formatNumber 按照指定格式对数字进⾏格式化
属性
maxIntegerDigits:整数部分最多的位数
minIntegerDigits:整数部分最少的位数
maxFrctionDigits:⼩数部分最多的位数
minFrctionDigits:⼩数部分最少的位数
var:存储格式化结果的变量
scope:var属性的作⽤域
integerOnly:是否只解析整型数true或者浮点数false
2.1 保持⽤户登录状态
将⽤户的信息保存到Cookie中,并发送给浏览器,并且将有效时间设置为⼀个较⻓的时间,这样浏览器在以后访问⽹站时,都会带着该Cookie,服务器以此来辨识⽤户,⽤户就不再需要输⼊⽤户名和密码等信息。
2.2 记录⽤户名
⼀旦⽤户登录成功以后,下次再登录时,直接将Cookie中的⽤户名读取并显示出来,这样⽤户就不
需要再次输⼊⽤户名,只输⼊密码即可。
3.1 、通过HttpServletResponse.addCookie的⽅式设置Cookie
注意:new Cookie()时两个参数都是字符串
3.2、浏览器中查看cookie的内容
3.3、服务端获取客户端携带的cookie:通过HttpServletRequest获取
S通过设置同名Cookie的最⼤存活时间为0,删除Cookie是指使浏览器不再保存Cookie,使Cookie⽴即失效
举例:使name为username的Cookie⽴即失效
Cookie的有效时间
Cookie发送给浏览器以后,浏览器并不会永久保存,也就是到了⼀定的时间以后浏览器会⾃动销毁Cookie。Cookie的默认有效时间为⼀次会话(⼀次打开关闭浏览器的过程),我们也可以⼿动指定Cookie的有效时间
Session是另⼀种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,⽽Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通⾏证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建⽴的⼀份客户档案,客户来访的时候只需要查询客户档案表就可以了
Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应⼀个Session对象,所有该
客户的状态信息都保存在这个Session对象⾥。Session对象是在客户端第⼀次请求服务器的时候创建的。
Session也是⼀种key-value的属性对,通过getAttribute(Stringkey)和setAttribute(String key,
Objectvalue)⽅法读写客户状态信息。Servlet⾥通过request.getSession()⽅法获取该客户的 Session
例如:
Session保存在服务器端。为了获得更⾼的存取速度,服务器⼀般把Session放在内存⾥。每个⽤户都会有⼀个独⽴的Session。如果Session内容过于复杂,当⼤量客户访问服务器时可能会导致内存溢出。因此,Session⾥的信息应该尽量精简。
Session在⽤户第⼀次访问服务器的时候⾃动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未⽣成Session,也可以使request.getSession(true)强制⽣成Session。
//setMaxAge⽤来设置Cookie的最⼤有效时间,需要int型的参数,代表有效的秒数
cookie.setMaxAge(秒数);
//当参数⼤于0时,会设置为指定的秒数
cookie.setMaxAge(30);
//当参数等于0时,浏览器不会保存Cookie,Cookie⽴即失效
cookie.setMaxAge(0);
//当参数⼩于0时,和不设置是⼀样,当前会话有效
cookie.setMaxAge(-100);
//设置⼀个永久有效的Cookie,并⾮永久,只是使Cookie的⽣命很⻓⽽已
cookie.setMaxAge(60*60*24*365*10);
HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性
out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取
Session属性
Session⽣成后,只要⽤户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。⽤户每访问服务器⼀次,⽆论是否读写Session,服务器都认为该⽤户的Session“活跃(active)”了⼀次。
由于会有越来越多的⽤户访问服务器,因此Session也会越来越多。为防⽌内存溢出,服务器会把⻓时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就⾃动失效了。
Session的超时时间为maxInactiveInterval属性,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改。
Session的超时时间也可以在web.xml中修改。另外,通过调⽤Session的invalidate()⽅法可以使Session失效。
密码之类的重要信息不宜暴露于客户端,可利用Session将其存于服务端。
(1) Cookie数据保存在客户端,Session数据保存在服务器端。
(2) Session是由应⽤服务器维持的⼀个服务器端的存储空间,⽤户在连接服务器时,会由服务器⽣成⼀个唯⼀的SessionID,⽤该SessionID 为标识符来存取服务器端的Session存储空间。⽽SessionID这⼀数据则是保存到客户端,⽤Cookie保存的,⽤户提交⻚⾯时,会将这⼀SessionID提交到服务器端,来存取Session数据。这⼀过程,是不⽤开发⼈员⼲预的。所以⼀旦客户端禁⽤Cookie,那么Session也会失效。
(3) Cookies是属于Session对象的⼀种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者⼀个Cookie的⽂本⽂件中;⽽Session则会占⽤服务器资源。所以,尽量不要使⽤Session,⽽使⽤Cookies。但是我们⼀般认为Cookie是不可靠的,Cookies是保存在本机上的,但是其信息的完全可⻅性且易于本地编辑性,往往可以引起很多的安全问题Session是可靠地。但是⽬前很多著名的站点也都⽤Cookie。
过滤器实际上就是对web资源进⾏拦截,做⼀些处理后再交给下⼀个过滤器或servlet处理,通常都
是⽤来拦截request进⾏处理的,也可以对返回的response进⾏拦截处理
2.1.创建⼀个类实现Filter接⼝
2.2.重写接⼝中的⽅法
2.3.在web.xml⽂件中配置
3.1.如何防⽌⽤户未登录就执⾏后续操作
String name=(String)session.getAttribute("key");
if(name==null){
//跳转到登录⻚⾯
}
3.2.设置编码⽅式--统⼀设置编码
3.3.加密解密(密码的加密和解密)
3.4.⾮法⽂字筛选
3.5.下载资源的限制
过滤器的特点:在servlet之前和之后都会被执⾏
监听器就是监听某个域对象的的状态变化的组件
监听器的相关概念:
事件源:被监听的对象(三个域对象 request、session、servletContext)
监听器:监听事件源对象事件源对象的状态的变化都会触发监听器
注册监听器:将监听器与事件源进⾏绑定
响应⾏为:监听器监听到事件源的状态变化时所涉及的功能代码(程序员编写代码)
第⼀维度按照被监听的对象划分:ServletRequest域、HttpSession域、ServletContext域
第⼆维度按照监听的内容分:监听域对象的创建与销毁的、监听域对象的属性变化的
监听器的编写步骤(重点):
编写⼀个监听器类去实现监听器接⼝
覆盖监听器的⽅法
需要在web.xml中进⾏配置—注册
ServletContextListener
监听ServletContext域的创建与销毁的监听器
Servlet域的⽣命周期
何时创建:服务器启动创建
何时销毁:服务器关闭销毁
ServletContextListener监听器的主要作⽤
初始化的⼯作:初始化对象、初始化数据(加载数据库驱动、连接池的初始化)
加载⼀些初始化的配置⽂件(spring的配置⽂件)
任务调度(定时器—Timer/TimerTask)
HttpSessionListener
监听Httpsession域的创建和销毁的监听器
HttpSession对象的⽣命周期
何时创建:第⼀次调⽤request.getSession时创建
何时销毁:服务器关闭销毁、session过期(默认30分钟,修改默认的30分钟是在
Tomcat的web.xml,修改当前项⽬的过期时间是在⾃⼰项⽬的web.xml中)、⼿动销毁
HttpSessionListener监听器的主要作⽤:
由于每次访问⽹站都会默认创建session对象(jsp⻚⾯中page指令中的session属性默认为
true,即被访问时创建session),可以⽤于计数⽹站访问过的⼈
ServletRequestListener
监听ServletRequest域创建与销毁的监听器
<listener>
<listener-class>监听器所在的路径</listener-class>
</listener>
ServletRequest的⽣命周期
创建:每⼀次请求都会创建request
销毁:请求结束
写Java Web项⽬时会发现,⼀个中型或者⼤型项⽬ 随着代码的增多,会发现:代码既可以写在src⽬录下,也可以写在WebContent⽬录下。src下可以建很多包 ,WebContent下可以建很多⽂件夹。所以问题就来了:⼀个新的类 到底往哪个⽬录下的哪个⽂件夹⾥写?
此时解决办法就是:需要⼀个模式去规范,到底哪个类该往哪⾥写。
Web MVC中的M(模型)-V(视图)-C(控制器)概念和标准MVC概念⼀样,我们再看⼀下Web MVC标准架构,
如下图所示:
在Web MVC模式下,模型⽆法主动推数据给视图,如果⽤户想要视图更新,需要再发送⼀次请求(即请求-响应模型)。
M:(Model) 模型 : 应⽤程序的核⼼功能,管理这个模块中⽤的数据和值(bean,dao);
V(View )视图: 视图提供模型的展示,管理模型如何显示给⽤户,它是应⽤程序的外观;(jsp/html)
C(Controller)控制器: 对⽤户的输⼊做出反应,管理⽤户和视图的交互,是连接模型和视图的枢纽。
(servlet/service)
MVC⽤于将web(UI)层进⾏职责解耦
说明:mvc设计模式(不属于23种设计模式)
三层架构 通常意义上的三层架构就是将整个业务应⽤划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的⽬的即为了“⾼内聚,低耦合”的思想。
1、表现层(UI):通俗讲就是展现给⽤户的界⾯,即⽤户在使⽤⼀个系统的时候他的所⻅所得。
jsp/html
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
servlet,service
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。dao表现层实现的代表作品是Struts,springmvc框架,业务层实现的代表作品是Spring,
持久层实现的代表作品是Hibernate,mybatis。
层就相当于⼀个⿊盒⼦,我们不⽤知道它内部怎么实现,只需要知道如何去调⽤它就⾏了。每层只与上下相邻的两层打交道。当⼀层内部由于技术变迁发⽣变化时,只要接⼝不变,其他层不⽤做任何改变。
分层之后灵活性提⾼,也便于团队分⼯开发。
MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进⾏了分化,分成了控制器、视图、实体三个部分,控制器完成⻚⾯逻辑,通过实体来与界⾯层完成通话;⽽C层直接与三层中的BLL进⾏对话。
MVC可以是三层中的⼀个表现层框架,属于表现层。三层和mvc可以共存。
三层是基于业务逻辑来分的,⽽MVC是基于⻚⾯来分的。
MVC主要⽤于表现层,3层主要⽤于体系架构,3层⼀般是表现层、中间层、数据层,其中表现层⼜可以分成M、V、C,(Model View Controller)模型-视图-控制器
MVC是表现模式(Presentation Pattern)
三层架构是典型的架构模式(Architecture Pattern)
三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的,⽽是相互协作关系。即使将MVC当作架构模式,也不是分层模式。MVC和三层架构基本没有可⽐性,是应⽤于不同领域的技术。
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 不是新的编程语⾔,⽽是⼀种使⽤现有标准的新⽅法。
AJAX 是与服务器交换数据并更新部分⽹⻚的艺术,在不重新加载整个⻚⾯的情况下。
⼤家都知道ajax并⾮⼀种新的技术,⽽是⼏种原有技术的结合体。它由下列技术组合⽽成。
AJAX 的核⼼是 XMLHttpRequest 对象。
不同的浏览器创建 XMLHttpRequest 对象的⽅法是有差异的。
IE 浏览器使⽤ ActiveXObject,⽽其他的浏览器使⽤名为 XMLHttpRequest 的 JavaScript 内建对象
Ajax的⼯作原理相当于在⽤户和服务器之间加了—个中间层(AJAX引擎),使⽤户操作与服务器响应异步化。并不是所有的⽤户请求都提交给服务器。像—些数据验证和数据处理等都交给Ajax引擎⾃⼰来做,,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。
来看看和传统⽅式的区别
再来看看它们各⾃的交互
浏览器的普通交互⽅式
浏览器的Ajax交互⽅式
在创建Web站点时,在客户端执⾏屏幕更新为⽤户提供了很⼤的灵活性。下⾯是使⽤Ajax可以完成的功能:
动态更新购物⻋的物品总数,⽆需⽤户单击Update并等待服务器重新发送整个⻚⾯。
提升站点的性能,这是通过减少从服务器下载的数据量⽽实现的。例如,在Amazon的购物⻋⻚⾯,当更新篮⼦中的⼀项物品的数量时,会重新载⼊整个⻚⾯,这必须下载32K的数据。如果使⽤Ajax计算新的总量,服务器只会返回新的总量值,因此所需的带宽仅为原来的百分之⼀。
消除了每次⽤户输⼊时的⻚⾯刷新。例如,在Ajax中,如果⽤户在分⻚列表上单击Next,则服务器数据只刷新列表⽽不是整个⻚⾯。
直接编辑表格数据,⽽不是要求⽤户导航到新的⻚⾯来编辑数据。对于Ajax,当⽤户单击Edit时,可以将静态表格刷新为内容可编辑的表格。⽤户单击Done之后,就可以发出⼀个Ajax请求来更新服务器,并刷新表格,使其包含静态、只读的数据。
onreadystatechange 属性存有处理服务器响应的函数。
下⾯的代码定义⼀个空的函数,可同时对 onreadystatechange 属性进⾏设置:
readyState 属性存有服务器响应的状态信息。每当 readyState 改变时,onreadystatechange 函数就会被执⾏。
readyState 属性可能的值:
我们要向这个 onreadystatechange 函数添加⼀条 If 语句,来测试我们的响应是否已完成(意味着可获得数据):
可以通过 responseText 属性来取回由服务器返回的数据。
在我们的代码中,我们将把时间⽂本框的值设置为等于 responseText:
其它属性如下:
open() 有三个参数。第⼀个参数定义发送请求所使⽤的⽅法,第⼆个参数规定服务器端脚本的URL,第三个参数规定应当对请求进⾏异步地处理。
send() ⽅法将请求送往服务器。如果我们假设 HTML ⽂件和 PHP ⽂件位于相同的⽬录,那么代码是这样的:
其它⽅法如下:
要想实现AJAX,就要按照以后步骤⾛:
下⾯是具体步骤:
创建XMLHttp对象的语法是:
如果是IE5或者IE6浏览器,则使⽤ActiveX对象,创建⽅法是:
⼀般我们⼿写AJAX的时候,⾸先要判断该浏览器是否⽀持XMLHttpRequest对象,如果⽀持则创建该对象,如果不⽀持则创建ActiveX对象。JS代码如下:
在WEB开发中,请求有两种形式,⼀个是get,⼀个是post,所以在这⾥需要设置⼀下具体使⽤哪个请求,XMLHttpRequest对象的open()⽅法就是来设置请求⽅式的。
open()⽅法
如下:
open⽅法如下:
GET 还是 POST?
与 POST 相⽐,GET 更简单也更快,并且在⼤部分情况下都能⽤。然⽽,在以下情况中,请使⽤ POST请求:
异步 - True 或 False?
AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。XMLHttpRequest 对象如果要⽤于 AJAX 的话,其 open() ⽅法的 async 参数必须设置为 true:对于 web 开发⼈员来说,发送异步请求是⼀个巨⼤的进步。很多在服务器执⾏的任务都相当费时。AJAX 出现之前,这可能会引起应⽤程序挂起或停⽌。
通过 AJAX,JavaScript ⽆需等待服务器的响应,⽽是:
在等待服务器响应时执⾏其他脚本
当响应就绪后对响应进⾏处理
2.3 调⽤回调函数
如果在上⼀步中open⽅法的第三个参数选择的是true,那么当前就是异步请求,这个时候需要写⼀个回调函数,XMLHttpRequest对象有⼀个onreadystatechange属性,这个属性返回的是⼀个匿名的⽅法,所以回调函数就在这⾥写xmlHttp.onreadystatechange=function{},function{}内部就是回调函数的内容。所谓回调函数,就是请求在后台处理完,再返回到前台所实现的功能。在这个例⼦⾥,我们的回调函数要实现的功能就是接收后台处理后反馈给前台的数据,然后将这个数据显示到指定的div上。因为从后台返回的数据可能是错误的,所以在回调函数中⾸先要判断后台返回的信息是否正确,如果正确才可以继续执⾏。代码如下:
在上⾯代码中,xmlHttp.readyState是存有XMLHttpRequest 的状态。从 0 到 4 发⽣变化。0: 请求未初始化。1: 服务器连接已建⽴。2: 请求已接收。3: 请求处理中。4: 请求已完成,且响应已就绪。所以这⾥我们判断只有当xmlHttp.readyState为4的时候才可以继续执⾏。
xmlHttp.status是服务器返回的结果,其中200代表正确。404代表未找到⻚⾯,所以这⾥我们判断只有当xmlHttp.status等于200的时候才可以继续执⾏。
这段代码就是回调函数的核⼼内容,就是获取后台返回的数据,然后将这个数据赋值给id为testid的div。xmlHttp对象有两个属性都可以获取后台返回的数据,分别是:responseText和responseXML,其中responseText是⽤来获得字符串形式的响应数据,responseXML是⽤来获得 XML 形式的响应数据。⾄于选择哪⼀个是取决于后台给返回的数据的,这个例⼦⾥我们只是显示⼀条字符串数据所以选择的是responseText。responseXML将会在以后的例⼦中介绍。
AJAX状态值与状态码区别AJAX状态值是指,运⾏AJAX所经历过的⼏种状态,⽆论访问是否成功都将响应的步骤,可以理解成为AJAX运⾏步骤。如:正在发送,正在响应等,由AJAX对象与服务器交互时所得;使⽤“ajax.readyState”获得。(由数字1~4单位数字组成)AJAX状态码是指,⽆论AJAX访问是否成功,由HTTP协议根据所提交的信息,服务器所返回的HTTP头信息代码,该信息使⽤“ajax.status”所获得;(由数字1XX,2XX三位数字组成,详细查看RFC)这就是我们在使⽤AJAX时为什么采⽤下⾯的⽅式判断所获得的信息是否正确的原因。
AJAX运⾏步骤与状态值说明
在AJAX实际运⾏当中,对于访问XMLHttpRequest(XHR)时并不是⼀次完成的,⽽是分别经历了多种状态后取得的结果,对于这种状态在AJAX中共有5种,分别是:
0 - (未初始化)还没有调⽤send()⽅法
1 - (载⼊)已调⽤send()⽅法,正在发送请求
2 - (载⼊完成)send()⽅法执⾏完成,
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调⽤了
对于上⾯的状态,其中“0”状态是在定义后⾃动具有的状态值,⽽对于成功访问的状态(得到信息)我们⼤多数采⽤“4”进⾏判断。
AJAX状态码说明
1:请求收到,继续处理
2:操作成功收到,分析、接受
3:完成此请求必须进⼀步处理
4:请求包含⼀个错误语法或不能完成
5:服务器执⾏⼀个完全有效请求失败
再具体就如下:
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新⽂件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,⽤户代理必须复位当前已经浏览过的⽂件
206——服务器已经完成了部分⽤户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问⽅式
304——客户端已经执⾏了GET,但⽂件未变化
305——请求的资源必须从服务器指定的地址得到
306——前⼀版本HTTP中使⽤的代码,现⾏版本中不再使⽤
307——申明请求的资源临时性删除
400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现⽂件、查询或URl
405——⽤户在Request-Line字段定义的⽅法不允许
406——根据⽤户发送的Accept拖,请求资源不可访问
407——类似401,⽤户必须⾸先在代理服务器上得到授权
408——客户端没有在⽤户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且⽆进⼀步的参考地址
411——服务器拒绝⽤户定义的Content-Length属性请求
412——⼀个或多个请求头字段在当前请求中错误
413——请求的资源⼤于服务器允许的⼤⼩
414——请求的资源URL⻓于服务器允许的⻓度
415——请求资源不⽀持请求项⽬格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-
Range请求头字段
417——服务器不满⾜请求Expect头字段指定的期望值,如果是代理服务器,可能是下⼀级服务器不能满⾜请求
500——服务器产⽣内部错误
501——服务器不⽀持请求的函数
502——服务器暂时不可⽤,有时是为了防⽌发⽣系统过载
503——服务器过载或暂停维修
504——关⼝过载,服务器使⽤另⼀个关⼝或服务来响应⽤户,等待时间设定值较⻓
505——服务器不⽀持或拒绝⽀请求头中指定的HTTP版本
如果需要像 HTML 表单那样 POST 数据,请使⽤ setRequestHeader() 来添加 HTTP 头。然后在 send()⽅法中规定您希望发送的数据。
步骤繁琐
⽅法、属性、常⽤值较多不好记忆
可以通过发送 HTTP请求加载远程数据,是 jQuery 最底层的 Ajax 实现,具有较⾼灵活性。
$.ajax( [settings] ); //参数 settings 是$.ajax ( )⽅法的参数列表,⽤于配置 Ajax 请求的键值对集合;
这是⼀个简单的 GET 请求功能以取代复杂 $.ajax 。
url:请求的路径
data:发送的数据
success:成功函数
datatype 返回的数据
url:请求的路径
data:发送的数据
success:成功函数
datatype 返回的数据
JSON (JavaScript Object Notation) 是⼀种轻量级的数据交换格式。 易于⼈阅读和编写。同时也易于机器解析和⽣成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition -December 1999的⼀个⼦集。 JSON采⽤完全独⽴于语⾔的⽂本格式,但是也使⽤了类似于C语⾔家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语⾔。
在标准的json格式中,json对象由在括号括起来,对象中的属性也就是json的key是⼀个字符串,所以⼀定要使⽤双引号引起来。每组key之间使⽤逗号进⾏分隔。
4.2.1、JSON的定义
Json定义格式:
4.2.2、JSON对象的访问
json对象,顾名思义,就知道它是⼀个对象。⾥⾯的key就是对象的属性。我们要访问⼀个对象的属性,只需要使⽤【对象名.属性名】的⽅式访问即可。
我们要使⽤json和java中使⽤,我们需要使⽤到⼀个第三⽅的包。它就是
java对象和json之间的转换
《1》单个对象或map集合
java->json:
json->java:
《2》对象集合和json的转换
java集合->json数组:
json数组->java集合:
⽅式1:
⽅式2:
ajax实例2-实现数据的⾃动填充:
⻚⾯:
后台:
实体类
处理类:
tring(request.getParameter("key").getBytes("ISO-8859-1"),"GBK");
⽅式3:修改tomcat中配置⽂件://使⽤于get提交
在Tomcat⽬录结构\conf\server.xml中设置字符集
1.将jar包添加到项目中:smartupload.jar
2.准备上传的页面
注:(1)form标签中要添加enctype属性
(2)提交方式必须是post
3.开始获取数据,保存文件
实例代码
public void upload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
//上传文件
SmartUpload su=new SmartUpload();
//获得pageContext对象
JspFactory factory=JspFactory.getDefaultFactory();
PageContext pagecontext=
factory.
getPageContext(this, request,response,
null,false,1024,true);
su.initialize(pagecontext);
su.setCharset("utf-8");
//实现文件数据的上传
su.upload();
File file = su.getFiles().getFile(0);
//得到文件的基本信息
String filename=file.getFileName();
String type=file.getContentType();
System.out.println("type="+type);
String url="uploadfile/"+filename;
//将上传文件保存到指定目录
file.saveAs(url, SmartUpload.SAVE_VIRTUAL);
request.setAttribute("filename",filename);
String uname=su.getRequest().getParameter("uname");
System.out.println("uname="+uname);
request.getRequestDispatcher("success.jsp").forward(request,
response);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
注:(1)此时如果表单中有其他数据时,不能通过request直接获取,需要通过SmartUpload对象获取
String name=su.getRequest().getParameter("bookName");
并且该代码要在SmartUpload操作完成后添加
(2)解决乱码:
new String(name.getBytes("GBK"),"utf-8")
注:斜杠方向:/
注意:
smartupload常用方法
文件下载
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。