我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > 如何写一个servlet以及servlet的注意事项
总共48086条微博

动态微博

查看: 4020|回复: 8

如何写一个servlet以及servlet的注意事项

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-03-04 20:31:17 |只看该作者 |倒序浏览
    一、servlet基础
    ( o) A- C4 S" l  n: c7 q        1、什么是servlet?
    $ M, }/ E) n: v- D) @% |- w8 Y                sun公司制订的一种用于扩展web服务器功能的' S3 k' Z( h* B; x4 Y. Q/ `
            组件规范。
    0 D; A6 O. t3 V6 U8 B" U; Z7 X3 X                1)扩展web服务器功能:9 ~# D, m, T( Q5 f; C
                            早期的web服务器只能够处理静态资源的请
    " g5 p* t7 v1 i% {  P7 s- X$ e                求,即事先要将html文件写好,存放在服务器5 k; g# Z' u6 C
                    上,不能够生成动态的html(也就是,通过' s; o; b/ ?4 @& g8 L& s/ ~
                    计算,生成一个新的html)。
    : u- f3 g! q8 _  ^. B7 v                        所谓扩展,即让web服务器能够生成$ D) p1 ^) q: h& e
                    动态页面。
    ; y$ G& z2 d& n                        扩展的方式,早期是采用CGI(common! G# d0 J9 A  I* |+ a; \2 ^
                    gateway interface)技术。
    % n. d9 r; e9 U6 Q9 T/ n0 }- ?                        因为采用cgi程序编写的代码,可移植性
      W+ \( S( C& O0 P                差、编程相当复杂、如果处理不当,会严重4 Q6 b3 f9 W  R5 m3 Z
                    影响性能。所以,用得越来越少了。5 N( n) f1 g- h" z0 m+ \8 w
                            现在,采用的是容器+组件的方式来扩展。/ M( U5 j0 \$ x- ^% e! s- T
                    2)容器与组件
    7 j# z0 o& T) U0 u/ M9 S  \+ X                        组件是什么?
    3 {" a1 x; Y; \# U2 ^                        符合规范,实现特定功能,并且可以部署
    - D; {5 g8 _' Z  U  v                在容器上的软件模块。- G, l6 X& j8 R# z( j
                            容器是什么?# E: b7 Y. Q7 C# l$ Z; z1 N
                            符合规范,为组件提供运行环境,并且
      m/ u6 r* a9 }- s9 `( p                管理组件的生命周期(将组件实例化,调用
    6 w* @/ }: F+ e4 B0 B' t, X! N4 N                其方法、销毁组件的过程)的软件程序。
    7 L" ]5 e9 ~' Y: U# e                        采用容器与组件这种编程模型的优势:
    9 z3 `/ Z; _7 W0 F- ?7 K                容器负责大量的基础服务(包括浏览器与% C6 W7 a" O( [5 C: ]% b
                    服务器之间的网络通讯、多线程、参数传递
    ' w. j( b- [# s* O1 t                等等)。而组件只需要处理业务逻辑。另外,
    5 S3 ~3 Y% Z9 }  E                组件的运行不依赖于特定的容器。
    # ~% ^5 U  N9 {! ]2 l0 ]  y* U        2、如何写一个servlet?
    - k) \4 Q' A2 w# p( W$ M+ e: l                 1)写一个java类(servlet只能使用java语言1 _- [& z/ u( U. l1 J% l: f' ?# j: L
                     来编写)        ,实现Servlet接口或者继承HttpServlet8 C  A; c6 r3 \7 I, g! L3 I7 I
                     抽象类。
    - @( Y! \; m5 O1 S6 o                 2)编译& k6 u8 y2 T! S: N* a. s6 g
                     3)打包
    2 Z: |& q: t/ _3 j% t5 e* E                         建立一个如下的目录结构
      {# s! C' w2 K' C- {4 r8 y                                 appname
    # A4 y2 \% ~$ v                                         WEB-INF
    4 f' A/ f: b4 F$ q                                                 classes(存放.class文件)3 y, V0 ~8 \  V  R
                                                     lib(存放.jar文件,该文件夹可选)( b) ?$ S( h/ ]0 Z5 i8 R$ P* ]7 k" S
                                                     web.xml(部署描述文件)' x1 o, S9 T" ?1 A4 N. f! h! G1 E3 G
                             该目录结构可以使用jar命令打成一个3 b$ h3 D# l; M7 M# E
                             .war为后缀的文件。- W2 X8 j; [1 j# n
             4)部署
    $ d: N" [$ L4 u2 `/ j8 u% c* h                         将第三步的整个目录结构或者是对应的
    + V5 ]2 C/ \4 Y' ?) Y: X                 .war文件拷贝到服务器特定的目录。
    * {, j) @0 T1 T$ S; m: b" u3 b4 {         5)启动服务器,访问servlet
    * P% o* `; D2 c& U& V' n+ _* }                         http://ip:port/appname/servlet的url-pattern配置7 b6 z6 F; q2 s0 Y2 N
                            
    6 B! T% |# A. _% s- W# N, u! o        3、tomcat的安装与简单的使用9 P5 Y5 e4 N: z$ D# n+ S( M
                     安装:) n) I0 f* }9 a$ C  T, R# I2 U  `
                             step1 将tomcat解压到/home/soft01下。
    & m/ G: M: j. q- w5 L7 o                         step2 配置环境变量
      Z) e$ S3 |+ v. S7 S, k                                                 cd /home/soft01; X/ T: k3 Y; t
                                                     vi .bash_profile
    6 d( `. E; n5 R) d5 S2 K2 ^9 B/ Q                                                 JAVA_HOME:jdk的主目录! [0 a, p) A% j* I) y
                                                     CATALINA_HOME:tomcat的主目录
    ' H$ |. C/ u% q; D# C5 a                                                 PATH:CATALINA_HOME/bin
    % w* S* z0 m+ |% T% M6 X                         step3 启动tomcat$ w4 C0 a" V& B$ ]
                                                     cd /home/soft01
    7 `' }  v; i7 O+ {                                                 cd /tomcat主目录/bin
    % j" c8 a/ w" C$ N9 r                                                 sh startup.sh
    7 F! V+ M. }% F3 B                                                 接下来,在浏览器地址栏输入:$ O3 p3 H+ v( A4 n  ~
                                                     http://localhost:8080
    5 {. V  Y" f, u8 g                                                 关闭tomcat
    ) B" k: _; L6 d                                                 sh shutdown.sh
    1 d( _6 C% G+ ~                 目录结构(了解):
    . r! X5 G" g* v2 W$ Z$ t" D$ e, u                                 bin:启动和关闭服务器的一些脚本。8 v6 w7 W4 c# p! N. W* E
                                     common:共享(部署在该服务器上的
    5 D$ Z9 z% w0 u2 k                                 所有程序都可以使用)的一些jar包。# j" U  S9 I9 f% G! M
                                     conf:服务器的一些配置文件。: W6 Z( R' p1 n; S+ K7 c$ |
                                     webapps:部署目录! ^) r5 P8 L1 h& V
                                     work:服务器运行时,生成的一些临时文件。
    : H9 ]5 \" v% G- b% g                                
    # J$ @3 _# |4 Q% U        4、servlet是如何运行的; B! O- ^5 o0 H6 h; R+ Y! n1 |
                    比如,向浏览器地址栏输入
      v; a& U/ Z' @$ a( }. W* a+ Y                http://ip:port/helloweb/sayHello?name=zs& J: \; C) i' j$ Q" K
                    1)浏览器使用ip,port连接服务器。
    % }9 r4 D# I2 e( J6 \                2)浏览器将请求数据按照http协议打成一个
      P/ F" }/ ~: |: A- `& ^                数据包(请求数据包)发送给服务器。请求数据
    ) P# N, `9 G7 d, D8 e) f                包的内容包含了请求资源路径
    5 F/ D* ]7 K2 G+ }& ?1 D7 b, ^                (/helloweb/sayHello?name=zs),另外,在7 f8 C. ~2 l) }8 E. E9 ]
                    请求数据包当中,还会包含浏览器自动生成( \* ?: k9 y) q
                    的一些信息。
    1 p# V+ \5 e. C9 A/ k                3)服务器创建两个对象:请求对象和响应对象。
    1 L3 ?4 Q" u. n) H                服务器解析请求数据包,将解析之后的数据# r& \/ z: h* A: q: r
                    存放到请求对象里面,方便servlet读取请求
    # m" D; y9 |& T                数据(因为servlet不用解析请求数据包,如果" Q8 G; D' v. B) o, U  I
                    要解析,需要理解http协议)。
    $ @0 s( e% J) }8 k                请求对象是HttpServletRequest接口的一个实现。( @6 ?+ T7 K3 ]  {5 f
                    响应对象是HttpServletResponse接口的一个实现。
    % h9 r- r: ]: J6 U7 N. Y$ U                响应对象由于存放servlet处理的结果。* U* _. a7 {3 ]% j* [. V
                    4)依据请求资源路径找到相应的servlet配置,
    , K  G0 U4 ~$ y5 X, O                通过反射创建servlet实例。然后调用其
    + O3 W- m. L1 ?/ x: d                service()方法。在调用service()方法时,% _% c- ^9 t2 i* Z4 X( f8 O, ^2 u
                    会将事先创建好的请求对象(request)和3 E# o9 Y8 X2 {$ k% T
                    响应对象(response)作为参数进行传递。
    ' F, P+ U2 Z1 k* h2 u" p$ d                在servlet内部,可以通过request获得请求
    " n5 S2 ]+ h# Z                数据,或者通过response设置响应数据。
    ! P6 b. i5 k0 I6 q. C# O                5)服务器从response中获取数据,按照- y9 l* G, q* N* _0 g# F5 J  b' W$ d
                    http协议打成一个数据包(响应数据包),/ r" \3 V: h; k& Y8 _
                    发送给浏览器。. V  m7 T5 O5 p5 ^, {* p' c
                    6)浏览器会解析响应数据包,取出相应的数据,
    6 u+ r9 ]* q1 P+ }7 W3 q. ^, r  P                生成相应的界面。" n2 A( X5 W. w9 B& f
            8 W. U' f* z: g& C. p
            5、使用ide(myeclipse)开发servlet# R9 G4 w$ Q2 c# t. ]3 s
                    1)配置myeclipse
    8 h% J3 k) y! @% f1 R7 Z% l; E                myeclipse管理tomcat。
    0 o& V. P2 d' w! C                2)建一个web工程& m$ W6 F: W9 J/ H. D
                    / O/ A3 }/ v3 A) b
            练习:) H; I3 r2 z& A- e# z
                    新建一个web工程 "web01_exec"
    * q( Z4 b+ Q& x                在工程底下,创建一个DateServlet。
    $ d! }$ U: u- W8 i- x! g                可以访问该servlet,输出当前系统(! ?! x# G) l$ h7 ?
                    tomcat服务器所在的机器)时间。
    2 P) m5 R2 m* Y                比如:/ c8 d- ^6 _* V' O1 s6 @3 B8 ~
                            http://localhost:8080/web01_exec/date. G; o  c6 D4 z" Q5 n
                    在浏览器端,显示
    ( ^! T) O1 V5 s3 c8 S6 V                        now:2011-11-21
    3 h" V0 W* x# c) j$ i; g: v要注意的问题:
    8 K2 R  v& B: M' j  t                1、要实现Servlet接口或者继承HttpServlet.
    - \; z9 K& |, g# Y                2、service()方法名称、参数、异常类型
    0 G/ s- x% K6 e4 x" B* z1 ?                要写对!- v+ @' w6 i1 a8 x; E
                    3、web.xml配置文件中,类名不要写错!
    ' _' w/ h- G/ w. D# n1 a+ [                servlet-name不要写错。
    * {' a, a0 w9 L! d# o" b6 s/ U                4、在浏览器输入访问地址时,地址不要: c( P: z: q$ L' L! b/ c' ^7 w6 ^
                    写错。应该按照+ [3 J) ^! }6 b3 E( s, o
                    http://ip:port/appname/servlet的url-pattern
    + X& p; A" G3 d8 _  L                去访问。
    % O0 N& G. c' `# c                5、记得先部署,记得服务器必须已经运行了,
    7 f) \; |) |% e                不然不能访问。! h9 U8 A) E/ b( |% L. @
                    6、如果报500错误,一般是你的程序写错了,
    8 n$ }  E5 _3 [6 K                如果报404错误,访问地址有错。如果是405,) p1 H8 v1 t& e9 g  I. R
                    请检查你的service方法名,包括方法参数等。' J9 c, @2 T7 H# j
           
    ! U) a" C, S$ S6 S, m* K8 K' |' @! |; W

    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    2

    主题

    0

    听众

    148

    金钱

    三袋弟子

    该用户从未签到

    沙发
    发表于 2015-10-15 13:46:58 |只看该作者
    看了看  学习学习  哈哈哈哈
    回复

    使用道具 举报

    1

    主题

    3

    听众

    341

    金钱

    四袋长老

    该用户从未签到

    板凳
    发表于 2016-03-17 22:00:56 |只看该作者
    学习一下。谢谢
    回复

    使用道具 举报

    1

    主题

    3

    听众

    341

    金钱

    四袋长老

    该用户从未签到

    地板
    发表于 2016-03-17 22:01:46 |只看该作者
    学习一下。谢谢
    回复

    使用道具 举报

    woniu 实名认证   

    2

    主题

    0

    听众

    330

    金钱

    四袋长老

    该用户从未签到

    5#
    发表于 2016-04-12 12:22:17 |只看该作者
    这个项目太棒勒!下下来学习下!
    回复

    使用道具 举报

    46

    主题

    1

    听众

    584

    金钱

    三袋弟子

    该用户从未签到

    80后

    6#
    发表于 2016-10-30 11:30:06 |只看该作者
    、要实现Servlet接口或者继承HttpServlet.* n* l& S3 Q5 V# d& q* P$ u
                    2、service()方法名称、参数、异常类型* }# ~) P+ s3 [
    ( o8 \! u" Y+ c2 y                要写对!
    % Q* l2 S% n# \4 A( F                3、web.xml配置文件中,类名不要写错!6 |& [1 U4 J) s: _4 h
    / s6 m" [4 c& _& L" i$ G                servlet-name不要写错。1 i9 C; B( h8 k- d9 j8 ~  Q
    6 R) C8 ~2 P8 t  I7 c" l                4、在浏览器输入访问地址时,地址不要% C; q3 G4 ?0 D$ E. D1 d3 y0 b6 U8 c$ S7 n& X
                    写错。应该按照( L5 ~% ~. n9 J! a7 o* T
                    http://ip:port/appname/servlet的url-pattern4 ?  B- N; S! }. i/ n! N
                    去访问。$ [$ R  y/ ]! I
    # m, u/ D3 }  ~8 d8 ~- k$ o: k                5、记得先部署,记得服务器必须已经运行了,6 j  O$ f" c" `; R' o/ A& P* ^3 n. S/ n, t: ?  o  H) E
                    不然不能访问。) m5 Z! P' z7 g) P, [& S1 I5 }- W( ?. C7 k
                    6、如果报500错误,一般是你的程序写错了,+ g+ ~+ ]5 W9 ]) c$ n  }% K7 w' i; r8 u0 p* N3 ]
                    如果报404错误,访问地址有错。如果是405,( b' x4 q( r- C* d9 Q2 J
                    请检查你的service方法名,包括方法参数等
    回复

    使用道具 举报

    bindy    

    130

    主题

    0

    听众

    962

    金钱

    五袋长老

    该用户从未签到

    80后

    7#
    发表于 2016-10-31 07:42:25 |只看该作者
    现在真实的项目中servlet&jsp用的多么?都用什么框架啊?
    回复

    使用道具 举报

    admin    

    1244

    主题

    544

    听众

    1万

    金钱

    管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    8#
    发表于 2016-10-31 10:16:16 |只看该作者
    bindy 发表于 2016-10-30 23:424 y' @( C- C! N" ^, }0 v
    现在真实的项目中servlet&jsp用的多么?都用什么框架啊?
    9 f. P& r" }- _+ i9 }: v
    SSH
    回复

    使用道具 举报

    5

    主题

    0

    听众

    316

    金钱

    四袋长老

    该用户从未签到

    9#
    发表于 2017-08-12 20:46:28 |只看该作者
    不错不错不错不错
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表