1.什么是Servlet
Servlet是sun公司开发的一门动态Web技术,servlet运行在Web服务器或应用服务器上,作为来自Web浏览器和Web服务器上的数据库的中间层,Sun在其ApI中向用户提供了Servlet接口,用户想实现动态向浏览器输出数据只需两个步骤:1.实现Servlet接口,2.将此java类部署到Web服务器上
2.Servlet能做什么
接收浏览器数据(显示数据:表单 隐士数据:cookies,压缩文件等)
对数据做处理:可能调用数据库,调用其他Web服务,直接处理等
响应给客户端:显示数据(文档/图片/二进制文件等),隐士数据(设置cookies等)
3.Servlet生命周期
构造方法(一个servlet只创建一个对象)--->init()实例化,执行一次---->service()方法,可多次执行 ----->destory()销毁
一般实现Servlet接口 或继承HttpServlet
注意:servlet是多线程的 对共享数据操作有线程不安全问题 解决方法:加同步 或避免使用实例变量
同步(懂了)
public class ConcurrentTest extends HttpServlet { 2 PrintWriter output; 3 @Override 4 protected void service(HttpServletRequest request, HttpServletResponse response) 5 throws ServletException, IOException { 6 String username; 7 response.setContentType("text/html;charset=gb2312"); 8 username=request.getParameter("username"); 9 synchronized(this){ 10 output=response.getWriter(); 11 try { 12 //为了突出并发问题,在这设置一个延时 13 Thread.sleep(5000); 14 output.println("用户名:"+username+"<BR>"); 15 } catch (Exception e) { 16 e.printStackTrace(); 17 } 18 } 19 } 20 }
避免实例变量(没看懂)
public class ConcurrentTest extends HttpServlet { 2 @Override 3 protected void service(HttpServletRequest request, HttpServletResponse response) 4 throws ServletException, IOException { 5 PrintWriter output; 6 String username; 7 response.setContentType("text/html;charset=gb2312"); 8 username=request.getParameter("username"); 9 synchronized(this){ 10 output=response.getWriter(); 11 try { 12 //为了突出并发问题,在这设置一个延时 13 Thread.sleep(5000); 14 output.println("用户名:"+username+"<BR>"); 15 } catch (Exception e) { 16 e.printStackTrace(); 17 } 18 } 19 } 20 }