??xml version="1.0" encoding="utf-8" standalone="yes"?>五月天久久久,欧美一区二区精品久久911,国产精品久久久久秋霞鲁丝http://www.aygfsteel.com/youngturk/category/51783.htmlThe world is a fine place , and worth fighting for it.zh-cnMon, 15 Jul 2013 10:34:04 GMTMon, 15 Jul 2013 10:34:04 GMT60直接讉K后台Q蟩qfilterqo?AuthorizationFilter.javaQfilter为特定权限过滤器http://www.aygfsteel.com/youngturk/archive/2013/07/12/401496.htmlyoungturkyoungturkFri, 12 Jul 2013 05:15:00 GMThttp://www.aygfsteel.com/youngturk/archive/2013/07/12/401496.htmlhttp://www.aygfsteel.com/youngturk/comments/401496.htmlhttp://www.aygfsteel.com/youngturk/archive/2013/07/12/401496.html#Feedback0http://www.aygfsteel.com/youngturk/comments/commentRss/401496.htmlhttp://www.aygfsteel.com/youngturk/services/trackbacks/401496.htmlweb.xml
<filter>
        
<filter-name>AuthorizationFilter</filter-name>
        
<filter-class>com.cenin.util.filter.AuthorizationFilter</filter-class>
    
</filter>
<filter-mapping>
        
<filter-name>AuthorizationFilter</filter-name>
        
<url-pattern>/*</url-pattern>
    </filter-mapping>
AuthorizationFilter.java
public class AuthorizationFilter implements Filter
{

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
    {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        HttpSession session = request.getSession();

        String servletPath = request.getServletPath();//获得如: /baseinfo/codeBillTypeList.action

        Object user = session.getAttribute(Config.getConfig().getSessionUser());

        //判断权限
        boolean passed = true;


        /*if(user == null && (servletPath.indexOf("action")>=0 )){
            passed = false;
            String[] noLimit = Config.getConfig().getNoFilter().split(";");
            for(int i=0;i<noLimit.length;i++){
                if(servletPath.matches(noLimit[i])){
                    System.out.println(servletPath + "  " + noLimit[i]);
                    passed = true;
                    break;
                }
            }
        }
*/

        request.getRequestDispatcher(servletPath).forward(request, response);
//控制struts or xwork跌{

//        if(passed)
//            chain.doFilter(request, response);
//        else
//        {
//            String modelType = request.getParameter("model.bmoduleType");
//            String particalUrl = request.getParameter("particalUrl");
//            session.setAttribute("model.bmoduleType", modelType);
//            session.setAttribute("particalUrl", particalUrl);
//            String url = Config.getConfig().getPageLogin();
//            RequestDispatcher dispatcher = request.getRequestDispatcher(url);
//            dispatcher.forward(request, response);
//        }
    }
    
public void init(FilterConfig filterConfig) throws ServletException
    
{

    }

    
public void destroy()
    
{

    }


}
xwork.xmld
<include file="xwork-onlinehall.xml"/>
xwork
-onlinehall.xml文g内容Q?br /><package name="onlinehall" extends="cenin" namespace="/onlinehall" externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver">
<action name="myOrderLoadList" class="com.cenin.web.action.onlinehall.MyOrderAction" method="myOrderLoadList">
            
<result name="success" type="freemarker">/onlinehall/myOrder.ftl</result>
        
</action>   
</package>
MyOrder.java内容
public class MyOrderAction extends BaseActionSupport {
public String myOrderLoadList() throws Exception {}
}


youngturk 2013-07-12 13:15 发表评论
]]>
XML解析SAXhttp://www.aygfsteel.com/youngturk/archive/2013/07/10/401405.htmlyoungturkyoungturkWed, 10 Jul 2013 07:03:00 GMThttp://www.aygfsteel.com/youngturk/archive/2013/07/10/401405.htmlhttp://www.aygfsteel.com/youngturk/comments/401405.htmlhttp://www.aygfsteel.com/youngturk/archive/2013/07/10/401405.html#Feedback0http://www.aygfsteel.com/youngturk/comments/commentRss/401405.htmlhttp://www.aygfsteel.com/youngturk/services/trackbacks/401405.htmlpublic List xmlElements(String xmlDoc) {
        
//创徏一个新的字W串
        StringReader read = new StringReader(xmlDoc);
        
//创徏新的输入源SAX 解析器将使用 InputSource 对象来确定如何读?nbsp;XML 输入
        InputSource source = new InputSource(read);
        
//创徏一个新的SAXBuilder
        SAXBuilder sb = new SAXBuilder();
        List list 
= new ArrayList();
        
try {
            
//通过输入源构造一个Document
            Document doc = sb.build(source);
            
//取的根元?/span>
            Element root = doc.getRootElement();
            System.out.println(root.getName());
//输出根元素的名称Q测试)
            
//得到根元素所有子元素的集?/span>
            List jiedian = root.getChildren();
            
//获得XML中的命名I间QXML中未定义可不写)
            Namespace ns = root.getNamespace();
            Element et 
= null;
            DataModel dataModel 
= new DataModel();
            Collections c ;
            Ctnfee ctnfee 
= null;
            
for(int i=0;i<jiedian.size();i++){
                et 
= (Element) jiedian.get(i);//循环依次得到子元?/span>
                ctnfee = new Ctnfee();
                
/**//*
                 * 无命名空间定义时
                 * et.getChild("users_id").getText();
                 * et.getChild("users_address",ns).getText()
                 
*/

                
/*System.out.println(et.getChild("users_id",ns).getText());
                System.out.println(et.getChild("users_address",ns).getText());
*/

                System.out.println(et.getChild(
"p_id",ns).getText());
                System.out.println(et.getChild(
"ctnno",ns).getText());
                ctnfee.setP_id(et.getChild(
"p_id",ns).getText());
                ctnfee.setCtnno(et.getChild(
"ctnno",ns).getText());
                ctnfee.setFee_type(et.getChild(
"fee_type",ns).getText());
                ctnfee.setStart_time(et.getChild(
"start_time",ns).getText());
                ctnfee.setEnd_time(et.getChild(
"end_time",ns).getText());
                ctnfee.setFee(Double.parseDouble(et.getChild(
"fee",ns).getText()));
                ctnfee.setFee_count(Double.parseDouble(et.getChild(
"fee_count",ns).getText()));
                ctnfee.setCpid(et.getChild(
"cpid",ns).getText());
                ctnfee.setFee_name(et.getChild(
"fee_name",ns).getText());
                ctnfee.setFee_rate_id(Double.parseDouble(et.getChild(
"fee_rate_id",ns).getText()));
                ctnfee.setJffs(et.getChild(
"jffs",ns).getText());
                ctnfee.setIf_hand(et.getChild(
"if_hand",ns).getText());
                ctnfee.setSfid(et.getChild(
"sfid",ns).getText());
                ctnfee.setWt_company(et.getChild(
"wt_company",ns).getText());
                ctnfee.setOpid(et.getChild(
"opid",ns).getText());
                ctnfee.setCy(et.getChild(
"cy",ns).getText());
                ctnfee.setIf_bf(et.getChild(
"if_bf",ns).getText());
                ctnfee.setDays_count(et.getChild(
"days_count",ns).getText());
                ctnfee.setIf_collect(Double.parseDouble(et.getChild(
"if_collect",ns).getText()));
                ctnfee.setIf_dd(et.getChild(
"if_dd",ns).getText());
                ctnfee.setDd_fee_name(et.getChild(
"dd_fee_name",ns).getText());
                ctnfee.setSpec_sign(et.getChild(
"spec_sign",ns).getText());
                
                list.add(ctnfee);
                counttotal 
= counttotal +Double.parseDouble(et.getChild("fee_count",ns).getText());
            }

            
/**//*
             * 如要?lt;row>下的子元素的名称
             
*/

            et 
= (Element) jiedian.get(0);
            List zjiedian 
= et.getChildren();
            
for(int j=0;j<zjiedian.size();j++){
                Element xet 
= (Element) zjiedian.get(j);
                System.out.println(xet.getName());
            }

        }
 catch (JDOMException e) {
            
// TODO 自动生成 catch ?/span>
            e.printStackTrace();
        }
 catch (IOException e) {
            
// TODO 自动生成 catch ?/span>
            e.printStackTrace();
        }

        
return list;
    }


youngturk 2013-07-10 15:03 发表评论
]]>
web面索数据库中的字段是ؕ码问?/title><link>http://www.aygfsteel.com/youngturk/archive/2013/05/03/398720.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Fri, 03 May 2013 02:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/youngturk/archive/2013/05/03/398720.html</guid><wfw:comment>http://www.aygfsteel.com/youngturk/comments/398720.html</wfw:comment><comments>http://www.aygfsteel.com/youngturk/archive/2013/05/03/398720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/youngturk/comments/commentRss/398720.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/youngturk/services/trackbacks/398720.html</trackback:ping><description><![CDATA[this.databaseEncoding = "GBK";<br />//  this.databaseEncoding = "ISO8859-1";<br />  this.platformEncoding = "GBK";<br /><br />获得数据库字W时候需要{?img src ="http://www.aygfsteel.com/youngturk/aggbug/398720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/youngturk/" target="_blank">youngturk</a> 2013-05-03 10:33 <a href="http://www.aygfsteel.com/youngturk/archive/2013/05/03/398720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA解析XML格式字符?/title><link>http://www.aygfsteel.com/youngturk/archive/2013/04/08/397540.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Mon, 08 Apr 2013 09:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/youngturk/archive/2013/04/08/397540.html</guid><wfw:comment>http://www.aygfsteel.com/youngturk/comments/397540.html</wfw:comment><comments>http://www.aygfsteel.com/youngturk/archive/2013/04/08/397540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/youngturk/comments/commentRss/397540.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/youngturk/services/trackbacks/397540.html</trackback:ping><description><![CDATA[<p>import java.io.IOException;<br />import java.io.StringReader;<br />import java.util.List;</p> <p>import org.jdom.Document;<br />import org.jdom.Element;<br />import org.jdom.JDOMException;<br />import org.jdom.Namespace;<br />import org.jdom.input.SAXBuilder;<br />import org.xml.sax.InputSource;</p> <p>public class TestXML {<br />    public List xmlElements(String xmlDoc) {<br />        //创徏一个新的字W串<br />        StringReader read = new StringReader(xmlDoc);<br />        //创徏新的输入源SAX 解析器将使用 InputSource 对象来确定如何读?XML 输入<br />        InputSource source = new InputSource(read);<br />        //创徏一个新的SAXBuilder<br />        SAXBuilder sb = new SAXBuilder();<br />        try {<br />            //通过输入源构造一个Document<br />            Document doc = sb.build(source);<br />            //取的根元?br />            Element root = doc.getRootElement();<br />            System.out.println(root.getName());//输出根元素的名称Q测试)<br />            //得到根元素所有子元素的集?br />            List jiedian = root.getChildren();<br />            //获得XML中的命名I间QXML中未定义可不写)<br />            Namespace ns = root.getNamespace();<br />            Element et = null;<br />            for(int i=0;i<jiedian.size();i++){<br />                et = (Element) jiedian.get(i);//循环依次得到子元?br />                /**//*<br />                 * 无命名空间定义时<br />                 * et.getChild("users_id").getText();<br />                 * et.getChild("users_address",ns).getText()<br />                 */<br />                /*System.out.println(et.getChild("users_id",ns).getText());<br />                System.out.println(et.getChild("users_address",ns).getText());*/<br />                System.out.println(et.getChild("p_id",ns).getText());<br />                System.out.println(et.getChild("ctnno",ns).getText());<br />            }<br />            /**//*<br />             * 如要?lt;row>下的子元素的名称<br />             */<br />            et = (Element) jiedian.get(0);<br />            List zjiedian = et.getChildren();<br />            for(int j=0;j<zjiedian.size();j++){<br />                Element xet = (Element) zjiedian.get(j);<br />                System.out.println(xet.getName());<br />            }<br />        } catch (JDOMException e) {<br />            // TODO 自动生成 catch ?br />            e.printStackTrace();<br />        } catch (IOException e) {<br />            // TODO 自动生成 catch ?br />            e.printStackTrace();<br />        }<br />        return null;<br />    }<br />    public static void main(String[] args){<br />     TestXML doc = new TestXML();<br />        String xml = "<?xml version=\"1.0\" encoding=\"gb2312\"?>"+<br />        "<Result xmlns=\"<a +<br />           "<row resultcount=\"1\">"+<br />              "<users_id>1001     </users_id>"+<br />              "<users_name>wangwei   </users_name>"+<br />              "<users_group>80        </users_group>"+<br />              "<users_address>1001?nbsp;  </users_address>"+<br />           "</row>"+<br />           "<row resultcount=\"1\">"+<br />              "<users_id>1002     </users_id>"+<br />              "<users_name>wangwei   </users_name>"+<br />              "<users_group>80        </users_group>"+<br />              "<users_address>1002?nbsp;  </users_address>"+<br />           "</row>"+<br />        "</Result>";<br />        String xml1 = "<?xml version=\"1.0\" encoding=\"UTF-16LE\" standalone=\"no\"?>" +<br />          "<d_fsgl_fee_count_for_xml>" +<br />          "  <d_fsgl_fee_count_for_xml_row>" +<br />          "  <p_id>JD1302130002</p_id>" +<br />          "  <ctnno>CXDU1499549</ctnno>" +<br />          "  <fee_type>?lt;/fee_type>" +<br />          "  <start_time>2013-02-09 00:00:00</start_time>" +<br />          "  <end_time>2013-02-13 00:00:00</end_time>" +<br />          "  <fee>4</fee>" +<br />          "  <fee_count>16</fee_count>" +<br />          "  <cpid></cpid>" +<br />          "  <fee_name>堆存?lt;/fee_name>" +<br />          "  <fee_rate_id></fee_rate_id>" +<br />          "  <jffs>1</jffs>" +<br />          "  <if_hand>0</if_hand>" +<br />          "  <sfid>FDZT1302180104</sfid>" +<br />          "  <wt_company>QT</wt_company>" +<br />          "  <opid>928</opid>" +<br />          "  <cy>D</cy>" +<br />          "  <if_bf></if_bf>" +<br />          "  <days_count>4</days_count>" +<br />          "  <if_collect>1</if_collect>" +<br />          "  <if_dd></if_dd>" +<br />          "  <dd_fee_name></dd_fee_name>" +<br />          "  <spec_sign>五洲代垫</spec_sign>" +<br />          " </d_fsgl_fee_count_for_xml_row>" +<br />          " <d_fsgl_fee_count_for_xml_row>" +<br />          "  <p_id>JD1302130002</p_id>" +<br />          "  <ctnno>CXDU1499549</ctnno>" +<br />          "  <fee_type>?lt;/fee_type>" +<br />          "  <start_time>2013-02-13 00:00:00</start_time>" +<br />          "  <end_time>2013-02-20 00:00:00</end_time>" +<br />          "  <fee>4</fee>" +<br />          "  <fee_count>32</fee_count>" +<br />          "  <cpid></cpid>" +<br />          "  <fee_name>堆存?lt;/fee_name>" +<br />          "  <fee_rate_id>67</fee_rate_id>" +<br />          "  <jffs>1</jffs>" +<br />          "  <if_hand>0</if_hand>" +<br />          "  <sfid>FDZT1302180104</sfid>" +<br />          "  <wt_company>QT</wt_company>" +<br />          "  <opid>928</opid>" +<br />          "  <cy>D</cy>" +<br />          "  <if_bf></if_bf>" +<br />          "  <days_count>8</days_count>" +<br />          "  <if_collect>1</if_collect>" +<br />          "  <if_dd></if_dd>" +<br />          "  <dd_fee_name></dd_fee_name>" +<br />          "  <spec_sign></spec_sign>" +<br />          " </d_fsgl_fee_count_for_xml_row>"  +<br />          "</d_fsgl_fee_count_for_xml>";<br />        doc.xmlElements(xml1);<br />    }<br />}</p> <p> </p><img src ="http://www.aygfsteel.com/youngturk/aggbug/397540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/youngturk/" target="_blank">youngturk</a> 2013-04-08 17:20 <a href="http://www.aygfsteel.com/youngturk/archive/2013/04/08/397540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsdXML文g JSdXML文ghttp://www.aygfsteel.com/youngturk/archive/2012/11/09/391095.htmlyoungturkyoungturkFri, 09 Nov 2012 07:21:00 GMThttp://www.aygfsteel.com/youngturk/archive/2012/11/09/391095.htmlhttp://www.aygfsteel.com/youngturk/comments/391095.htmlhttp://www.aygfsteel.com/youngturk/archive/2012/11/09/391095.html#Feedback0http://www.aygfsteel.com/youngturk/comments/commentRss/391095.htmlhttp://www.aygfsteel.com/youngturk/services/trackbacks/391095.htmlJavaScript

<script type="text/javascript">
    //<![CDATA[
    //嵌入CDATAD可以防止不兼容Javacript的浏览器不生错误信?br />    //增加正则表达?span class="Apple-converted-space"> 
    String.prototype.getQueryString = function(name) {
        var reg = new RegExp("(^|&|\\?)" + name + "=([^&]*)(&|$)"), r;
        if (r = this.match(reg)) return unescape(r[2]);
        return null;
    };
    var address = location.search.getQueryString("address"); //通过表达式获得传递参?br />    //针对两种览器,分别获取xmlDocument对象// dXML文g   
    function loadXML(xmlFile) {
        var xmlDoc;
        if (window.ActiveXObject) {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.load(xmlFile);
        }
        else if (document.implementation && document.implementation.createDocument) {
            xmlDoc = document.implementation.createDocument("", "", null);
            xmlDoc.async = false;
            xmlDoc.load(xmlFile);
        } else {
            alert('您的览器不支持该系l脚本!');
        }
        return xmlDoc;
    }   
    //调用地图
    var map; //全局GMap GOOGLE 地图 API
    function load() {
        if (GBrowserIsCompatible()) //查浏览器兼容?br />        {
            map = new GMap2(document.getElementById("map")); //地图加栽到ID为map的DIV中?br />            map.addControl(new GSmallMapControl());   //dGcontrol控g//攑֤~小的那?br />            map.setCenter(new GLatLng(26.577014, 104.877977), 15); //讄地图中心
            //创徏多个坐标点(从INFO.XML文g中读取)
            var xmlDoc = loadXML("Info.xml"); 
            var members = xmlDoc.getElementsByTagName("number");
            var maxRes = members.length;
            for (var i = 0; i <= maxRes; i++) {                       //XML中记录了多个坐标点,要每个点都标C?br />                var oName = members[i].getElementsByTagName("name");
                var oLongitude = members[i].getElementsByTagName("Longitude");
                var oLatitude = members[i].getElementsByTagName("Latitude");

                var name = oName[0].firstChild.nodeValue
                var Longitude = oLongitude[0].firstChild.nodeValue
                var Latitude = oLatitude[0].firstChild.nodeValue        
                
                var marker = new GMarker(new GLatLng(Longitude, Latitude), { title: name });     //Ҏ个点d标记
                marker.openInfoWindowHtml("<div style=line-height:20px;text-align:center;font-size:12px;'><a href=Left.aspx?info=" + name + " target=framLeft>" + name + ",点击查看信息</a></div>"); 
                map.addOverlay(marker);
            }
        }
    }
    //]]>
</script>

XML文g

<?xml version="1.0" encoding="GB2312"?>   
<earth>   
<number id='1'>    
<name>213211212213213</name>   
<Longitude>26.577014</Longitude>   
<Latitude>104.877977</Latitude></number>   
<number id='2'>    
<name>112312332131212</name>   
<Longitude>26.586685</Longitude>   
<Latitude>104.863815</Latitude></number>   
<number id='3'>    
<name>123123121323112</name>   
<Longitude>26.572101</Longitude>   
<Latitude>104.866905</Latitude></number>   
<number id='4'>    
<name>123132123123321</name>   
<Longitude>26.572254</Longitude>   
<Latitude>104.891624</Latitude></number>   
</earth>

youngturk 2012-11-09 15:21 发表评论
]]>
Tomcat5.0q接池配|(oracle / mysql / sqlserver2000Q?/title><link>http://www.aygfsteel.com/youngturk/archive/2012/11/07/390915.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Wed, 07 Nov 2012 01:37:00 GMT</pubDate><guid>http://www.aygfsteel.com/youngturk/archive/2012/11/07/390915.html</guid><wfw:comment>http://www.aygfsteel.com/youngturk/comments/390915.html</wfw:comment><comments>http://www.aygfsteel.com/youngturk/archive/2012/11/07/390915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/youngturk/comments/commentRss/390915.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/youngturk/services/trackbacks/390915.html</trackback:ping><description><![CDATA[<p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">配置一QXMLҎ</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1、下载proxool 地址Qhttp://proxool.sourceforge.net<br />    2、解压羃proxool-0.9.0RC2.zipQ拷贝lib/proxool-0.9.0RC2.jar到web-info/lib<br />       拯jdbc驱动到web-info/lib<br />    3、在web-info下徏立文Ӟproxool.xml<br />     文g内容如下Q?br /><?xml version="1.0" encoding="UTF-8"?><br /><something-else-entirely><br />  <proxool><br />    <alias><span style="color: rgb(255,0,0)">Develop</span></alias><br />    <driver-url>jdbc:oracle:thin:@192.168.100.18:1521:RNMS</driver-url><br />    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class><br />    <driver-properties><br />      <property name="user" value="scmlp"/><br />      <property name="password"  value="scmlpscmlp"/><br />    </driver-properties><br />    <maximum-connection-count>500</maximum-connection-count><br />    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql><br />  </proxool><br /></something-else-entirely><br /><br />    4、在web.xml文g内加入以下内容:<br /><br /><servlet><br />     <servlet-name>proxoolServletConfigurator</servlet-name><br /> <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class><br />     <init-param><br />       <param-name>xmlFile</param-name><br />       <param-value>WEB-INF/proxool.xml</param-value><br />     </init-param><br />     <load-on-startup>1</load-on-startup><br />   </servlet><br /><!-- proxool提供的管理监控工P可查看当前数据库q接情况。如果运行不成功Q请删除本行 --><br />   <servlet><br />    <servlet-name>Admin</servlet-name><br />      <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class><br />   </servlet><br />   <servlet-mapping><br />    <servlet-name>Admin</servlet-name><br />    <url-pattern>/admin</url-pattern><br />   </servlet-mapping><br /><br />     5、在调用数据库连接代码:<br />       Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");<br />       Connection conn = DriverManager.getConnection("proxool.<span style="color: rgb(255,0,0)">Develop</span>");<br /><br />     6、利用proxool监控工具查看数据库运行状态。地址Q?/admin</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">配置二:propertiesҎ</p> <p style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 14px/26px Arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1Q下载proxool-0.8.3.jarq放到相应的目录Q这个应该比较简单了  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />  2Q写一个配|文件放到web-inf目录下,配置文g内容如下Q? <span id="wmqeeuq" class="Apple-converted-space"> </span><br />        jdbc-0.proxool.alias=bidding  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />        jdbc-0.proxool.driver-url=jjdbc:oracle:thin:@127.0.0.1:1521:dbname  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />        jdbc-0.proxool.driver-class=oracle.jdbc.driver.oracledriver  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />        jdbc-0.user=name  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />        jdbc-0.password=pass  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />        jdbc-0.proxool.maximum-connection-count=200  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />        jdbc-0.proxool.house-keeping-test-sql=select   *  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />  3Q在web-inf/web.xml中添加如下代码:  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />        <servlet>  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            <servlet-name>servletconfigurator</servlet-name>  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            <servlet-lass>org.logicalcobwebs.proxool.configuration.servletconfigurator</servlet-class>  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            <init-param>  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            <param-name>propertyfile</param-name>  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            <param-value>web-inf/proxool.properties</param-value>  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            </init-param>  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            <load-on-startup>1</load-on-startup>  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />          </servlet>    <span id="wmqeeuq" class="Apple-converted-space"> </span><br />  4Q配|就q么单,下面l你一D|么得到一个连接代码,其他的应该就比较单了  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            public   connection   getconnection()   {  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            try   {    <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            conn   =   drivermanager.getconnection("proxool.bidding");  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            }catch(sqlexception   ex){  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            ex.printstacktrace();            <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            }   finally   {  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            try   {            <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            if   (conn   !=   null)   {  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            conn.close();  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            }  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            }   catch   (sqlexception   e)   {  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            e.printstacktrace();  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            log("problem   closing   connection");  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            }  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            }    <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            return   conn;  <span id="wmqeeuq" class="Apple-converted-space"> </span><br />            }         <br /></p><img src ="http://www.aygfsteel.com/youngturk/aggbug/390915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/youngturk/" target="_blank">youngturk</a> 2012-11-07 09:37 <a href="http://www.aygfsteel.com/youngturk/archive/2012/11/07/390915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发布wsdl时候,发布名字不能跟工厂调用bean的名字一样否则报错,什么原因不?.http://www.aygfsteel.com/youngturk/archive/2012/09/01/386760.htmlyoungturkyoungturkSat, 01 Sep 2012 10:15:00 GMThttp://www.aygfsteel.com/youngturk/archive/2012/09/01/386760.htmlhttp://www.aygfsteel.com/youngturk/comments/386760.htmlhttp://www.aygfsteel.com/youngturk/archive/2012/09/01/386760.html#Feedback0http://www.aygfsteel.com/youngturk/comments/commentRss/386760.htmlhttp://www.aygfsteel.com/youngturk/services/trackbacks/386760.html发布wsdlQ?br />@WebService(endpointInterface = "cn.itcast.serviceWSDL.UserServiceWSDL",
serviceName = "userinfoService",targetNamespace="impl.serviceWSDL.itcast.cn")
//@Transactional
public class UserServiceWSDLBean implements UserServiceWSDL {

在调用userService = (UserService)BeanFactory.getBean("userService");
U色字体名字不能与applicationContext中id的名字一_否则报错 找不到cn.itcast.service.impl.UserServiceBean
<bean id="userService" class="cn.itcast.service.impl.UserServiceBean">
  <property name="dataSource" ref="dataSource"/>
 </bean>

youngturk 2012-09-01 18:15 发表评论
]]>
使用accepter遍历所有XML子元?/title><link>http://www.aygfsteel.com/youngturk/archive/2012/06/14/380817.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 14 Jun 2012 14:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/youngturk/archive/2012/06/14/380817.html</guid><wfw:comment>http://www.aygfsteel.com/youngturk/comments/380817.html</wfw:comment><comments>http://www.aygfsteel.com/youngturk/archive/2012/06/14/380817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/youngturk/comments/commentRss/380817.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/youngturk/services/trackbacks/380817.html</trackback:ping><description><![CDATA[<div> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">public class Myvisitor extends VisitorSupport {<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    /**<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />     * 对于属性节点,打印属性的名字和?br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />     */<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    public void visit(Attribute node) {<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />        System.out.println("attribute : " + node.getName() + " = "<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />               + node.getValue());<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    }<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    /**<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />     * 对于处理指o节点Q打印处理指令目标和数据<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />     */<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    public void visit(ProcessingInstruction node) {<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />        System.out.println("PI : " + node.getTarget() + " "<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />               + node.getData());<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    }<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    /**<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />     * 对于元素节点Q判断是否只包含文本内容Q如是,则打印标记的名字?nbsp;元素的内宏V如果不是,则只打印标记的名?br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />     */<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    public void visit(Element node) {<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />        if (node.isTextOnly())<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />           System.out.println("element : " + node.getName() + " = "<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />                  + node.getText());<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />        else<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />           System.out.println("--------" + node.getName() + "--------");<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    }<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /> <br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    @Test<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    public void test() throws DocumentException {<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />        SAXReader saxReader = new SAXReader();<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />        Document document = saxReader.read("src/book.xml");<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />        // dom4jParser.traversalDocumentByIterator();<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />        document.accept(new Myvisitor());<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />     }<br /><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />    </span></div></div><img src ="http://www.aygfsteel.com/youngturk/aggbug/380817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/youngturk/" target="_blank">youngturk</a> 2012-06-14 22:45 <a href="http://www.aygfsteel.com/youngturk/archive/2012/06/14/380817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发dom4j除了需要其1.6.1jar包外Q还需要jaxen-1.1.1jarhttp://www.aygfsteel.com/youngturk/archive/2012/06/13/380711.htmlyoungturkyoungturkWed, 13 Jun 2012 13:43:00 GMThttp://www.aygfsteel.com/youngturk/archive/2012/06/13/380711.html开发dom4j除了需要其1.6.1jar包外Q还需要jaxen-1.1.1jar在jdk1.6?br />
JAXENQ对XPath的支持)Q?/span>http://dist.codehaus.org/jaxen/distributions/jaxen-1.1.1.zip


youngturk 2012-06-13 21:43 发表评论
]]>
dom4J 递归解析http://www.aygfsteel.com/youngturk/archive/2012/06/13/380683.htmlyoungturkyoungturkWed, 13 Jun 2012 06:07:00 GMThttp://www.aygfsteel.com/youngturk/archive/2012/06/13/380683.htmlhttp://www.aygfsteel.com/youngturk/comments/380683.htmlhttp://www.aygfsteel.com/youngturk/archive/2012/06/13/380683.html#Feedback0http://www.aygfsteel.com/youngturk/comments/commentRss/380683.htmlhttp://www.aygfsteel.com/youngturk/services/trackbacks/380683.htmlbook.xml:
<?xml version="1.0" encoding="UTF-8"?>
<INVENTORY name="INAtrabute">
    
<BOOK name="textBook">
        
<TITLE>
            The Adventures of Huckleberry Finn
            
<FEN>mast
                
<MIAO>
                miao
                
</MIAO>
            
</FEN>
        
</TITLE>
        
<AUTHOR>Mark Twain
            
<FEN>mast1
                
<MIAO>
                miao1
                
</MIAO>
            
</FEN>
        
</AUTHOR>
        
<BINDING>mass market paperback</BINDING>
        
<PAGES>298</PAGES>
    
<price>209yuan</price>
    
</BOOK>
    
<BOOK>
        
<TITLE name="testName">Leaves of Grass</TITLE>
        
<AUTHOR>Walt Whitman</AUTHOR>
        
<BINDING>hardcover</BINDING>
        
<PAGES>462</PAGES>
    
</BOOK>
</INVENTORY>

解析代码Q?br />@Test
    
public void treeWalk() throws DocumentException{
        SAXReader reader 
= new SAXReader(); 
        Document document 
= reader.read(new File("src/book.xml"));
        Element element
= document.getRootElement();
        treeWalk(element);
        
    }

    
public void treeWalk(Element element){
        
for(int i = 0 , size = element.nodeCount();i<size;i++){
            Node node 
= element.node(i);
            
            
if(node instanceof Element){
                treeWalk((Element)node);
                String value 
= node.getName();
                System.out.println(value);
            }
else{
                
            }

        }

    }


youngturk 2012-06-13 14:07 发表评论
]]>
javaq接数据库(W一步)http://www.aygfsteel.com/youngturk/archive/2012/05/24/379048.htmlyoungturkyoungturkThu, 24 May 2012 08:49:00 GMThttp://www.aygfsteel.com/youngturk/archive/2012/05/24/379048.htmlhttp://www.aygfsteel.com/youngturk/comments/379048.htmlhttp://www.aygfsteel.com/youngturk/archive/2012/05/24/379048.html#Feedback0http://www.aygfsteel.com/youngturk/comments/commentRss/379048.htmlhttp://www.aygfsteel.com/youngturk/services/trackbacks/379048.html需要联pȝ几个文gQDaosupportController,extents Controller,BeanFactory,CoreDispatcherController,appcontext.xml.
有web.xml?br /><servlet>
        <!-- servlet获得控制文gClass的名字,cd -->
  <servlet-name>smvcCoreDispatcher</servlet-name>
  <servlet-class>org.bluechant.mvc.core.CoreDispatcherController</servlet-class>
.....
</servlet>
有CoreDispatcherController开?->

public void invokeActionHandler(ModelAndView mv , HttpServletRequest request) throws Exception{
        String className 
= mv.getClassName();
        String methodName 
= mv.getMethodName();
        
//load class
        Class controllerClass = cache.loadClass(className);//== Class.forName(className);java反射机制Qjvm加蝲lassNamec?/span>
        Class parentControllerClass = cache.loadClass(baseControllerClass);//class org.bluechant.mvc.controller.Controller
        
//load method参数1c,创徏一个方法ؓsetRequest参数为HttpServletRequest.class的方法与method = clazz.getDeclaredMethod(setRequest, HttpServletRequest.class);与HttpServletRequest的setRequestҎ一致的Ҏ.
        Method setRequest = cache.loadMethod(parentControllerClass, "setRequest"new Class[] { HttpServletRequest.class });    //HttpServletRequest.classQjava的反机制得到自qc,能够拥有自己的方法|QMethod setRequest获取成员函数Q?/span>
        Method setModelAndView = cache.loadMethod(parentControllerClass, "setModelAndView"new Class[] { ModelAndView.class });//org.bluechant.mvc.controller.Controller-setModelAndView@6024418  public void org.bluechant.mvc.controller.Controller.setModelAndView(org.bluechant.mvc.controller.ModelAndView)
        Method targetMethod = cache.loadMethod(controllerClass, methodName, new Class[]{});
        
//buiid controller instance and invoke target method以上setRequestQsetModelAndViewQtargetMethod都放在cacheQhashMap中)
        Object instance = controllerClass.newInstance();//加蝲classNamec?font color="#008000">;//此方法引入数据库q接 
        //以上刚进入页面的时候instance调用三个cd始化Q分别是l承关系DaosupportController QcontrollerQ和BeanFactory
        /*--->>>其中DaoSupportControllercMprotected ObjectDao dao = (ObjectDao)BeanFactory.getBean("objectDao");
        --->>>调用QgetBean Ҏpublic class BeanFactory {
            public static ApplicationContext context = new ClassPathXmlApplicationContext("appcontext.xml") ;//此方法引入数据库q接                                        
            public static Object getBean(String beanId) {
                return context.getBean(beanId);
            }
        }
*/

        setRequest.invoke(instance, 
new Object[] { request });//对带有指定参数的指定对象调用由此 Method 对象表示的基Ҏ    
        setModelAndView.invoke(instance, new Object[] { mv });//instance立即为原型指?br />//        --->>>执行指定的targetMethodҎ实则为AccountController的loginQ)登陆Ҏ此时开始调用数据库
        targetMethod.invoke(instance, new Object[]{});    
        
//调用instancecMtargetMethodq个ҎQObject[]{}q个作ؓ参数..
        
//invokeҎ实体获得ҎQ添加所要造的参数Q就是个扑֮例的Ҏ克隆工厂Q由Method获得实例模型Q由Ҏ锻造样子,传入参数得出惌l果
    }

}





youngturk 2012-05-24 16:49 发表评论
]]>
java下Class.forName的作用是什么,Z么要使用?/title><link>http://www.aygfsteel.com/youngturk/archive/2012/05/24/379024.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Thu, 24 May 2012 06:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/youngturk/archive/2012/05/24/379024.html</guid><wfw:comment>http://www.aygfsteel.com/youngturk/comments/379024.html</wfw:comment><comments>http://www.aygfsteel.com/youngturk/archive/2012/05/24/379024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/youngturk/comments/commentRss/379024.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/youngturk/services/trackbacks/379024.html</trackback:ping><description><![CDATA[<p>Class.forName(xxx.xx.xx) q回的是一个类</p> <p>首先你要明白在java里面Mclass都要装蝲在虚拟机上才能运行。这句话是装蝲cȝ?和new 不一P要分清楚)?nbsp;<br /><br />至于什么时候用Q你可以考虑一下这个问题,l你一个字W串变量Q它代表一个类的包名和cdQ你怎么实例化它Q只有你提到的这个方法了Q不q要再加一炏V?nbsp;<br />A a = (A)Class.forName("pacage.A").newInstance(); <br />q和?nbsp;<br />A a = new A()Q?nbsp;<br />是一L效果?nbsp;<br /><br />关于补充的问?nbsp;<br />{案是肯定的Qjvm会执行静态代码段Q你要记住一个概念,静态代码是和classl定的,class装蝲成功pC执行了你的静态代码了。而且以后不会再走q段静态代码了?/p> <p>Class.forName(xxx.xx.xx) q回的是一个类 <br />Class.forName(xxx.xx.xx);的作用是要求JVM查找q加载指定的c,也就是说JVM会执行该cȝ静态代码段</p> <p>动态加载和创徏Class 对象Q比如想Ҏ用户输入的字W串来创建对?nbsp;<br />String str = 用户输入的字W串 <br />Class t = Class.forName(str); <br />t.newInstance();</p> <p> 在初始化一个类Q生成一个实例的时候,newInstance()Ҏ和new关键字除了一个是ҎQ一个是关键字外Q最主要有什么区别?它们的区别在于创建对象的方式不一P前者是使用cd载机Ӟ后者是创徏一个新cR那么ؓ什么会有两U创建对象方式?q主要考虑到Y件的可׾~、可扩展和可重用{Y件设计思想?nbsp;<br /><br />Java中工厂模式经怋用newInstance()Ҏ来创建对象,因此从ؓ什么要使用工厂模式上可以找到具体答案?nbsp;例如Q?nbsp;<br />class c = Class.forName(“Example”); <br />factory = (ExampleInterface)c.newInstance(); <br /><br />其中ExampleInterface是Example的接口,可以写成如下形式Q?nbsp;<br />String className = "Example"; <br />class c = Class.forName(className); <br />factory = (ExampleInterface)c.newInstance(); <br /><br />q一步可以写成如下Ş式: <br />String className = readfromXMlConfig;//从xml 配置文g中获得字W串 <br />class c = Class.forName(className); <br />factory = (ExampleInterface)c.newInstance(); <br /><br />上面代码已经不存在Example的类名称Q它的优ҎQ无论ExamplecL么变化Q上qC码不变,甚至可以更换Example的兄弟类Example2 , Example3 , Example4……Q只要他们承ExampleInterface可以?nbsp;<br /><br />从JVM的角度看Q我们用关键字new创徏一个类的时候,q个cd以没有被加蝲。但是用newInstance()Ҏ的时候,必M证:1、这个类已经加蝲Q?、这个类已经q接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,q个静态方法调用了启动cd载器Q即加蝲 java API的那个加载器?nbsp;<br /><br />现在可以看出QnewInstance()实际上是把newq个方式分解Z步,即首先调用Class加蝲Ҏ加蝲某个c,然后实例化?nbsp;q样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灉|性,提供l了一U降耦的手段?nbsp;<br /><br />最后用最单的描述来区分new关键字和newInstance()Ҏ的区别: <br />newInstance: q型。低效率。只能调用无参构造?nbsp;<br />new: 强类型。相寚w效。能调用Mpublic构造?/p><img src ="http://www.aygfsteel.com/youngturk/aggbug/379024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/youngturk/" target="_blank">youngturk</a> 2012-05-24 14:32 <a href="http://www.aygfsteel.com/youngturk/archive/2012/05/24/379024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web.xml?filter解析http://www.aygfsteel.com/youngturk/archive/2012/05/24/379004.htmlyoungturkyoungturkThu, 24 May 2012 02:40:00 GMThttp://www.aygfsteel.com/youngturk/archive/2012/05/24/379004.htmlhttp://www.aygfsteel.com/youngturk/comments/379004.htmlhttp://www.aygfsteel.com/youngturk/archive/2012/05/24/379004.html#Feedback0http://www.aygfsteel.com/youngturk/comments/commentRss/379004.htmlhttp://www.aygfsteel.com/youngturk/services/trackbacks/379004.htmlAdminFilter.javaQ?
package org.bluechant.mvc.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.bluechant.mvc.core.GlobalSources;

/**
 * 
@author CHAOS
 * @date 2012-02-28 12:49
 * filter for check wheather user already login in ,
 * if not , send redirect to the login page 
 * if already login , forward user's request to the target request URL
 
*/

public class AdminFilter implements Filter 
    
    
private String loginPage ;
    
    
private String loginAction ;
    
    
private String userLoginTag ;
    
//FilterConfig可用于访问Filter的配|信?/span>
    private FilterConfig config;

    
//执行qo的核心方?/span>
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) 
throws IOException, ServletException {
        
        HttpServletRequest request 
= (HttpServletRequest) req;
        HttpServletResponse  response 
= (HttpServletResponse )res;
        HttpSession session 
= request.getSession(true);

        
//获取客户h的页?/span>
        String urlPath = request.getServletPath();
        
//如果session范围的user为nullQ即表明没有d
        
//且用戯求的既不是登录页面,也不是处理登录的面if( session.getAttribute("user") == null

        
boolean flag = needNotFilter(urlPath);
        
//不需要进行拦截的面
        if(!flag){
            Object obj 
= session.getAttribute(userLoginTag);
            System.out.println(
"the session userLoginTag value is :"+obj);
            
if(obj!=null){
                flag 
= true ;
            }

        }

        
if(flag){
            chain.doFilter(req, res);
        }
else{
            
//拦截不通过的时候蟩转到的目?/span>//forward到登录页?/span>
            response.sendRedirect(request.getContextPath()+loginPage);
        }

    }

    
//只有?#8221;/login.html“ || “/account!login.do” 情况下才q行拦截通过Q否则拦截不通过跛_登陆面
    private boolean needNotFilter(String urlPath){
        
if(urlPath.endsWith(loginPage) || urlPath.endsWith(loginAction)){
            
return true ;
        }

        
return false ;
    }


    
/**
     * init params
     
*/

    
public void init(FilterConfig config) throws ServletException {
        loginPage 
= config.getInitParameter("loginPage");
        loginAction 
= config.getInitParameter("loginAction");
        userLoginTag 
= config.getInitParameter("userLoginTag");
        System.out.println(
"the loginPage value is :"+loginPage);
        System.out.println(
"the loginAction value is :"+loginAction);
        System.out.println(
"the userLoginTag value is :"+userLoginTag);
        
this.config = config;
        
//以前面登陆的时候sessionq行讄HttpSession session = request.getSession(true);
        
//session.setAttribute(GlobalSources.user_login_tag, user);
        GlobalSources.user_login_tag = userLoginTag ;//session攑ֈGlobalSourcesQbean里,
用GlobalSources.user_login_tag获得

    }


    
public void destroy(){
        
        
this.config = null;
    }


}


web.xml中对应filter文g:
 <filter>
      <filter-name>adminFilter</filter-name>
      <filter-class>org.bluechant.mvc.filter.AdminFilter</filter-class>
          <init-param>
               <param-name>loginAction</param-name>
               <param-value>/account!login.do</param-value>
          </init-param>
          <init-param>
               <param-name>loginPage</param-name>
               <param-value>/login.html</param-value>
          </init-param>
          <init-param>
               <param-name>userLoginTag</param-name>
               <param-value>account_login_check</param-value>
          </init-param>  
 </filter>
 
 <filter>
          <filter-name>userSourceFilter</filter-name>
          <filter-class>org.bluechant.mvc.filter.AccountRoleFilter</filter-class>
 </filter>
 
 <filter-mapping>
          <filter-name>adminFilter</filter-name>
          <url-pattern>*.do</url-pattern><!-- 表明凡是讉K跌{*.do形式的蟩转,都要q行名字为adminFilter的过滤器 -->
 </filter-mapping>
 
 <filter-mapping>
          <filter-name>userSourceFilter</filter-name>
          <url-pattern>*.do</url-pattern>
 </filter-mapping>

youngturk 2012-05-24 10:40 发表评论
]]>
web.xml filter声明qo?/title><link>http://www.aygfsteel.com/youngturk/archive/2012/05/23/378972.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Wed, 23 May 2012 14:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/youngturk/archive/2012/05/23/378972.html</guid><wfw:comment>http://www.aygfsteel.com/youngturk/comments/378972.html</wfw:comment><comments>http://www.aygfsteel.com/youngturk/archive/2012/05/23/378972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/youngturk/comments/commentRss/378972.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/youngturk/services/trackbacks/378972.html</trackback:ping><description><![CDATA[<font size="2">qo器可截取和修改进入一个servlet或JSP面的请求或从一个servlet或JSP面发出的相应。在执行一?servlet或JSP面之前Q必L行第一个相关的qo器的doFilterҎ。在该过滤器对其FilterChain对象调用doFilter Ӟ执行链中的下一个过滤器。如果没有其他过滤器Qservlet或JSP面被执行。过滤器h对到来的ServletRequest对象的全部访问权Q因此,它们可以查看客户机名、查扑ֈ来的cookie{。ؓ了访问servlet或JSP面的输出,qo器可响应对象包裹在一个替w对象(stand-in objectQ中Q比方说把输出篏加到一个缓冲区。在调用FilterChain对象的doFilterҎ之后Q过滤器可检查缓冲区Q如有必要,对它进行修改,然后传送到客户机? <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">    </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000">adminFilter</span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">></span><span style="color: #000000">org.bluechant.mvc.filter.AdminFilter</span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">><!--服务器部|的时候,adminFilter开始加载初始化--></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #000000"><</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000">loginAction</span><span style="color: #000000"></</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #000000"><</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">>/</span><span style="color: #000000">account</span><span style="color: #000000">!</span><span style="color: #000000">login.</span><span style="color: #0000ff">do</span><span style="color: #000000"></</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"></</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #000000"><</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000">loginPage</span><span style="color: #000000"></</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #000000"><</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">>/</span><span style="color: #000000">login.html</span><span style="color: #000000"></</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"></</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #000000"><</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000">userLoginTag</span><span style="color: #000000"></</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #000000"><</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000">account_login_check</span><span style="color: #000000"></</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"></</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">></span><span style="color: #000000">        <br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    </span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    <br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000">userSourceFilter</span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">></span><span style="color: #000000">org.bluechant.mvc.filter.AccountRoleFilter</span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    </span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    <br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000">adminFilter</span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">>*</span><span style="color: #000000">.</span><span style="color: #0000ff">do</span><span style="color: #000000"></</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">><!--</span><span style="color: #000000"> 表明凡是讉K跌{</span><span style="color: #000000">*</span><span style="color: #000000">.do形式的蟩转,都要q行名字为adminFilter的过滤器 </span><span style="color: #000000">--></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    </span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    <br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000">userSourceFilter</span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #000000"><</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">>*</span><span style="color: #000000">.</span><span style="color: #0000ff">do</span><span style="color: #000000"></</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />    </span><span style="color: #000000"></</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">><br />    <!--接着序加蝲servlet被初始化--></span></div><br /></font><img src ="http://www.aygfsteel.com/youngturk/aggbug/378972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/youngturk/" target="_blank">youngturk</a> 2012-05-23 22:31 <a href="http://www.aygfsteel.com/youngturk/archive/2012/05/23/378972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>servlet-mapping元素及其子元?/title><link>http://www.aygfsteel.com/youngturk/archive/2012/05/22/378865.html</link><dc:creator>youngturk</dc:creator><author>youngturk</author><pubDate>Tue, 22 May 2012 12:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/youngturk/archive/2012/05/22/378865.html</guid><wfw:comment>http://www.aygfsteel.com/youngturk/comments/378865.html</wfw:comment><comments>http://www.aygfsteel.com/youngturk/archive/2012/05/22/378865.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/youngturk/comments/commentRss/378865.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/youngturk/services/trackbacks/378865.html</trackback:ping><description><![CDATA[<servlet-mapping>元素在Servlet和URL样式之间定义一个映。它包含了两个子元素<servlet- name>?lt;url-pattern>Q?lt;servlet-name>元素l出的Servlet名字必须是在<servlet>元素中声明过的Servlet的名字?lt;url-pattern>元素指定对应于Servlet的URL路径Q该路径是相对于Web应用E序上下文根的\径。例如: <p> <table border="1" cellspacing="0" bordercolorlight="#000000" bordercolordark="#ffffff" cellpadding="2" width="400" align="center"> <tbody> <tr> <td class="code" bgcolor="#e6e6e6"><pre><servlet-mapping><br /><servlet-name>helloworld</servlet-name><br /><url-pattern>/hello</url-pattern><br /></servlet-mapping></pre></td></tr></tbody></table></p> <p> </p> <p><font size="3">        Servlet 2.5规范允许<servlet-mapping>?lt;url-pattern>子元素出现多ơ,之前的规范只允许一?lt;servlet-mapping>元素包含一?lt;url-pattern>子元素。我们看下面的例子:</font><br /> <table border="1" cellspacing="0" bordercolorlight="#000000" bordercolordark="#ffffff" cellpadding="2" width="400" align="center"> <tbody> <tr> <td class="code" bgcolor="#e6e6e6"><pre><servlet-mapping><br /><servlet-name>welcome</servlet-name><br /><url-pattern>/en/welcome</url-pattern><br /><url-pattern>/zh/welcome</url-pattern><br /></servlet-mapping></pre></td></tr></tbody></table></p> <p><font size="3">       在配|了Servlet与URL样式之间的映后Q当Servlet容器接收C个请求,它首先确定该h应该由哪一个Web应用E序来响应。这是通过比较hURI的开始部分与Web应用E序的上下文路径来确定的。映到Servlet的\径是hURI减去上下文的路径QWeb应用E序的Context对象在去掉请求URI的上下文路径后,按照下面的路径映射规则的顺序对剩余部分的\径进行处理,q且在找到第一个成功的匚w后,不再q行下一个匹配?/font></p> <p><font color="#ff0000" size="3"><strong>      容器试着对请求的路径和Servlet映射的\径进行精匹配,如果匚w成功Q则调用q个Servlet来处理请求?/strong></font></p> <p><font color="#ff0000" size="3"><strong>      容器试着匚w最长的路径前缀Q以斜杠Q?Qؓ路径分隔W,按照路径树逐递减匚wQ选择最长匹配的Servlet来处理请求?/strong></font></p> <p><font color="#ff0000" size="3"><strong>      如果h的URL路径最后有扩展名,?jspQServlet容器会试着匚w处理q个扩展名的Servlet?/strong></font></p> <p><font size="3">       如果按照前面3条规则没有找到匹配的ServletQ容器会调用Web应用E序默认的Servlet来对hq行处理Q如果没有定义默认的ServletQ容器将向客L发送HTTP 404错误信息Q请求资源不存在Q?/font></p><font size="3"> <p>       在部|描q符中,可以使用下面的语法来定义映射?/p> <p>      <font color="#0000ff" size="4" face="楷体_GB2312"><strong>?开始ƈ且以 /* l束的字W串用来映射路径Q例如:</strong></font></p> <p> <table border="1" cellspacing="0" bordercolorlight="#000000" bordercolordark="#ffffff" cellpadding="2" width="400" align="center"> <tbody> <tr> <td class="code" bgcolor="#e6e6e6"><pre><url-pattern>/admin/*</url-pattern></pre></td></tr></tbody></table></p> <p>    <strong>    <font color="#0000ff" size="4" face="楷体_GB2312">如果没有_匚wQ那么对/admin/路径下的资源的所有请求将由映了上述URL样式的Servlet来处理?/font></strong></p> <p>       <font color="#0000ff" size="4" face="楷体_GB2312"> <strong>?*. 为前~的字W串用来映射扩展名,例如Q?/strong></font></p> <p> <table border="1" cellspacing="0" bordercolorlight="#000000" bordercolordark="#ffffff" cellpadding="2" width="400" align="center"> <tbody> <tr> <td class="code" bgcolor="#e6e6e6"><pre><url-pattern>*.do</url-pattern></pre></td></tr></tbody></table></p> <p><strong><font size="4" face="楷体_GB2312">    <font color="#0000ff">如果没有_匚w和\径匹配,那么对具?do扩展名的资源的请求将由映了上述URL样式的Servlet来处理?/font></font></strong></p> <p>         <font color="#0000ff" size="4" face="楷体_GB2312"><strong>以一个单独的/指示q个Web应用E序<font color="#ff0000">是默认的Servlet</font>Q例如:</strong></font></p> <p> <table border="1" cellspacing="0" bordercolorlight="#000000" bordercolordark="#ffffff" cellpadding="2" width="400" align="center"> <tbody> <tr> <td class="code" bgcolor="#e6e6e6"><pre><url-pattern>/</url-pattern></pre></td></tr></tbody></table></p> <p>       <strong><font color="#0000ff" size="4" face="楷体_GB2312"> <font color="#ff0000">如果Ҏ个请求没有找到匹配的ServletQ那么将使用Web应用E序的默认Servlet来处理?/font></font></strong></p> <p><strong>        <font color="#0000ff" size="4" face="楷体_GB2312"> 所有其他的字符被用于精匹配,例如Q?/font></strong></p> <p> <table border="1" cellspacing="0" bordercolorlight="#000000" bordercolordark="#ffffff" cellpadding="2" width="400" align="center"> <tbody> <tr> <td class="code" bgcolor="#e6e6e6"><pre><url-pattern>/login</url-pattern></pre></td></tr></tbody></table></p> <p>          <font color="#0000ff" size="4" face="楷体_GB2312"><strong>如果h/loginQ那么将由映了URL样式/login的Servlet来处理?/strong></font></p></font> <img src ="http://www.aygfsteel.com/youngturk/aggbug/378865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/youngturk/" target="_blank">youngturk</a> 2012-05-22 20:32 <a href="http://www.aygfsteel.com/youngturk/archive/2012/05/22/378865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web.xml中servlet控制参数Ҏhttp://www.aygfsteel.com/youngturk/archive/2012/05/22/378841.htmlyoungturkyoungturkTue, 22 May 2012 07:08:00 GMThttp://www.aygfsteel.com/youngturk/archive/2012/05/22/378841.htmlhttp://www.aygfsteel.com/youngturk/comments/378841.htmlhttp://www.aygfsteel.com/youngturk/archive/2012/05/22/378841.html#Feedback0http://www.aygfsteel.com/youngturk/comments/commentRss/378841.htmlhttp://www.aygfsteel.com/youngturk/services/trackbacks/378841.htmlweb.xml中servletQ?/span>

    <servlet>   <!--接着序加蝲servlet被初始化-->
           
<!-- servlet获得控制文gClass的名字,cd -->
        
<servlet-name>smvcCoreDispatcher</servlet-name>
        
<servlet-class>org.bluechant.mvc.core.CoreDispatcherController</servlet-class>
        
<init-param>
            
<param-name>templateLoaderPath</param-name>
            
<param-value>/WEB-INF/view</param-value>
        
</init-param>
        
<init-param>
            
<param-name>defaultEncoding</param-name>
            
<param-value>GBK</param-value>
        
</init-param>
        
<init-param>
            
<param-name>contextConfigLocation</param-name>
            
<param-value>/WEB-INF/smvc_config/smvc-config.xml</param-value>
        
</init-param>
        
<load-on-startup>1</load-on-startup><!-- 加蝲路径 -->
    
     
</servlet>
    
<servlet-mapping>
        
<servlet-name>smvcCoreDispatcher</servlet-name>
        
<url-pattern>*.do</url-pattern>
    
</servlet-mapping>
    
    
<welcome-file-list>
        
<welcome-file>login.html</welcome-file>
    
</welcome-file-list>

web.xml对应的servlet控制java改写Q?/span>

package org.bluechant.mvc.core;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.bluechant.mvc.controller.ModelAndView;
import org.bluechant.mvc.core.util.ServletUtils;

import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

public class CoreDispatcherController extends HttpServlet {
    
    private Logger logger = Logger.getLogger(CoreDispatcherController.class);
    
    private CacheManager cache ;
    
    private String baseControllerClass = "org.bluechant.mvc.controller.Controller";

    private static final long serialVersionUID = 1L;
    
    private Configuration cfg ;
    
    private String templateLoaderPath ;
    
    private String defaultEncoding ;    
    
    private String contentType ;

    private String contextConfigLocation ;
    
    private ActionConfig actionCoinfig ;    
    
    public void init(ServletConfig config) throws ServletException {
        
        super.init(config);
        //super.init(config);

        String absPath = config.getServletContext().getRealPath("/");//获得pȝl对路径
        System.out.println("absPath:"+absPath);
        //getRealPath("/virtual_dir/file2.txt")应该q回"C:\site\a_virtual\file2.txt"   getRealPath("/file3.txt")应该q回nullQ因个文件不存在?nbsp;
        ///q回路径D:\Java\workspaces\helios\newshpt\获得文g路径
        defaultEncoding = getInitParameter("defaultEncoding");
        
        templateLoaderPath = getInitParameter("templateLoaderPath");
        //");//从web.xml中获得templateLoaderPath信息Qweb.xml中对应的路径”/WEB-INF/view“
        
        contextConfigLocation = getInitParameter("contextConfigLocation");
        System.out.println("contextConfigLocation:"+contextConfigLocation);
        ///获得web.xml文g中\径WEB-INF/smvc_config/smvc-config.xml
        actionCoinfig = new ActionConfig();
        actionCoinfig.load(absPath+contextConfigLocation);//文档q行解析与读?
        ///D:\Java\workspaces\helios\newshpt\WEB-INF/smvc_config/smvc-config.xml
        contentType = "text/html;charset="+defaultEncoding ;
        
        //创徏Configuration实例QConfiguration是入口,通过它来获得配置文g
        cfg = new Configuration();
        //讄模板路径Q?nbsp;getServletContext(),所有是所有\径都能拿到的..
        cfg.setServletContextForTemplateLoading(getServletContext(), templateLoaderPath);
        //cfg.setServletContextForTemplateLoading(arg0, arg1)
        //讄~码格式
        cfg.setEncoding(Locale.getDefault(), defaultEncoding);
        
        //init cache manager
        cache = CacheManager.getInstance();
    }
    
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request,response);
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
        processRequest(request,response);
        
    }
    
    private void showRequestParams(HttpServletRequest request){
        Enumeration en = request.getParameterNames();
        while (en.hasMoreElements()) {
            String paramName = (String) en.nextElement();
            String[] paramValues = request.getParameterValues(paramName);
            if (paramValues.length == 1) {
                String paramValue = paramValues[0];
                if (paramValue.length() != 0) {
                    //map.put(paramName, paramValue);
                    //System.out.println(paramName+"\t"+paramValue);
                }
            }else if(paramValues.length >1 ){//checkbox
                //map.put(paramName, paramValues);
                //System.out.println(paramName+"\t"+paramValues);
            }
        }
    }
    
    public void processRequest(HttpServletRequest request, HttpServletResponse response){
        
        try {
            request.setCharacterEncoding(defaultEncoding);
            showRequestParams(request);//waiting back to resolve
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } // set request encoding
        
        ModelAndView mv = analyzeRequest(request);        
        try {
            invokeActionHandler(mv,request);
            if(mv.getViewPath().endsWith(".ftl")){
                invokeViewResolverHandler(mv , response , request);
            }else{
                response.sendRedirect(mv.getWebroot()+mv.getViewPath());
            }    
        } catch (Exception e) {
            e.printStackTrace();
        }    
    }
    
    public ModelAndView analyzeRequest(HttpServletRequest request){        
        ModelAndView modelAndView = new ModelAndView();            
        logger.debug("request url path is : "+request.getRequestURI());
        String requestPath = request.getRequestURI(); // /newshpt/account!login.do
        String webroot = request.getContextPath() ; // /newshpt
        System.out.println("request url path is : "+requestPath);
        System.out.println("request webroot path is : "+webroot);
        modelAndView.setWebroot(webroot);
        String actionFullName = requestPath.substring(webroot.length()); // /account!login.do
        System.out.println("actionFullName : "+actionFullName);
        String[] temp = actionFullName.split("!");
        String method = "execute";
        if(temp.length==2){
             method = temp[1].split("\\.")[0];
        }
        System.out.println("method : "+method);
        String actionName = temp[0]; // /demo
        System.out.println("actionName : "+actionName);
        String className = actionCoinfig.getClassName(actionName);
        System.out.println("className :"+className);
        modelAndView.setClassName(className);
        modelAndView.setMethodName(method);
        modelAndView.setAction(actionName);
        
        return modelAndView ;
    }
    
    /**
     * invoke the request controller's target method 
     * param ModelAndView will be mofified during the process
     * @param mv
     * @param request
     * @throws Exception 
     */
    public void invokeActionHandler(ModelAndView mv , HttpServletRequest request) throws Exception{
        String className = mv.getClassName();
        String methodName = mv.getMethodName();
        //load class
        Class controllerClass = cache.loadClass(className);
        Class parentControllerClass = cache.loadClass(baseControllerClass);
        //load method
        Method setRequest = cache.loadMethod(parentControllerClass, "setRequest", new Class[] { HttpServletRequest.class });    
        Method setModelAndView = cache.loadMethod(parentControllerClass, "setModelAndView", new Class[] { ModelAndView.class });//org.bluechant.mvc.controller.Controller-setModelAndView@6024418  public void org.bluechant.mvc.controller.Controller.setModelAndView(org.bluechant.mvc.controller.ModelAndView)
        Method targetMethod = cache.loadMethod(controllerClass, methodName, new Class[]{});
        //buiid controller instance and invoke target method
        Object instance = controllerClass.newInstance();
        setRequest.invoke(instance, new Object[] { request });//对带有指定参数的指定对象调用由此 Method 对象表示的基Ҏ    
        setModelAndView.invoke(instance, new Object[] { mv });
        targetMethod.invoke(instance, new Object[]{});        
    }
    
    /**
     * send data to view model , and generate the view page by FreeMarker
     */
    public void invokeViewResolverHandler(ModelAndView modelAndView , HttpServletResponse response ,HttpServletRequest request){    
        //convert session attributes to sessionModel , and push to modelAndView
        Map sessionModel = ServletUtils.sessionAttributesToMap(request.getSession());// userSources=[/admin, /button/custom, /custom, /delivery, /loadShip, /unloadPickUp, /unloadShip]
        modelAndView.put("Session", sessionModel);
        response.setContentType(contentType); 
        try {//初始化FreeMarker
            PrintWriter out = response.getWriter();
            Template template = cfg.getTemplate(modelAndView.getViewPath());//取得生成模版文g
            template.setTemplateExceptionHandler(TemplateExceptionHandler.DEBUG_HANDLER);//setTemplateExceptionHandler
            //set the object wrapper , beanwrapper is the perfect useful objectWrapper instance
            template.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);// 讄对象包装?br />            template.process(modelAndView, out);//模版环境开始蝲?.
            out.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TemplateException e) {
            e.printStackTrace();
        }
    }
    
}


smvc-config.xml文g:

<?xml version="1.0" encoding="UTF-8"?>
<smvc-config>    
    
<action name="/account" class="com.cenin.tjport.shpt.mvc.controller.AccountController"/>
    
<action name="/yard" class="com.cenin.tjport.shpt.mvc.controller.DuiCunController"/>
</smvc-config>



 



youngturk 2012-05-22 15:08 发表评论
]]>
վ֩ģ壺 | ϴ| | г| | | | | ͡| ɿ| | | | ƽ| ľ| | | բ| | ǰ| | ͼ| | | | | ֹ| ׸| ɽ| ֺ| | Դ| | | | ɳ| | ʹ| Ӷ| | |