Servlet可以被认为是服务端的applet,它被WEB服务器加载和执行,前端可以显示页面和获得页面数据,后台可以操纵数据库,能完成JavaBean的很多功能。在这里我较为详细的说说Servlet在Cookie,Session和上传文件上的应用,在说明时我给出一些能编绎运行的小例子,最后给出一个文件上传例子以加深印象。
我们先来看看SERVLET程序的基本构架:
式1:
式1适合于作总控模块,此SERVLET作中间调度,根据不同的f值调用不同的SERVLET或方法。
式2适合于对html的get和post有不同要求的情况。
但这并不是绝对的,式2就完全可以代替式1,只要在doGet()方法中写上doPost就与式1完全一样。
在init方法中执行的语句,只要这个servlet被启动了就一直有效,比如,我们在init()中new了一个对象,那么这个对象的内存空间就永远存在,除非显式地把这个对象赋为null,或重启服务。
HttpServletRequest和HttpServletResponse两个对象实现http请求,它们有很多有用的方法,在下面的cookie和session管理中会细加描述。
1, cookie管理 cookie用于在客户端保存个人所特有的信息,它采取在客户机写临时文件的机制。
2,session管理
Session在Servlet中是很有用的,它比cookie安全可靠灵活,但是管理起来有点麻烦,用得不好会造成服务器的开销很大,浪费资源。下面是一个基于Session管理一个对象的简单例子。
一个简单的bean对象TestObject
若能轻松搞定上面的例子,相信读者对SERVLET已有了较为深刻的理解。
下面再介绍一个上传文件例子,其中汲及到了下载的免费JavaBean (如有感兴趣的朋友,可来函索要免费JavaBean源代码,Email:js79@yesky.com)
上传基本原理:由页面发出一个http请求,服务端得到请求后,解析多媒体协议,读出文件内容,写文件内容到服务器,所有的这些功能都封装到JavaBean中。
上传文件的必需条件:Browser端< form>表单的ENCTYPE属性值必须为 multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,< input>的type属性必须是file。
我们先来看看SERVLET程序的基本构架:
式1:
package test; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class test extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int f =1; switch(f){ case 1:firstMothed(request,respponse);break; } } public void firstMothed(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream()); PrintWriter out = new PrintWriter (response.getOutputStream()); out.println("< html>"); out.println("< head>< title>Servlet1< /title>< /head>"); out.println("< body>你好!"); out.println("< /body>< /html>"); out.close(); } } 式2: package test; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class test extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream()); PrintWriter out = new PrintWriter (response.getOutputStream()); out.println("< html>"); out.println("< head>< title>Servlet1< /title>< /head>"); out.println("< body>你好!"); out.println("< /body>< /html>"); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream()); PrintWriter out = new PrintWriter (response.getOutputStream()); out.println("< html>"); out.println("< head>< title>Servlet1< /title>< /head>"); out.println("< body>你好!"); out.println("< /body>< /html>"); out.close(); } }
式1适合于作总控模块,此SERVLET作中间调度,根据不同的f值调用不同的SERVLET或方法。
式2适合于对html的get和post有不同要求的情况。
但这并不是绝对的,式2就完全可以代替式1,只要在doGet()方法中写上doPost就与式1完全一样。
在init方法中执行的语句,只要这个servlet被启动了就一直有效,比如,我们在init()中new了一个对象,那么这个对象的内存空间就永远存在,除非显式地把这个对象赋为null,或重启服务。
HttpServletRequest和HttpServletResponse两个对象实现http请求,它们有很多有用的方法,在下面的cookie和session管理中会细加描述。
1, cookie管理 cookie用于在客户端保存个人所特有的信息,它采取在客户机写临时文件的机制。
package test; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class test extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //写cookie String CookieName ="js79"; //若是汉字则需编码 String CookieValue = "yesky";//若是汉字则需编码 Cookie cookie = new Cookie(CookieName,CookieValue); cookie.setMaxAge(age); // age = Integer.MAX_VALUE 永不过期 cookie.setPath("/"); //读cookie String value = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (int i=0; i< cookies.length; i++) { if (cookies[i].getName().equals(CookieName)) value = cookies[i].getValue(); break; } } } response.setContentType("text/html"); OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream()); PrintWriter out = new PrintWriter (response.getOutputStream()); out.println("< html>"); out.println("< head>< title>test< /title>< /head>"); out.println("cookie键:"+CookieName+"< br>"); out.println("cookie值: "+value); out.println("< /body>< /html>"); out.close(); } }
2,session管理
Session在Servlet中是很有用的,它比cookie安全可靠灵活,但是管理起来有点麻烦,用得不好会造成服务器的开销很大,浪费资源。下面是一个基于Session管理一个对象的简单例子。
一个简单的bean对象TestObject
package test; public class TestObject extends Object { int id = 0; public String cur=""; } package test; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class TestMan extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int f = 1; if(request.getParameter("f")!=null) f = Integer.parseInt(request.getParameter("f")); switch(f){ case 1: this.getResult(request,response); break; case 2: this.setSession(request,response); break; } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } public void getResult(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { TestObject testObject = null; testObject = getStatus(request,response); String html = testObject.id; doWrite( response,html); } public void setSession(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); TestObject testObject = null; testObject = getStatus(request,response); String tmp = null; tmp = request.getParameter("id"); if(tmp != null) testObject.id = tmp; session.putValue("testObject ",article); getResult(request,response); } private TestObject getStatus(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); TestObject testObject = null; if(session!=null){ if(session.getValue("testObject ")!=null){ testObject = (TestObject)session.getValue("testObject "); } else{ testObject = new TestObject (); } } else{ testObject = new TestObject (); } return testObject; } private void doWrite(HttpServletResponse response,String html) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println(html); out.close(); } ///////////////////////////////////////////////////////// }
若能轻松搞定上面的例子,相信读者对SERVLET已有了较为深刻的理解。
下面再介绍一个上传文件例子,其中汲及到了下载的免费JavaBean (如有感兴趣的朋友,可来函索要免费JavaBean源代码,Email:js79@yesky.com)
上传基本原理:由页面发出一个http请求,服务端得到请求后,解析多媒体协议,读出文件内容,写文件内容到服务器,所有的这些功能都封装到JavaBean中。
上传文件的必需条件:Browser端< form>表单的ENCTYPE属性值必须为 multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,< input>的type属性必须是file。
package upload; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class UpLoadServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException{ super.init(config); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("< HTML>< HEAD>< TITLE>UpLoad< /TITLE>" +"< meta http-equiv=´Content-Type´ content=´text/html; charset=gb2312´>" +"< /HEAD>" +"< body>"); out.println("< div align=´center´ valign=´top´>" +"< span class=´nava´>请你选择上传的文件(请注意文件大小只能在20K之内)< /span>< BR>" +"< form ENCTYPE=´multipart/form-data´ method=post action=´´>" +"< input type=´file´ name=´file´>" +"< input type=´submit´ value=´发送´>" +"< /form>" +"< /div>"); out.println("< /body>< /html>"); out.close(); } //////// public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); int tmpID = 1; try { MultipartRequest multi = new MultipartRequest(request,"/home/js79/html/", 5 * 1024 * 1024); } catch(Exception e){ tmpID = -1; System.out.println(e); } if(tmpID == 1){ out.println("< HTML>< HEAD>< TITLE>UpLoad< /TITLE>" +"< meta http-equiv=´Content-Type´ content=´text/html; charset=gb2312´>" +"< /HEAD>" +"< body>"); out.println("上传成功!< /body>< /html>"); } else{ out.println("< HTML>< HEAD>< TITLE>UpLoad< /TITLE>" +"< meta http-equiv=´Content-Type´ content=´text/html; charset=gb2312´>" +"< /HEAD>" +"< body>"); out.println("上传不成功!< /body>< /html>"); } out.close(); } }
发表评论
-
IntelliJ IDEA 12 与 Tomcat 集成并运行Web项目
2015-07-18 21:24 546下面分享下我在IDEA上直接把Web项目跑到Tomcat上的 ... -
Java之美[从菜鸟到高手演变]系列之博文阅读导航(转)
2015-07-18 19:22 555随着博文越来越多,为博客添加一个导航很有必要!本博客将相继开 ... -
Java之美[从菜鸟到高手演变]之设计模式(转)
2015-07-18 19:21 663设计模式(Design Patterns) ... -
Myeclipse项目注释设置(转)
2012-07-05 14:32 670. Window --> Java --> Co ... -
POI - Excel复制行
2012-06-18 17:02 12027//感谢老婆 的支持; /** * 复制行 * ... -
java如何导出带有联动下拉框的excel
2011-03-30 15:59 6783利用到jxl,poi也是一种用来处理excel的工具类!只不过 ... -
Eclipse调试常用技巧 - Java综合 - Java - JavaEye论坛 (转载)
2011-03-18 14:50 1004记得刚刚毕业的时候 ... -
Java中如何解析XML文件(转)
2011-03-14 17:23 1365xml文件:"student.xml" ... -
java-oracle-blob对excle进行上传和下载的一些处理
2011-03-09 09:30 14021:首先是创建表 package Excle; impo ...
相关推荐
CTFsession伪造脚本,有解密和加密的,一定要有私钥才能进行。
我的首页:https://xiaopengwei.com 本资源内容 jsp-cookie-session-crud 使用 JSP 实现cookie session验证及增删改查
2020-5-11 Servlet学习---Cookie 2020-5-11 Servlet中的路径 2020-5-11 Servlet学习---Session 2020-5-17 监听器学习 2020-5-17 IDEA中的Maven的简单使用 2020-5-18 JavaWeb学习 2020-5-19 JavaWeb学习 2020-5-21 ...
cookie&sessioncookie;&session;
使用python脚本更改或生成cookie
JavaWeb基础-Cookie和Session的简单使用案例
flask、session、cookie解加密脚本
WEB16_session&cookie。 案例一、记录用户的上次访问时间---cookie 案例二、实现验证码的校验----session。 1.服务器端向客户端发送一个Cookie 1)创建Cookie: Cookie cookie = new Cookie(String cookieName,...
javax.servlet.Filter javax.servlet.Servlet javax.servlet.FilterChain javax.servlet.http.Cookie javax.servlet.FilterConfig javax.servlet.ServletConfig javax.servlet.GenericServlet javax.servlet....
Servlet对Cookie和Session的管理:会话跟踪、会话浏览、过滤器、事件监听、以及不依赖浏览器的后台跟踪和浏览源码。
非常好的课件,供大家学习与交流,讲解了servlet和Cookis,session的基本知识。
几个常见的php类-分页,数据库,session,cookie,上传类
计算机后端-PHP视频教程. php之blog实战47-cookie和session的比较.wmv
计算机后端-PHP视频教程. php之blog实战48-cookie,session面试题.wmv
JavaWeb03-会话跟踪cookie与session.rar JavaWeb04-内置对象与include指令.rar JavaWeb05-购物车.rar JavaWeb06-Servlet.rar JavaWeb07-javaWeb模式.rar JavaWeb08-DBUtil.rar JavaWeb09-EL与JSTL.rar JavaWeb10-...
javaweb cookie session
nestjs-cookie-session NestJS的惯用Cookie会话模块。 建立在之上 :smiling_face_with_sunglasses: 例 注册模块: // app.module.ts import { Module } from '@nestjs/common' ; import { ...
Flask Session Cookie解码器/编码器 原作者: 修复和改进作者: 从导入 依赖 Python 2或Python 3 安装 包 BlackArch Linux # pacman -S flask-session-cookie-manager{3,2} 吉特 ArchLinux 两者python3 etn ...
如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId到cookie,cookie的maxAge设置为-1,...