分享
 
 
 

几个实用的Servlet应用例子-入门、cookie、session及上传文件

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

Servlet可以被认为是服务端的applet,它被WEB服务器加载和执行,前端可以显示页面和获得页面数据,后台可以操纵数据库,能完成JavaBean的很多功能。在这里我较为具体的说说Servlet在Cookie,Session和上传文件上的应用,在说明时我给出一些能编绎运行的小例子,最后给出一个文件上传例子以加深印象。

我们先来看看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();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有