Servlet 学习

学习参考书目:Java Web 整合开发 王者归来

 

一、基础

客户端程序分为RCP/TCP。rich和thin。

网络程序的结构分为B/S和C/S。

从浏览器请求到服务器接收并处理回应的这种模式叫 请求-响应模式。 -------典型的Web应用程序的访问过程。

 

二、深入浏览器-服务器

在其中间起作用的是Servlet和HTTP协议。( ※  HTTP协议由Tomcat服务器和浏览器实现好了,程序开发者只需了解。

  •   浏览器发送的数据遵循HTTP协议,内容包括(访问方式Get or Post、HTTP版本、页面地址等)
  •   服务器返回的数据,二进制数据或者HTML文本,包括(HTTP版本号、响应日期Date、过期时间Expires、服务器软件BWS、输出总长度、输出类型、源代码)
  •   访问方式,两种常用,五种几乎不用。

          △ HTTP头数据。包括,User-Agent 浏览器信息;Accept 格式;Cookie 记录用户状态;Referer 单击链接的原地址。

 

         1、GET,查询内容显示在浏览器地址栏,网址不能超过256个字符。(search word)

                http://www.baidu.com/s?wd=Java 即 Telnet www.baidu.com 80 和 GET /s?wd=Java Http/1.0

         2、Post,大量数据,要求严格,提供数据类型和长度

                POST  /s  HTTP/1.1

                Content-Type

                Content-Length

                wd=Java

            

※ 实操:Telnet在cmd中演示。

  1.   Telnet  网址  80              --------连接HTTP协议,即访问网站的默认端口
  2.   Ctrl+) 回显
  3.   回车                                --------打开输入界面
  4.   GET/HTTP/1.0                --------访问方式Get,协议是HTTP 1.0,/ 表示访问首页
  5.   两次回车                         --------本命令结束换号;提交

 

三、Servlet概述和实现

 

1、工作流程

 

       Servlet是一种实现javax.servlet.Servlet接口的类

       主要处理业务逻辑,如读取数据库权限检查业务处理等。

     

        Servlet并没有执行方法,由Tomcat服务器调用Servlet方法来完成处理过程。

        Tomcat接收并解析,封装成两个对象,HttpServletRequest类型的requset对象(通过方法查询Http头文件)

                                                               和HttpServletResponse类型的response对象。

        把两个对象作为参数,代入到Servlet的相应方法中,如doPost(requset,response)和doGet(requset,response)

       还有一种方法是long getLastModified(HttpServletRequset requset)返回该文档的最后修改时间,默认为-1表示最新。

          

2、实现Servlet

       在JDK中javax.servlet.http.HttpServlet类已经实现了Servlet接口的所有方法。编写时直接继承覆盖需要的方法即可。

                UID为串行化版本统一标识符。

                 把Java对象转化字节序列的过程叫作对象序列化。(字节序列的用处是,保存在硬盘或者网络传输)

       

      

       重写doGet和doPost方法。(log为HttpServlet自带的日志函数输出信息到控制台)

       文档更新时间   getLastmodified 

 

        执行方法  

      1、设置两个对象的编码方式

      2、获取URI

      3、获取访问方式

      4、获取参数

      5、设置response文档类型

      6、创建PrintWriter的对象进行输出(注意flush和close)

        

  

3、配置Servlet

    在web.xml配置Servlet类文件访问方式 -------Web容器必须知道浏览器怎么访问这个Servlet。

    

     Servlet类文件用servlet标签。

     servlet类文件中必须配置标签servlet-name和servlet-class,

                             可选配置标签init-param(param-name和param-value)用来初始化参数。

                             可选配置标签load-on-startup用来配置该Servlet的加载方式,1为Tomcat启动加载,0为第一次请求才加载。

      

    

      访问方式用servlet-mapping标签。

     包含两个标签servlet-name和url-pattern。

     

       后者为访问方式。允许使用通配符进行通配符映射,这样无论用何种后缀都可以访问,可以达到隐藏服务器语言的目的。

        访问网址:/工程名+应用程序路径(如果使用通配符。后缀可以为.asp/.php/.java等等访问)

         

 

四、实现浏览器与客户端的信息交互-----请求与响应

 

1、获取request变量----采集客户端的信息

     浏览器发送的请求被封装成HttpServletRequest对象,这个对象包括了你的请求地址,请求参数,提交数据,上传文件,客户端IP,客户端操作系统。

         

             私有了四个方法,分别用来反馈客户端的文件类型、语言环境、浏览器信息和操作系统

     

     

          doGet方法

        本地IP,名称,端口号,语言环境,web根目录,访问方式,交互协议,查询字符串

               

      

        服务器名称,端口号,信息。客户端IP,端口号,用户,SessionID,URI,URL,协议头,servlet路径,用户标识,浏览器支持的文件格式,单击链接的原地址,UserAgent。

 

        页面输出

  

        结果(web.xml自行配置)

    

2、用response随机生成图片验证码----反馈信息

        服务器做出的响应封装成HttpServletResponse对象。操作这个对象即可对浏览器操作。用getWriter()方法获得PrintWriter对象(OutputStream子类)可以输出字符型数据(见上图),如果输出二进制数据则用getOutputStream获得ServletOutputStream对象输出。

      

      定义随机字符字典。编写获取随机字符,获取随机颜色,获取反色的三个方法。

  

       doGet方法

        设置输出类型,定义图片宽高,获取随机颜色和反色,获取一个随机字符,并放到session中。

        创建彩色图片bi,获取绘图对象g,设置字体,设置获取的颜色和反色,绘制背景,绘制随机字符,绘制随机降噪点。

        获取输出二进制数据的对象,JPEG类型编码,图片编码,输出。

  

       结果(web.xml自行配置)

<!DOCTYPE html>
<html>  
<head>  
<meta charset="utf-8"/>  
</head>  
<script>
	function reloadImage(){
		document.getElementById('btn').disabled =true;
		document.getElementById('identity').src='servlet/IdentityServlet?ts='+new Date().getTime(); 
	}
</script>
<body>
	<img src="servlet/IdentityServlet" id="identity" onload="btn.disabled=false;" />
	<input type= button value="换个图片" onclick="reloadImage()" id="btn">
</body>

</html>

        并未成功

       

 五、读取web.xml参数

 

1、初始化参数---在配置文件中配置变量无需更改servlet类。

         获取所有参数名称:getInitParameterNames( )

          获取初始化参数值:getinitParameter(String param)

            也可以用getServletConfig()获得ServletConfig对象,然后方法同上

 

            WEB/INF下的文件是受保护的,从客户端不能通过浏览器直接访问,只能由服务器访问或者在页面通过权限程序可以访问。如下,通过用户名密码登录验证获得机密文件的权限。

           

            这里doGet方法写了前台页面,表单提交方法用post 

                       

  

 

            结果

                          

           输入正确则跳转下面页面,也就是机密页面,若不正确则不跳转。

 

 

2、上下文参数---全局参数<context-param>

        获取context-param可以使用ServletContext对象。

        Servlet中通过getServletConfig( ).getServletContext( )来获取ServletContext对象。---获取对象

        通过getInitParameterNames( )方法获取所有context-param即全局参数名称。         ---获取参数名称

         通过getInitParameter( )方法获取指定名称的参数。                                                  ---获取参数

          下面实例是:读取文档参数

  

          配置文件

        

            结果

         

 

3、资源注射---Java5.0引入的注解

        ※ 支持JavaEE5规范、Tomcat6.X以后的版本

       之前的例子都是在servlet中编写代码读取web.xml的初始参数

         而用资源注射,不需要主动读取资源,在tomcat启动时将把配置信息自动注射到servlet。

————————————————————————————————————————————

         资源注射,通过Java5.0引入的新特性注解完成的,注解是一种特殊的接口,标志符号是“@”。

@Resource(name="messageNameInWebXml")
private String message ;

          简化: private @Resource( name="messageNameInWebXml") String message ;

         而在web.xml中用<env-entry>标签配置资源。※只能配置java.lang包下的标准类型的变量如String、Integer、Double。

     

          

                

                    servlet与servlet-mapping自行配置。

                   结果:

                

4、使用JNDI获取资源

        资源注射的原理是JNDI,即Java命令与目录接口(Java Naming and Directory Interface),也可以不使用@Resource,通过查找JNDI同样可以获取到这三个资源。

// 实例化一个Context对象
Context ctx = new InitialContext();
// 查找资源
String message=(String)ctx.lookup("message");
Integer i=(Integer)ctx.lookup("i");
String persons=(String)ctx.lookup("persons");

5、注射数据源(留)

 

※两条命令解决tomcat8080端口被占用

 

netstat -ano | findstr 8080

taskkill -pid 进程pid -f

 

六、  提交表单信息        

            Web程序的任务就是实现服务器端与客户端浏览器的信息交互。通过表单以参数的形式提交给服务器。

            提交信息的方式包括GET与POST,分别触发Servlet的doGet方法和doPost方法。最早HTTP协议设计的是,GET用于从服务器获取信息(请求信息),而POST用于向服务器提交数据(普通POST提交与可上传文件的POST提交)

         

一、GET实现搜索引擎  

            当以GET方式提交数据时,浏览器把表单内容组织成一个查询字符串,各变量以&连接,然后以Servlet路径加问号“?”加查询字符串的形式获取服务器内容。

             如向某个Servlet提交两个参数a和b,http://servername/someServlet?a=aValue&b=bValue。

            Servlet中HttpServletRequest对象通过方法getParameter("a")获取到a的值aValue。

            外接搜索引擎API 略。

            要想在搜索引擎搜索中文,需要修改Tomcat目录下的\conf\server.xml里设置默认的GET的编码方式,不指定将默认是ISO-8859-1编码。

 
<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" URIEn
coding="UTF-8"/>URIEn
coding="UTF-8"/>

 

 

 

 

 

二、POST表单提交个人信息

        同GET方式一样,可以通过HttpServletRequest对象的getParameter(String param)方法来获取param对应的参数值。但POST方式不会使用?和&符号来组织一个QueryString,因此使用getQueryString()会返回null。

           下面用一个例子提交用户信息表单。

      

  

            省略配置文件。

 

三、POST上传文件

       

        (1)客户端

        Web文件上传也是使用POST,与之前表单不同的是,需要设置FORM的enctype属性为multipart/form-data,因为文件会比较大所以设置该参数指定使用二进制上传;不设置默认将使用过ASCLL向服务器发送数据,导致失败。

            文件域用<input type="file"/>

          

          

         结果

    

        (2)服务器端

         由于上传的是二进制数据,因此Servlet不能简单地通过HttpServletRequest的getParameter()方法来获取文本域以及文本域内容。要想获取内容必须根据HTTP协议所规定的格式解析浏览器所提交的Request。

             于是使用类库来完成。如SmartUpload(是一个商业类库,解析的数据会存放在内存里,速度快,但容易发生内存溢出),Apache Commons Fileupload。由于DiskFileUpload已经过时,于是用ServletFileUpload代替。下载两个开源包:Commons-fileupload、Commons-io。

 

 

四、带进度条的文件上传(Session&Ajax)

五、实现文件下载

 

七、Servlet生命周期

八、Servlet之间的跳转

九、线程安全

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值