zoukankan      html  css  js  c++  java
  • servlet介绍及总结

    一:servlet开端
    1.servlet是什么?

    a.就是一个java类
    b.服务器端的小程序
    c.处理用户请求
    

    2.servlet的实现:

    a.实现Servlet接口
    b.继承GenericServlet类
    c.继承HttpServlet类
    

    3.编写Servlet:

    a.新建web项目
    b.编写Servlet实现类
    c.在web.xml中部署Servlet
    d.发布项目,访问
    	http://localhost:8080/helloservlet/hello
    

    二:helloServlet详细
    1.servlet的执行流程
    Tomcat结构:

    	Web服务器
    		web.xml
    	Container
    		Servlet类
    

    请求流程图:
    浏览器 Web服务器 Servlet类

    	描述:用户发起一个请求后,由服务器接受处理,根据web.xml文件中的配置信息,
    	查找所请求的资源(访问路径)是否存在,如果不存在则返回错误(404);当找到
    	资源后(servlet),检查该Servlet对象是否存在,如果不存在则创建该对象,如果
    	存在则执行相应的处理方法.处理方法执行以后将返回处理结果给web服务器,web
    	服务器根据结果进行相关处理后,返回给浏览器,浏览器显示相应的处理结果.
    

    2.servlet生命周期

    实例化(无参数的构造方法)
    初始化init()
    service()服务  -->  可以多次调用
    destory()销毁
    
    servlet类的实例化时机:
    	a.配置容器启动时调用(容器启动时就会实例化);
    		<load-on-startup>0</load-on-startup>
    	b.当请求时,该servlet对象不存在(超时期之后)
    

    3.servlet配置详解

    每写一个selvlet类,就需要配置一个servlet
    每个servlet都有三个名字:类名,servlet-name,访问名
    	servlet-name:唯一(与类名相似)
    	访问名:访问路径(可以有多个)
    

    三:HttpServletResponse对象
    1.HttpServletResponse对象的产生:

    当服务器接受到请求后会产生两个对象:请求对象和响应对象,并且将这两个对象给Servlet
    

    2.响应数据:

    getOutputStream():字节流数据
    getWriter():字符流数据
    getOutputStream和getWriter互斥,不共戴天
    原因:当调用getOutputStream或getWriter后,服务器接收后会将数据进行处理.处理完成后
    	会检查流对象是否关闭,如果没有关闭,服务器会自动关闭
    

    3.ServlerResponse对象的设置内容编码方法

    setContentType("text/html;charset=utf-8");
    指定响应内容的编码格式(浏览器的编码)
    

    4.响应html文档
    分析一个书籍管理系统:

    	book{
    		ID,
    		Name,
    		Price,
    		Author,
    		pubDate
    	}
    	建表:
    		CREATE TABLE `book` (
    		  `id` int(11) NOT NULL AUTO_INCREMENT,
    		  `name` varchar(50) DEFAULT NULL,
    		  `price` double(10,2) DEFAULT NULL,
    		  `author` varchar(50) DEFAULT NULL,
    		  `pubDate` date DEFAULT NULL,
    		  PRIMARY KEY (`id`)
    		) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    	在项目中新建实体类book,放于cn.lkzlg.entity
    	
    	分析功能,先做显示所有书籍
    		先做数据查询功能--
    		由于对数据的操作有很多,如增加,修改,查询,删除等于数据库交互的操作,
    		所以将这些操作放于一个类中,取名:BookDao(data access object 数据访问对象)
    		建一个dao包:该包下存放所有与数据库相关的操作
    	编写BaseDao类
    	编写BookDao类
    	编写ListServlet类
    

    四:HttpServletRequest对象
    1.HttpServletRequest 请求对象. 从客户端发送请求,服务将会创建该对象
    2.有哪些请求?

    a.在浏览器地址栏,直接输入url地址
    b.超链接<a href="url"></a>
    c.js中:location.href="url";
    d.Form表单的提交
    注:	如果使用get提交,那么所提交的参数是追加到url后面;
    		以?name=value&key=value&key=value这样的方式追加
    		a,b,c都是get方式,d如果method="get"也是get提交
    	如果使用post提价,那么数据将会被封装到form data;
    Get和Post的区别:
    	get:长度有限,安全性较差,效率相对于post高
    	post:长度没有限制,安全性较get好,效率相对于get差 (文件上传)
    

    3.新建add.html
    4.编写AddServlet类
    5.书籍管理系统修改分析
    1).在查询所有书籍列表时,点击修改链接,进行修改
    2).跳转到修改书籍页面

    以上操作须有两个步骤来完成:
    	a.点击 修改 进行查询的Servlet.在查询的Servlet中,要根据被点击的书籍
    		的id去数据库中查询该id所对应的书籍记录.
    	分析查询Servlet:
    		由于查询Servlet需要id去查询指定的书籍记录,那么要将id传给查询Servlet
    		将数据提交到Servlet中有两种方式:post和get; post方式需要表单,get方式可以指定超链接
    		若是post方式:
    			<form action="selectById" method="post">
    				<input type="hidden" value="2" name="id"/>
    				<input type="submit" value="修改"/>
    			</form>
    		若是get方式:
    			将form中的method设为get
    			<a href="selectById?id=2">修改</a>
    	b.将查询结果展示浏览器:
    		在编辑修改页面时,需要将书籍对象的值设入表单域中
    		注意:需要将id以隐藏域的方式进行设置,因为在修改数据时,需要根据id来修改
    

    五:重定向与转发
    1.重定向:由resp.sendRedirect("url");实现。
    2.当使用重定向时,服务器会将重定向的地址("list")交给浏览器.浏览器
    根据新的url,重新发起一个新的请求

    六:request获取其它表单数据(例:register.html和RegServlet类)

    html表单编写
    AddServlet类获取数据的处理
    

    七:request中的其它方法(例:HelloServlet类)

    req.getHeader("Host");
    req.getHeaderNames();
    req.getContextPath();
    req.getRequestURI();
    req.getRequestURL();
    req.getRemoteAddr();
    req.getRemoteHost();
    

    八:乱码的解决
    提交数据:

    	post提交 设置:req.setCharacterEncoding("utf-8");
    	get提交: 
    		a.需要转换:
    			String name = req.getParameter("name");
    			name = new String(name.getBytes("iso-8859-1"),"utf-8");
    		b.还可以设置tomcat:
    			conf-->server.xml-->在端口号port=8080的Connector标签里加上
    				URIEncoding="utf-8"
    

    响应数据:

    	设置的在网络传递编码,默认为iso-8859-1
    	resp.setCharacterEncoding("utf-8");
    	设置浏览的编码
    	resp.setContentType("text/html;charset=utf-8");
    

    解决不同浏览器编码不一致的问题,设置useBodyEncodingForURI的值

    	<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="utf-8"
    		   useBodyEncodingForURI="true"/>
    

    //--------------------------------------------------------------
    ServletContext对象学习:

    	问题:
    		不同的用户使用相同的数据
    	解决:
    		ServletContext对象
    	特点:
    		服务器创建
    		用户共享
    	作用域:
    		整个项目内
    	生命周期:
    		服务器启动到服务器关闭
    	使用:
    		获取ServletContext对象
    				//第一种方式:
    					ServletContext sc=this.getServletContext();
    				//第二种方式:
    					ServletContext sc2=this.getServletConfig().getServletContext();
    				//第三种方式:
    					ServletContext sc3=req.getSession().getServletContext();
    		使用ServletContext对象完成数据共享
    				//数据存储
    					sc.setAttribute(String name, Object value);
    				//数据获取
    					sc.getAttribute("str") 返回的是Object类型
    				注意:
    					不同的用户可以给ServletContext对象进行数据的存取。
    					获取的数据不存在返回null。
    		获取项目中web.xml文件中的全局配置数据
    				sc.getInitParameter(String name); 根据键的名字返回web.xml中配置的全局数据的值,返回String类型。
    												  如果数据不存在返回null。
    				sc.getInitParameterNames();返回键名的枚举
    			配置方式:注意 一组<context-param>标签只能存储一组键值对数据,多组可以声明多个  <context-param>进行存储。
    				  <context-param>
    					  	<param-name>name</param-name>
    					  	<param-value>zhangsan</param-value>
    				  </context-param>
    			作用:将静态数据和代码进行解耦。
    		获取项目webroot下的资源的绝对路径。
    			String path=sc.getRealPath(String path);	
    			获取的路径为项目根目录,path参数为项目根目录中的路径
    		获取webroot下的资源的流对象
    			InputStream is = sc.getResourceAsStream(String path);
    			注意:
    				此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。
    				path参数为项目根目录中的路径
    

    ServletConfig对象学习:

    	问题:
    		如何获取在web.xml中给每个servlet单独配置的数据呢?
    	解决:
    		使用ServletConfig对象
    	使用:
    		获取ServletConfig对象
    		获取web.xml中的配置数据
  • 相关阅读:
    【习题整理】分块+莫队(未完待续)
    【bzoj4198】【Noi2015】荷马史诗
    【bzoj2006】【NOI2015】超级钢琴
    【bzoj1029】【JSOI2007】建筑抢修
    【bzoj1483】【HNOI2009】梦幻布丁
    【bzoj4195】【NOI2015】程序自动分析
    Rearrangement inequality
    hdu1047
    hdu1046
    hdu1045
  • 原文地址:https://www.cnblogs.com/itzlg/p/10699629.html
Copyright © 2011-2022 走看看