servlet

2018-04-24  本文已影响0人  ticktackdong

开发Servlet

Servlet本身不能独立运行,需要在一个web应用中运行,一个web应用是部署在tomcat中的
所以开发一个servlet需要如下几个步骤

1.创建web应用项目
     创建一个java project,导入servlet-api.jar
2.编写servlet代码
   public class HelloServlet extends HttpServlet{
             doGet();//在浏览器输入地址提交数据的方式是GET
         }
3.部署到tomcat中
   1. 配置web.xml(web/WEB-INF/web.xml)
    <?xml version="1.0" encoding="UTF-8"?>
   <web-app>

<servlet>
    <servlet-name>HelloServlet</servlet-name>//两处的name必须一样
    <servlet-class>HelloServlet</servlet-class>//name与class可以不一样,一般写成一样
</servlet>

<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>//两处的name必须一样
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

  </web-app>
 2.指定输出目录到classes目录(WEB-INF/classes)
 3.配置tomcat的server.xml 中的<context

获取参数

1.创建login.html
    <!DOCTYPE html>
      <html>
       <head>
         <meta charset="UTF-8">
         <title>登录页面</title>
      </head>
      <body>

          <form action="login" method="post">
          //会提价到login路径(映射到LoginServlet)
          账号: <input type="text" name="name"> <br>
          密码: <input type="password" name="password"> <br>
          <input type="submit" value="登录">
          </form>
     </body>
     </html>
  2.创建LoginServlet,提供doPost(),在方法中通过request.getParamter根据name取出对应的账号密码
  3.映射LoginServlet到路径login

返回响应

    LoginServlet判断账号密码是否正确,
    正确打印success否则打印fail。
    创建相应的html字符串通过 
    response.getWriter.println()发送到浏览器

调用流程

调用流程.png
1.首先访问login.html打开一个静态html页面在这个页面中可以通过form以post形式提交数据
http://127.0.0.1/login.html
2.form把账号和密码提交到/login路径并附带method="post"
3.tomcat接收到一个新请求http://127.0.0.1/login
通过web.xml映射到LoginServlet
4.Tomcat定位到LoginServlet后发现没有LoginServlet实例存在于是就调用LoginServlet的public无参的构造方法实例化一个对象
5.Tomcat拿到LoginServlet实例后根据login.html提交的method="post"去调用doPost方法
6.在doPost方法中通过调用参数request.getParameter()把页面上传递过来的账号和密码信息取出来
7.根据账号密码是否正确创建不同的html字符串并设置在response对象上
PrintWriter pw = response.getWriter();
pw.println(html);
8.tomcat把html传递给浏览器(HTTP协议)

service()/doGet()/doPost()

doGet()
   当浏览器使用get方式提交数据的时候,servlet需要提供doGet()方法
    get方式:
          form默认提交方式
          通过超链访问某个地址
          在地址栏输入某个地址
          ajax指定使用get方式的时候
doPost()
       当浏览器使用post方式提交数据的时候,servlet需要提供doPost()方法
    post方式:
          form显示设置method="post"时
          ajax指定使用get方式的时候
service()
      实际上在执行doGet/doPost之前都会先执行service(HttpServletRequest , HttpServletResponse ),由service判断调用get还是post
      service(), doGet(), doPost() 三种方式的参数列表都是一样的。
       所以,有时候也会直接重写service()方法,在其中提供相应的服务,就不用区分到底是get还是post了。

中文问题

获取中文的参数
方法一:
          1.login.html加上
              <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
             //告诉浏览器给服务器发送消息时使用UTF-8编码
          2.login.html的form的method修改为post
          3.在servlet进行解码和编码
               byte[] bytes=  name.getBytes("ISO-8859-1");
               name = new String(bytes,"UTF-8");

方法二:在request.getParameter之前加上request.setCharacterEncoding("UTF-8");

返回中文响应
  在Servlet中加上response.setContentType("text/html",charset="UTF-8");

生命周期

  一个Servlet的生命周期:
       实例化->初始化->提供服务->销毁->被回收
实例化/初始化
    1.当用户通过浏览器输入一个路径
    这个路径对应的servlet被调用的时候该Servlet就会被实例化(构造方法被调用)
     无论访问了多少次LoginServlet构造方法只执行一次,所以Servlet是单实例的
    2.init(ServletConfig)是一个实例方法在构造方法执行之后执行,无论访问多少次初始化只执行一次
提供服务
    service/doGet/doPost方法中执行业务代码
销毁destoy()
  1.关闭tomcat时destroy()方法会被调用
  2.该Servlet所在的web应用重新启动时
         
        <Context path="/" 
              docBase="e:\\project\\j2ee\\web" 
              debug="0" reloadable="false" />
     如果把 reloadable="false" 改为reloadable="true" 
    就表示有任何类发生的更新,web应用会自动重启
    当web应用自动重启的时候,destroy()方法就会被调用

跳转

服务端跳转
  request.getRequestDispatcher("success.html").forward(request, response);

//浏览器路径依然是/login,并不会变成success.html


success.png
客户端跳转
 response.sendRedirect("fail.html");//浏览器地址发生变化
fail.png

自启动

有的时候会有这样的业务需求: 
  tomcat一启动,就需要执行一些初始化的代码,
  比如校验数据库的完整性等。 
  但是Servlet的生命周期是在用户访问浏览器对应的路径开始的。
  如果没有用户的第一次访问,就无法执行相关代码。 
  这个时候,就需要Servlet实现自启动 
  即,伴随着tomcat的启动,自动启动初始化,
  在初始化方法init()中,就可以进行一些业务代码的工作了。
  在web.xml中,配置Hello Servlet的地方
  增加一句<load-on-startup>10</load-on-startup>
  (取值范围1-99代表启动顺序小的数字先启动)
request常见方法
response的用法
上传文件
CRUD
JSON
上一篇下一篇

猜你喜欢

热点阅读