1、手工创建一个Web工程

 作为一个java web开发程序员,手工创建一个Web工程应该是必须会的。 首先我们必须了解Java web工程的基本机构和每个部分究竟完成什么样的作用。
  1. 创建一个文件,比如MyFirstWebProject, 此为web工程的根目录
  2. 在其下建立WEN-INF文件夹,必须注意的是要大写, 因为这是规范,方便WEB容器的读取。
  3. 在WEB-INF下建立两个文件夹和一个文件,分别叫做:lib、classes文件夹和web.xml文件。 lib用于存放需要用到的jar包等,包括mysql驱动等;classes文件夹用于存放编译好了的java文件,它们是以class文件存在在这个目录下的;最后是web.xml文件,它必须以<web-app>作为该xml文件的根标签。
  4. 在工程MyFirstWebProject目录下建一个文件夹pages(这不是必须的)用于存在index.html等页面,把需要的页面写好放在该文件夹下面就可以了。
  5. 将整个工程打成war包,放入tomcat或jboss等web容器的webapp目录下,启动容器,则通过http://localhost:8080/MyFirstWebProject/pages/index.html就可正常访问html页面了。 打war可以在进入工程MyWebProject中,用"jar -cvf MyFirstWebProject.war ."即可。
  6. 在Tomcat6.0上经过测试,以上的做法是正确的。 同时注意, 如果没有配置JAVA_HOME的环境变量,直接点击Tomcat6.0会迅速消失, 此时应该用命令行启动。
 
2、Web常用方法
【注意】action是以Web程序的根目录作为相对参照物,“../servletForm”表示在本页面上面的一级目录来找到servletForm, 而"/servletForm"则以在web.xml中的配置为参考,它是在'/'根下面。
  1. <form action="../servletForm" method="get"> 
  2. username: <input type="text" name="uname"> 
  3. <input type="submit" value="提交"> 
  4. </form> 
(1)页面Form表单
index.html
  1. <form method="get" action="handle"> 
  2. <table> 
  3.     <tr> 
  4.         <th><label for="usercode">工号</label></th> 
  5.         <td><input type="text" id="usercode" name="usercode" /></td> 
  6.     </tr> 
  7.     <tr> 
  8.         <th><label for="ip">机器IP</label></th> 
  9.         <td><input type="text" id="ip" name="ip" /></td> 
  10.     </tr> 
  11.     <tr> 
  12.         <th><label for="reason">申请原因</label></th> 
  13.         <td><input type="text" id="reason" name="reason" /></td> 
  14.     </tr> 
  15.     <tr> 
  16.         <th><label for="submit"></label></th> 
  17.         <td> 
  18.         <button type="submit" id="submit" name="submit">submit</button> 
  19.         <label for="reset"></label> 
  20.         <button type="reset" id="reset" name="reset">reset</button> 
  21.         </td> 
  22.     </tr> 
  23.  
  24. </table> 
  25. </form> 
 web.xml
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
  5.     id="WebApp_ID" version="2.5"> 
  6.  
  7.     <display-name>server.manager</display-name> 
  8.     <servlet> 
  9.         <servlet-name>default</servlet-name> 
  10.         <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class> 
  11.         <init-param> 
  12.             <param-name>useFileMappedBuffer</param-name> 
  13.             <param-value>false</param-value> 
  14.         </init-param> 
  15.         <load-on-startup>0</load-on-startup> 
  16.     </servlet> 
  17.     <servlet> 
  18.         <servlet-name>HandleServlet</servlet-name> 
  19.         <servlet-class>com.alibaba.servermanager.HandleServlet</servlet-class> 
  20.     </servlet> 
  21.  
  22.     <servlet-mapping> 
  23.         <servlet-name>HandleServlet</servlet-name> 
  24.         <url-pattern>/handle</url-pattern> 
  25.     </servlet-mapping> 
  26.  
  27.     <welcome-file-list> 
  28.         <welcome-file>index.html</welcome-file> 
  29.     </welcome-file-list> 
  30.  
  31. </web-app> 
 
(2)Servlet处理及跳转
 
  1. import java.io.IOException; 
  2. import javax.servlet.*; 
  3. import javax.servlet.http.*; 
  4.  
  5. public class HandleServlet extends HttpServlet { 
  6.  
  7.     public void doGet(HttpServletRequest request, HttpServletResponse response) 
  8.             throws ServletException, IOException { 
  9.         this.doPost(request, response); 
  10.     } 
  11.  
  12.     protected void doPost(HttpServletRequest request, 
  13.             HttpServletResponse response) throws ServletException, IOException { 
  14.         String usercode = request.getParameter("usercode"); 
  15.         HttpSession session = request.getSession(); 
  16.         session.setAttribute("usercode", usercode); 
  17.         System.out.println("usercode: " + usercode); 
  18.         response.sendRedirect("success.jsp"); 
  19.     } 
 或者使用request来传递数据:
 
  1. request.setAttribute("hello", "Hello World");
  2. request.getRequestDispatcher("/jstl_el.jsp").forward(request, response); 
 
 (3) jsp接收数据
 
  1. <body> 
  2. susercode: <%=session.getAttribute("usercode") %> 
  3. </body> 
 或在jstl_el.jsp页面中通过request方式取出参数
 
  1. <body> 
  2.     <li>普通字符串</li><br> 
  3.     hello(jsp脚本):<%=request.getAttribute("hello") %><br> 
  4.     hello(el表达式,el表达式使用$和{}):${hello }<br> 
  5. </body> 
 (4)配置tomcat的虚拟目录
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
 <Context path="" docBase="" reloadable="true" />
</Host>
Tomcat的conf\server.xml文件中上面配置 context的reloadable属性的时候,设置了path和docBase,
如果说path是Tomcat的wabapps目录下的项目名称,那么docBase是设置的那个路径呢?
答疑:
path对应的是我们每次在访问一个网站的时候在浏览器上输入的虚拟目录路径,而服务器上的具体的对应的目录就是docBase。实际上二者是一个映射过程。
 <Context path="/helloworld" docBase="d:\demoes\webdemo\WebRoot" reloadable="true" />
则可通过http://localhost:8080/helloworld/index.jsp来访问目录d:\demoes\webdemo\WebRoot下面的index.jsp页面。
 ============================================================
问题1:几秒之后自动跳转
2秒之后自动跳转,示例如下:
<meta http-equiv="refresh" content="2;URL=/page/frame/main.html">
或者
  1. <script type="text/javascript"> 
  2.     location="/page/frame/main.html" 
  3. </script> 
问题2:在jetty中允许修改页面,不锁定,在web.xml中配置如下:
  1. <servlet> 
  2.         <servlet-name>default</servlet-name> 
  3.         <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class> 
  4.         <init-param> 
  5.             <param-name>useFileMappedBuffer</param-name> 
  6.             <param-value>false</param-value> 
  7.         </init-param> 
  8.         <load-on-startup>0</load-on-startup> 
  9.     </servlet>