2013年2月26日 星期二

第一隻 JSP





如要將請求轉發另一JSP 頁面處理,可使用標準頁籤<jsp:forward>,例如:jsp:forward page="sayYes.jsp">, 目前頁面會生成一個servlet,sayYes 即為一個Servlet。
Response的職責將被指派給被forward的對象。如果要傳遞參數時可以搭配<jsp:param >動作元素指定參數給被forward的對象。forward的對象回應之後,執行流程會回到原頁面,你可以再進行一些陳述執行,不過無法再作任何回應







2013年2月24日 星期日

開啟Eclipse 出現 Fail to create the Java Virtual Machine





開啟Eclipse 出現 Fail to create the Java Virtual Machine。



爬文之後發現問題出現在Eclipse.ini 檔中的


-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120522-1813
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms40m
-Xmx512m

將256 M改為128 M 即可正常啟動

2013年2月19日 星期二

Web 伺服器和Tomcat

一般所謂的Web 伺服器,是指一種軟體。管理Servlet /JSP 並不屬於Web 伺服器的權責,而是交由Web 容器(亦稱為Servlet/JSP )容器。當Web 伺服器收到用戶端瀏覽器的請求時,將其轉發給Web 容器,Web 容器呼叫對應的Servlet 回應請求,Web伺服器再將Web 容器的回應發送給用戶端瀏覽器。

2013年2月2日 星期六

Web 控制項 避免重複觸發 Button



1.
屬性中 OnClientClick 設定 disabled=true;this.form1.submit();
UseSubmitBehavious=false,將產生下列的_doPostBack











執行結果


2.或者可以在Code Behind 程式碼中加上


/* Sensor 代表觸動事件來源物件,e為傳遞給該事件的額外描述
在畫面上的點選動作,可用e來擷取

*/
 protected void Button1_Click(object sender, EventArgs e)
    {
        Button1.Enabled = false;
    }


ASP .NET Web 控制項(TextView)



在工具列拉一個TextBox 的控制元件,放到HTML 中








修改屬性中的AutoPostBack 設為true,當滑鼠移到其他控制項時,會自動執行送出的動作。




選擇屬性中的事件(閃電符號),選取TextChanged 事件 TextBox1_TextChange



TextBox.aspx






<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TextBox.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <!-- 控制項一定要放在FORM 內
    
    -->
    <form id="form1" runat="server">
    <div>
    
       欄位1: 
        <asp:TextBox ID="TextBox1" runat="server" 
        AutoPostBack="True" ontextchanged="TextBox1_TextChanged" 
            ></asp:TextBox>
            <!-- 設定AutoPostBack="True",當滑鼠移到其他控制項時,
            會自動執行送出的動作
            -->
        <br />
       欄位2: <asp:TextBox ID="TextBox2" runat="server" 
            ontextchanged="TextBox2_TextChanged1"></asp:TextBox>
    
    </div>
    </form>
</body>
</html>



=================================================================
後置程式碼的部分


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    //ASP.NET 程式中最早被執行的 
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Page_Load");
    }
    protected void TextBox2_TextChanged(object sender, EventArgs e)
    {

    }
    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        Response.Write("TextChanged 被觸發");
    }
    protected void TextBox2_TextChanged1(object sender, EventArgs e)
    {

    }
}



執行結果

Key 上aaa 滑鼠移到其他地方時




2013年1月31日 星期四

MyFirstServlet


這個Servlet 擴充了HttpServlet 類別,並改寫繼承的doGet()方法,當伺服器收到送往這Servlet的Get Request 時,伺服器便會呼叫 doGet(),並傳入一個HttpServletRequest 物件和HttpServletResponse物件。

HttpServletRequest 物件代表client提出的申請,讓servlet 得到client的資訊
request的參數。HttpServletResponse 物件代表Servlet 要回傳給client的回覆
,內容可以是各種型態,但必須在response中註明是何種type。在此程式中先用setContenType 方法將內容型態定義為"text/html"

在NetBeans中的使用方式如下


=============================================================


import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class HelloWorld extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet HelloWorld</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet HelloWorld at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request
            , HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out=response.getWriter();
        out.println("<HTML>");
        out.println("<HEAD><TITLE>hello World</TITLE></HEAD>");
        out.println("<BODY>");
        out.println("<Big>Hello World11</Big>");
        out.println("</BODY></html>");
//        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

2013年1月29日 星期二

淺談setDefaultCloseOperation() 的四個參數


java Swing 開發視窗 , 當你在點下視窗上 X 按鍵時 ,





會關閉視覺化的視窗 ,但如未設定視窗跳出的方法(system.exit) ,所關閉的程序還是會一直存在記憶体中無法消去

此時可以使用此方法 setDefaultCloseOperation(int operation)

在參數(int operation) 中 有四個參數可以選擇, 也可填入相對應的數字 


1.將X退出鍵 設為失效 , 也就是使點擊後無效 , 不起作用。
  setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
 =setDefaultCloseOperation(0);



2.點擊退出時,只是將視覺化的介面(HIDE),實際程序還是在後台執行(記憶体未釋放)
setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE );
 =setDefaultCloseOperation(1);


3.先退出介面等待處理后再釋放記憶体
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOS);
 =setDefaultCloseOperation(2);

4.直接退出介面並釋放記憶体
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 =setDefaultCloseOperation(3);