301重定向技术汇总(转)

301重定向技术:(转自:http://www.jetdown.com/Article/118/Jet_Article_37861_1.html

使用 Response.Redirect "51windows.asp" 转向方法的HTTP Status Code 为302

下面是301转向的代码:

asp:

Response.Status="301 Moved Permanently"

Response.AddHeader "Location", "http://www.51windows.net/"

Response.End

Php:

header("HTTP/1.1 301 Moved Permanently");

header("Location:http://www.51windows.net/);

exit();

ASP.NET:

<script runat="server">

private void Page_Load(object sender, System.EventArgs e)

{

Response.Status = "301 Moved Permanently";

Response.AddHeader("Location","http://www.51windows.net/);

}

</script>

jsp如何实现网页的重定向 (转摘自:http://www.designxf.com/Article/200509/1639.htm)

更新时间:2005-9-22  责任编辑:Jacky  资讯来源:网络采集  阅读次数:63

先锋设计联盟 Http://Www.Designxf.com Http://Www.designunion.cn

1.可以使用:

  response.sendRedirect("http://www.foo.com/path/error.html");

  2.可以手工修改HTTP header的Location属性,如下:

<%

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);

String newLocn = "/newpath/index.html";

response.setHeader("Location",newLocn);

%>

  3.也可以使用forward:

  <jsp:forward page="/newpage.jsp" />

  请注意:只能在任何输出还没有发送到客户端之前使用这种方式。

  5.6 类似global.asa的做法

  在javascript/" target="_blank">JSP中没有global.asa的对应物。但可以有一个workaround来运行。例如,如果你需要存储或存取application scope变量,你总是可以创建一个Javabean,并在页面中需要这些变量的地方将它包含进来。

<jsp:useBean id="globals" scope="application" class="com.xxx.GlobalBean"/>

  但是,也有一些产品具有这样的对应:

  Allaire公司的产品JRun 3.0将提供global.jsa。JRun 2.3.3仍然给予支持,但只对javascript/" target="_blank">JSP 0.92。当JRun 3.0最终推出时它将支持用于javascript/" target="_blank">JSP 1.0和1.1的global.jsa。

  你可以从http://beta.allaire.com/jrun30得到JRun 3.0 beta 5

  另外,Oracle的javascript/" target="_blank">JSP支持globals.jsa。

eclipse 使用心得

昨天捣鼓了一天的eclipse,自我感觉良好,感觉eclipse有点像DELPHI,一切为插件的口号让人激动不已,当然eclipse可以作为C++的IDE,前提是安装c/c++ide插件,具体下载http://www.eclipse.org/downloads/,

ECLIPSE 包括JDT(标准插件)和PDE 插件开发环境,更让人不可思议的是,它居然有完全汉化的版本,就连帮助也是全汉化的,汉化语言包是作为插件安装进入ide的,像我这样外语不好的朋友可以有福了.

不过Language Pack有大约1几个文件,都在http://download.eclipse.org/eclipse/downloads/drops/L-3.1.1_Language_Packs-200510051300/index.php,全都要下载下来,镜像下载点个人感觉台湾的yat-sen大学的快,浙江大学的下载点估计已经关闭了(大陆的就是不行啊),下载后将这些文件解压,每个目录下面都有一个eclipse目录,大家可以之间把它们覆盖到你的eclipse安装目录下.

不过我建议把他们全部复制到一个单独的目录里,然后在eclipse安装目录下建立一个links目录,然后在links目录下建立一个*.link的文本文档,在文档里写入path=C:\\eclipse311\\lag路径(我的语言包是放在C:\eclipse311\lag下的),然后重新打开eclipse,一个几乎全中文的界面就跳出来了.

客户端到服务端,c/s结构,用户验证

java真的很难写啊,用惯了Delphi,C#之类容易调试的编程工具,

没办法一点一点的写吧,

今天又写了个从客户端发送字符串,到服务端验证的代码,刚好把前一次的用户验证类用上,不过做了些修改.

通过这段时间的写代码,渐渐的对java也熟悉些了,速度也慢慢快起来了,自己心中窃喜

附件:talk.rar,3620 bytes

从一段小程序重新认识自己

这次主要是看如果自己现在就开始动手写,最多能够写到哪一步,于是随便找了一个Clock 的代码,一边抄写一边理解,

这是我的学习方法,并不要求全部搞懂,但是每一步所完成的功能要知道,然后对照自己过去的编程经验,期望能够找到自己现在的水平在哪里!

下面是学习过程

import java.applet.*;

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

import java.util.*;

import java.io.*;

import java.awt.geom.*;

import java.awt.image.*;

public class Clock extends Applet implements Runnable, MouseListener,

ActionListener {

//写到这里发现这个Clock居然是Applet的子类,遇到看不明白的当然是手册伺候了,

//翻阅资料发现这个所谓Applet在JDKdom中的介绍为

//"是一种不适合单独运行但可嵌入在其他应用程序中的小程序。"完全看不懂

//而他的定义是public class Applet extends Panel ,^_^居然是Panel的子类

//这样我大概知道了这个Applet应该是一个容器类

//再看这家伙的方法,哇一大堆url,Image一看就是个html像,我心里合计,

//小样!别以为改了名字爷就认不 出你了。

//现在前面看明白了,implements就又有点不了了,决定先放一下,不求甚解从来就是

//本人的优良品德之一。

Image image,image1;

Toolkit tool;

JPanel panel;

Graphics gg;

int width,height,width1,height1;

Thread thread,thread2;

MediaTracker m;

double angel1=0,angel2=0;

int xsec,ysec,xsec2,ysec2,xmin,ymin,xmin2,ymin2,xhou,yhou,xhou2,yhou2;

int c = 0,xstr = 235,ystr = 253;

int y = ystr;

JButton button1 = new JButton();

JButton button2 = new JButton();

JButton button3 = new JButton();

JButton button4 = new JButton();

AudioClip music;

Color colorh = Color.GREEN,colorm= Color.BLACK,colors= Color.YELLOW;

String[] string = new String[5];

int kk = 0;

//上面一大堆罗里吧索的终于结束了

public void init()

{

//等会这个init咋那么眼熟,好像在哪里见过,哦。。。。。

//Applet方法成员之一,立即手册之,

//"由浏览器或 applet viewer 调用,通知此 applet 它已经加载到系统中。"

//看这个意思有点像把主对象容器初始化。

this.setLayout(new BorderLayout());

this.setBackground(Color.BLACK);

tool = getToolkit();

//到这里又看不懂了,怎么getToolkit()既没有对象也没有参数的,这样也可以啊!

//不管了接着看吧

image = tool.getImage("image.PNG");

//看吧PNG网页的东东来了吧

        m = new MediaTracker(this);

        m.addImage(image,0);

        try

        {

        m.waitForID(0);

        }

        catch(Exception e)

        {

        System.out.println(e.getMessage());

        }

//怎么多媒体也出来了,这个倒霉的程序员,没办法手册依旧

//MediaTracker 类是一个跟踪多种媒体对象状态的实用工具类

//要使用媒体跟踪器,需要创建一个 MediaTracker 实例,

//然后对每个要跟踪的图像调用其 addImage 方法。

//另外,还可以为每个图像分配一个惟一的标识符。

//此标识符可控制获取图像的优先级顺序。它还可用于标识可单独等待的惟一图像子集。

//具有较低 ID 的图像比具有较高 ID 的图像优先加载。

//这样后面的都大概看明白了,就是加载了一张图片。

//不由大呼,不愧是JAVA这样简单的操作也搞的如此复杂,偶喜欢。

        width1 = image.getWidth(this);

        height1 = image.getHeight(this);

        width = this.width;

        height = this.height;

//这两句有区别吗?

        this.addMouseListener(this);

//姑且认为是在主容器上添加一个作用于主容器的鼠标事件吧

        button1.setText("时针颜色");

        button1.addActionListener(this);

        button2.setText("分针颜色");

        button2.addActionListener(this);

        button3.setText("秒针颜色");

        button3.addActionListener(this);

        button4.setText("选择皮肤");

        button4.addActionListener(this);

        button1.setBackground(Color.BLACK);

        button1.setForeground(Color.WHITE);

        button2.setBackground(Color.BLACK);

        button2.setForeground(Color.WHITE);

        button3.setBackground(Color.BLACK);

        button3.setForeground(Color.WHITE);

        button4.setBackground(Color.BLACK);

        button4.setForeground(Color.WHITE);

//为什么Color后颜色成员有大小写区分哪?

        JPanel panel = new JPanel();

//手册:JPanel 是一般轻量级容器。不解

        panel.setBackground(Color.BLACK);

        panel.setLayout(new FlowLayout(FlowLayout.CENTER));

        panel.add(button1);

        panel.add(button2);

        panel.add(button3);

        panel.add(button4);

        this.setLayout(new BorderLayout());

        this.add(panel,BorderLayout.SOUTH);

        string[0] = "时间就像海绵里水";

        string[1] = "只要挤总会有的";

        string[2] = "珍惜身边每一个人";

        string[3] = "因为随着岁月流逝,";

        string[4] = "他们将......";

//你不当程序员你还想当诗人啊!

//我有这样想过啊

//省省吧,好好做你这个程序员这么有前途的职业去吧。

        image1 = createImage(getWidth(),getHeight()-35);

//又是一句没头没脑的东西。

        gg = image1.getGraphics();

}

public void start()

{

//亲娘耶,这就开始了?

        if (thread == null)

        {

        thread = new Thread(this);

        thread.start();

        }

        if (thread2 == null)

        {

        thread2 = new Thread(new thread2());

//new一个new的自己??

        thread2.start();

        }

}

public void paint(Graphics g)

{

super.paint(g);

g.drawImage(image1,0,0,this);

Date date = new Date();

int hour = date.getHours();

int min = date.getMinutes();

int sec = date.getSeconds();

String m = Integer.toString(hour)+":"+Integer.toString(min)+":"

  + Integer.toString(sec);

//好像这样也可以 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

//               String m = sdf.format(date);

        double ans = (Math.PI/30)*min;

        double anm = (3.1415926535897931D /30)*min;

        double anh = ((hour +min/60.0)*(2*Math.PI/12));

        xsec2 = 172 + (int) (45 * Math.sin(ans));

        ysec2 = 165 - (int) (45 * Math.cos(ans));

        xsec = 172 - (int) (13 * Math.sin(ans));

        ysec = 165 + (int) (13 * Math.cos(ans));

        xmin2 = 172 + (int) (40 * Math.sin(anm));

        ymin2 = 165 - (int) (40 * Math.cos(anm));

        xmin = 172 - (int) (10 * Math.sin(anm));

        ymin = 165 + (int) (10 * Math.cos(anm));

        xhou = 172 + (int) (30 * Math.sin(anh));

        yhou = 165 - (int) (30 * Math.cos(anh));

        xhou2 = 172 - (int) (10 * Math.sin(anh));

        yhou2 = 165 + (int) (10 * Math.cos(anh));

        g.setColor(colors); //秒针

        g.drawLine(xsec, ysec, xsec2, ysec2);

        g.setColor(colorm); //分针

        g.drawLine(xmin, ymin, xmin2, ymin2);

        g.setColor(colorh); //时针

        g.drawLine(xhou2, yhou2, xhou, yhou);

        g.setColor(Color.RED);

    g.fillOval(169,162,9,9);

    g.drawString(m,150,100);

    g.setColor(Color.RED);

    g.drawString(string[0], xstr, y);

        g.drawString(string[1], xstr, y + 20);

        g.drawString(string[2], xstr, y + 40);

        g.drawString(string[3], xstr, y + 60);

        g.drawString(string[4], xstr, y + 80);

}

public void update(Graphics g)

{

paint(g);

}

/**

* Method main

*

*

* @param args

*

*/

public static void main(String[] args) {

// TODO: Add your code here

}

/**

* Method run

*

*

*/

public void run() {

// TODO: Add your code here

while (true)

//这个true在这里有意义吗?

{

try

{

thread.sleep(1000);

gg.setColor(Color.WHITE);

gg.fillRect(0,0,width,height);

gg.drawImage(image,110,110,width1,height1,this);

repaint();

}

catch (Exception e)

{

System.out.print(e.getMessage());

}

}

}

    private class thread2 implements Runnable

    {

//前面已经有个thread2了,这里有冒出来一个,而且是Runnable接口

//前面那个thread2是Thread类

//难道纯属于该程序员在练习两种线程的创建方法吗?这个问题先放一放

    public void run()

    {

    while (true)

    {

    try

    {

    thread2.sleep(1000);

    }

    catch(Exception e)

    {

    }

    y--;

    if (y<=5)

    {

    y=ystr;

    }

    repaint();

    }

    }

    }

//一堆鼠标事件

public void mouseClicked(MouseEvent e) {

// TODO: Add your code here

System.out.print(e.getX());

        System.out.print(e.getY());

}

public void mousePressed(MouseEvent e) {

// TODO: Add your code here

}

public void mouseReleased(MouseEvent e) {

// TODO: Add your code here

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void fileSelect()

{

JFileChooser choose = new JFileChooser();

//为用户选择文件提供了一种简单的机制

choose.setFileSelectionMode(JFileChooser.FILES_ONLY);

choose.setCurrentDirectory(new File("."));

//new File(".")?????????

        choose.setFileFilter(new javax.swing.filechooser.FileFilter()

        {

        public boolean accept(File file)

        {

        String name = file.getName().toLowerCase();

        return name.endsWith(".gif")||name.endsWith(".jpg")

        ||name.endsWith(".jpeg")||file.isDirectory();

        }

        public String getDescription()

        {

        return "图片文件";

        }

        });

//这里看起来java程序的组件应该全都是动态创建的了。难怪很难写。

        int result = choose.showOpenDialog(this);

        String name = null;

        if(result == JFileChooser.APPROVE_OPTION)

        {

        name = choose.getSelectedFile().getAbsolutePath();

        }

        image = tool.getImage(name);

        m.addImage(image,0);

        try{

        m.waitForAll();

        } catch (Exception e){

        System.out.print(e.getMessage());

        }

}

public void actionPerformed(ActionEvent e) {

// TODO: Add your code here

   if(e.getSource() == button1||e.getSource()==button2||e.getSource() ==button3){

   JColorChooser Choose = new JColorChooser();

   }

}

}

写到这里,机器中病毒了,而且自己也觉得没必要再继续写下去了

所有看不懂的一概跳过,最后发现还是从头学比较好

JAVA IDE之烦恼

   在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择。

    颠来倒去最后在我的那台破电脑上折腾的一个晚上,最后JBUILDER、ECLIPSE和JCREATOR,当然当然还是有JDK的。

    JBUILDER大名鼎鼎的宝兰德公司出品,JBUILDER我的新欢,DILPHI我的最爱;但愿别给你忠实的粉丝下马威了

    ECLIPSE著名开源IDE工具,就冲它开源的模式也要弄上一弄,不过好像上手蛮难的。

    JCREATOR似乎平平无奇,但是编程界面很舒服,而且看起来就比较好用,缺点嘛,还不是很清楚。

    那位大大有空可以帮偶参考一下下