首页 > 代码库 > Servlet学习总结

Servlet学习总结

Servlet是sun公司提供的一门用于开发动态web资源的技术,我们也把实现了servlet接口的java程序,称之为Servlet

1、编写一个Java类,实现servlet接口。

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

/**
 * 这也是一个页面,一个特殊的页面
 * 完全使用Java编写的页面,甚至可以认为这是一个虚拟页面
 * Request:来自浏览器的请求(输入流)
 * Response:服务器给浏览器的响应(输出流)
 * @author Don
 * @date:日期:2017年4月1日 时间:下午3:30:11*
 * @version 1.0
 */
public class ServletTest extends HttpServlet {
    /**
     * doGet方式主要来源url的跳转
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
         /**
         * 当多线程并发访问这个方法里面的代码时,会存在线程安全问题吗
         * i变量被多个线程并发访问,但是没有线程安全问题,因为i是doGet方法里面的局部变量,
         * 当有多个线程并发访问doGet方法时,每一个线程里面都有自己的i变量,
         * 各个线程操作的都是自己的i变量,所以不存在线程安全问题
         * 多线程并发访问某一个方法的时候,如果在方法内部定义了一些资源(变量,集合等)
         * 那么每一个线程都有这些东西,所以就不存在线程安全问题了
         */
        int i=1; //若定义为全局变量则线程不安全
        i++;
        
        //若程序所需必须为全局变量的时,定义全局变量后,用如下方式
        synchronized (this) {//在java中,每一个对象都有一把锁,这里的this指的就是Servlet对象
            i++;
            try {
                Thread.sleep(1000*4);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            resp.getWriter().write(i+"");
        }
        
        System.out.println("GET通道");
        
        resp.setCharacterEncoding("UTF-8");
        //告诉浏览器这是个什么响应
        resp.setContentType("text/html;charset=UTF-8");
        
        PrintWriter out = resp.getWriter();
        out.print("<html>");
        out.print("<head>");
        out.print("<title>我的Servlet测试</title>");
        out.print("</head>");
        out.print("<body>这是我得第一个Java Servlet程序...</body>");
        out.print("</html>");
    }
    
    /**
     * doPost方式主要用来提交表单
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("POS通道");
        
    }
}

2、把开发好的Java类通过Web.xml部署到web服务器中。

在web.xml中配置url访问的Servlet,配置在<web-app></web-app>中

<servlet>
      <servlet-name>Servelet</servlet-name>
      <servlet-class>Servlet.ServletTest</servlet-class>
  </servlet>
  <!-- 一个Servlet可映射多个URL地址 -->
  <servlet-mapping>
      <servlet-name>Servelet</servlet-name>
      <url-pattern>/hello/good.html</url-pattern>  
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>Servelet</servlet-name>
      <url-pattern>/hello/good.php</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
      <servlet-name>Servelet</servlet-name>
      <url-pattern>/hello/good.aspx</url-pattern>
  </servlet-mapping>
  
  <!-- 通用匹配符 *和/ /*-->
   <servlet-mapping>
      <servlet-name>Servelet</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
   <servlet-mapping>
      <servlet-name>Servelet</servlet-name>
      <url-pattern>/action/*</url-pattern>
  </servlet-mapping>
  
  <!-- 缺省Servlet用于处理所有其他Servlet都不处理的访问请求 -->
   <servlet-mapping>
     <servlet-name>Servelet</servlet-name>
     <url-pattern>/</url-pattern>
   </servlet-mapping>

 

Servlet

Servlet学习总结