﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-用 Google App Engine 干事业！-文章分类-J2EE</title><link>http://www.blogjava.net/leishiran/category/42165.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 14 Oct 2009 03:24:10 GMT</lastBuildDate><pubDate>Wed, 14 Oct 2009 03:24:10 GMT</pubDate><ttl>60</ttl><item><title>第三章 为servlet命名</title><link>http://www.blogjava.net/leishiran/articles/86273.html</link><dc:creator>googlor</dc:creator><author>googlor</author><pubDate>Fri, 08 Dec 2006 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/leishiran/articles/86273.html</guid><wfw:comment>http://www.blogjava.net/leishiran/comments/86273.html</wfw:comment><comments>http://www.blogjava.net/leishiran/articles/86273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leishiran/comments/commentRss/86273.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leishiran/services/trackbacks/86273.html</trackback:ping><description><![CDATA[		<p>
				<br />注册servlet/映射servlet<br />&#160;web.xml中 </p>
		<p>&lt;servlet&gt;<br />&#160;&#160;&#160; &lt;servlet-name&gt;HelloWorldServlet&lt;/servlet-name&gt;&#160;&#160; //注册<br />&#160;&#160;&#160; &lt;servlet-class&gt;testservlet.HelloWorldServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;/servlet-mapping&gt;&lt;servlet-mapping&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //映射<br />&#160;&#160;&#160; &lt;servlet-name&gt;HelloWorldServlet&lt;/servlet-name&gt;<br />&#160;&#160;&#160; &lt;url-pattern&gt;/helloworld&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;/servlet-mapping&gt;&lt;servlet-mapping&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //多个映射<br />&#160;&#160;&#160; &lt;servlet-name&gt;HelloWorldServlet&lt;/servlet-name&gt;<br />&#160;&#160;&#160; &lt;url-pattern&gt;/hd&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;</p>
		<p>可以通过 <a href="http://host:port/context">http://host:port/context</a> path/servlet/registered-servlet-name (貌似这种没调试出来，汗。。。)<br />使用通配符 *<br />&lt;url-pattern&gt;/login/*&lt;/url-pattern&gt;&#160; //url地址后的login都将用这个servlet来请求 <br />&lt;url-pattern&gt;/*&lt;/url-pattern&gt; //所以非servlet的页面和其他路径都将用这个servlet来请求，如果有这样的servlet，将被优先。<br />&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt; //用来匹配 <a href="http://host:port/context">http://host:port/context</a> path/servlet/registered-servlet-name 访问servlet模式 </p>
		<p>甚至可以 &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt; &lt;url-pattern&gt;*.html&lt;/url-pattern&gt; 这叫扩展映射<br />在servlet中转发请求<br />protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // TODO Auto-generated method stub<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; PrintWriter out = response.getWriter();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; out.println("Login ...");<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; RequestDispatcher dispather = null;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; String param = request.getParameter("go"); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(param == null ){<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; throw new ServletException("Missing parameter!");&#160; //不知道这些异常在何处捕获<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }else if(param.equals("h")){<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; dispather = request.getRequestDispatcher("/helloworld"); //定义将要转发位置<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //或者 dispather = getServletContext().getNamedDispatcher(&#8220;注册的类名&#8221;);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }else{<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; throw new ServletException("wrong parameter");<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(dispather != null){<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; dispather.forward(request,response);&#160; //进行转发<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }else{<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; throw new ServletException("dispather = null!");<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }<br />&#160;&#160;&#160; }&#160; <br />为web应用程序创建欢迎文件</p>
		<p>在web.xml中配置<br />&lt;welcome-file-list&gt;<br />&#160;&#160;&#160; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br />&#160;&#160;&#160; &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;<br />&lt;/welcome-file-list&gt;</p>
		<p>
				<br />限制对某些servlet的请求<br />有时我们只希望通过认证的用户才能请求某些servlet的话，就可以在web.xml中来进行相应的配置，来达到此目的。<br />这就要用到&lt;security-constraint&gt;&lt;/security-constraint&gt;元素。<br />对于tomcat，中web.xml使用security-constraint元素需要在位于&lt;Tomcat-installation-directory&gt;/conf/tomcat-users.xml的XML文件中创建用户名和密码。比如下面的这个tomcat-users.xml文件：<br />&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />&lt;tomcat-users&gt;<br />&#160; &lt;role rolename="tomcat"/&gt;<br />&#160; &lt;role rolename="manager"/&gt;<br />&#160; &lt;role rolename="admin"/&gt;<br />&#160; &lt;user username="tomcat" password="tomcat" roles="tomcat"/&gt;<br />&#160; &lt;user username="both" password="tomcat" roles="tomcat,manager"/&gt;<br />&#160; &lt;user username="admin" password="admin" roles="admin"/&gt;<br />&lt;/tomcat-users&gt;<br />此XML片段包括一个tomcat-users根元素，它包含一个或多个role和user元素。</p>
		<p>然后在Web应用程序的web.xml中创建security-constraint、login-config和security-role元素。</p>
		<p>&lt;security-constraint&gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;web-resource-collection&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;web-resource-name&gt;HelloServlet&lt;/web-resource-name&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;url-pattern&gt;/HelloServlet&lt;/url-pattern&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;http-method&gt;GET&lt;/http-method&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;http-method&gt;POST&lt;/http-method&gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;/web-resource-collection&gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;auth-constraint&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;description&gt;This applies only to the "tomcat" security role&lt;/description&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;role-name&gt;admin&lt;/role-name&gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;/auth-constraint&gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;user-data-constraint&gt;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;transport-guarantee&gt;NONE&lt;/transport-guarantee&gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;/user-data-constraint&gt;<br />&#160; &lt;/security-constraint&gt;<br />&#160; <br />&#160; &lt;login-config&gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;auth-method&gt;BASIC&lt;/auth-method&gt;<br />&#160; &lt;/login-config&gt;<br />&#160; &lt;security-role&gt;<br />&#160;&#160;&#160;&#160;&#160; &lt;role-name&gt;admin&lt;/role-name&gt;<br />&#160; &lt;/security-role&gt;</p>
		<p>其中security-constraint元素包含一个或多个web-resource-collection元素，它是描述Web应用程序中的哪些web资源受到指定安全限制的保护。http-method元素指定安全限制覆盖的HTTP方法。上面的例子中，当我们对/HelloServlet的GET或POST请求时将触发配置的安全机制。<br />auth-constraint元素用于描述允许访问Web组件的安全角色。此例中安全角色的例子有tomcat、manager、admin。而只有当作为admin角色的用户才可以访问HelloServlet。</p>
		<p>Web应用程序通过login-config元素来认证用户，并确认该用户是否为正确的角色。<br />longin-config包含的transport-guarantee子元素用来指定认证方法，BASIC是一种常见的Web认证方式，浏览器给用户提示一个对话框，要求输入用户名和密码，随后Tomcat将给出的用户名和密码与tomcat-users.xml中的用户名和密码进行比较，然后使用前面的security-constraint配置来确定用户是否可访问受保护的servlet。</p>
		<p>（除BASIC外，还可以是FORM、CLIENT-CERT、DIGEST等）</p>
		<p>其实这种认证方法实际上有两个步骤：<br />1、检查提供的用户名和密码是否正确。<br />2、判断用户是否映射到特定的安全角色。例如，用户可能提供了正确的用户名和密码，但没有映射到特定的安全角色，也将被禁止访问特定的Web资源。<br />&#160;<br /></p>
 <img src ="http://www.blogjava.net/leishiran/aggbug/86273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leishiran/" target="_blank">googlor</a> 2006-12-08 11:41 <a href="http://www.blogjava.net/leishiran/articles/86273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单工厂模式、工厂模式、 抽象工厂模式</title><link>http://www.blogjava.net/leishiran/articles/30135.html</link><dc:creator>googlor</dc:creator><author>googlor</author><pubDate>Fri, 10 Feb 2006 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/leishiran/articles/30135.html</guid><wfw:comment>http://www.blogjava.net/leishiran/comments/30135.html</wfw:comment><comments>http://www.blogjava.net/leishiran/articles/30135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leishiran/comments/commentRss/30135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leishiran/services/trackbacks/30135.html</trackback:ping><description><![CDATA[1。简单工厂模式<BR><BR>简单工厂模式就是由一个工厂类根据参数来决定创立出那一种产品类的实例。下面的UML类图就精确定义了简单工厂模式的结构。<BR><IMG alt="" hspace=0 src="file:///C:/Documents%20and%20Settings/leishiran/桌面/temp/jt-2001-11-14-simplefactorydiagram.gif" align=baseline border=0><BR><BR><BR>例如：<BR><IMG alt="" hspace=0 src="file:///C:/Documents%20and%20Settings/leishiran/桌面/temp/jt-2001-11-14-exercise.gif" align=baseline border=0><BR>代码：<BR>package com.javapatterns.simplefactory.exercise;<BR><BR>public class ArtTracer<BR>{<BR>　public Shape factory(String which) throws BadShapeException<BR>　{<BR>　　if (which.equalsIgnoreCase("circle"))<BR>　　{<BR>　　　return new Circle();<BR>　　}<BR>　　else if (which.equalsIgnoreCase("square"))<BR>　　{<BR>　　　return new Square();<BR>　　}<BR>　　else if (which.equalsIgnoreCase("triangle"))<BR>　　{<BR>　　　return new Triangle();<BR>　　}<BR>　　else<BR>　　{<BR>　　　throw new BadShapeException(which);<BR>　　}<BR>　}<BR>}<BR><BR><BR>package com.javapatterns.simplefactory.exercise;<BR><BR>public interface Shape<BR>{<BR>　void draw();<BR><BR>　void erase();<BR>}<BR><BR>package com.javapatterns.simplefactory.exercise;<BR><BR>　public class Square implements Shape<BR>　{<BR>　　public void draw()<BR>　　{<BR>　　　System.out.println("Square.draw()");<BR>　　}<BR><BR>　public void erase()<BR>　{<BR>　　System.out.println("Square.erase()");<BR>　}<BR>}<BR><BR>package com.javapatterns.simplefactory.exercise;<BR><BR>public class BadShapeException extends Exception<BR>{<BR>　public BadShapeException(String msg)<BR>　{<BR>　　super(msg);<BR>　}<BR>}<BR><BR><BR>描图员(Art Tracer)系统使用方法如下 <BR><BR>try<BR>{<BR>ArtTracer art = new ArtTracer();<BR><BR>art.factory("circle");<BR>art.factory("square");<BR>art.factory("triangle");<BR><BR>art.factory("diamond");<BR>}<BR>catch(BadShapeException e)<BR>{<BR>...<BR>}<BR><BR><BR>2。工厂模式<BR>3。抽象工厂模式  <img src ="http://www.blogjava.net/leishiran/aggbug/30135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leishiran/" target="_blank">googlor</a> 2006-02-10 14:42 <a href="http://www.blogjava.net/leishiran/articles/30135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>