Servlet

  1. servlet简介
    • servlet+applet :服务器端小程序,
    • 一个特殊的Java类
    • 通过“请求-响应”来访问这个程序
    • 与HTTP紧密联系,通过servler几乎可以处理HTTP所有问题
  2. Tomcat容器等级
    Tomcat容器分为四个等级
    Container
      Engine
           Host
                     Servlet

    一个Context对于一个web工程
  3. 实现一个Servlet
    1. 继承HttpServlet类
    2. 重写doGet()或doPost()   取决于用户提交请求的方式
    3. 在web.xml中注册Servlet
      1        <servlet>
      2         <servlet-name>ServletName</servlet-name>
      3         <servlet-class>Servlet完全限定名</servlet-class>
      4     </servlet>
      5     <servlet-mapping>
      6         <servlet-name>ServletName</servlet-name>
      7         <url-pattern>/.../...</url-pattern>
      8     </servlet-mapping>
      View Code
  4. Servlet处理流程
  5. Servlet生命周期
    1. 初始化,init(),整个生命周期中,init()方法只会执行一次
    2. 响应客户端请求,调用service(),由service()根据请求方式选择执行doGet()还是doPost()
    3. 终止阶段,调用destory()
  6. Tomcat装载Servlet的三种情况
    1. web.xml的<servlet>中加入<load-on-startup>1</load-on-startup>标签,数值越小 优先级越高
    2. 客户端首次请求Servlet
      Servlet的构造函数——>init()——>service()——>doGet()或doPost(),关闭服务器才会执行destory()
    3. Servlet类被修改以后,重新装载Servlet
  7. Servlet与JSP九大内置对象对应关系
  8. 一个注册页面,Servlet获取表单信息

    1. 注册页面register.jsp
       1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
       2 <%
       3     String path = request.getContextPath();
       4     String basePath = request.getScheme() + "://"
       5             + request.getServerName() + ":" + request.getServerPort()
       6             + path + "/";
       7 %>
       8 
       9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      10 <html>
      11 <head>
      12 <base href="<%=basePath%>">
      13 
      14 <title>My JSP 'index.jsp' starting page</title>
      15 <meta http-equiv="pragma" content="no-cache">
      16 <meta http-equiv="cache-control" content="no-cache">
      17 <meta http-equiv="expires" content="0">
      18 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
      19 <meta http-equiv="description" content="This is my page">
      20 <!--
      21     <link rel="stylesheet" type="text/css" href="styles.css">
      22     -->
      23 <style type="text/css">
      24 .label {
      25     width: 20%
      26 }
      27 
      28 .controler {
      29     width: 80%
      30 }
      31 </style>
      32 <script type="text/javascript" src="js/Calendar3.js"></script>
      33 </head>
      34 
      35 <body>
      36     <form name="regform" action="servlet/LoginServlet" method="post">
      37         <table border="1" width="800">
      38             <tr>
      39                 <td class="lable">用户名</td>
      40                 <td class="controler"><input type="text" name="username"></td>
      41             </tr>
      42 
      43             <tr>
      44                 <td class="lable">密码</td>
      45                 <td class="controler"><input type="password" name="mypassword"></td>
      46             </tr>
      47 
      48             <tr>
      49                 <td class="lable">确认密码</td>
      50                 <td class="controler"><input type="password"name="confirmpassward"></td>
      51             </tr>
      52             
      53             <tr>
      54                 <td class="lable">性别</td>
      55                 <td class="controler">
      56                     <input type="radio" name="gender"value="Male" checked="checked">57                     <input type="radio"name="gender" value="Female">58                 </td>
      59             </tr>
      60             
      61             <tr>
      62                 <td class="label">出生日期:</td>
      63                 <td class="controler"><input name="birthday" type="text"
      64                     id="control_date" size="10" maxlength="10"
      65                     onclick="new Calendar().show(this);" readonly="readonly" /></td>
      66             </tr>
      67 
      68             <tr>
      69                 <td class="lable">电子邮箱</td>
      70                 <td class="controler"><input type="text" name="email"></td>
      71             </tr>
      72 
      73             <tr>
      74                 <td class="lable">爱好</td>
      75                 <td class="controler">
      76                     <input type="checkbox" name="favorite"value="nba">NBA 
      77                     <input type="checkbox" name="favorite"value="music">音乐 
      78                     <input type="checkbox" name="favorite"value="movie">电影
      79                 </td>
      80             </tr>
      81             
      82         </table>
      83         <input type="submit" value="注册" />&nbsp;&nbsp; <input type="reset"
      84             value="取消">
      85     </form>
      86 
      87 </body>
      88 </html>
      View Code

      action指定提交给哪个Servlet处理
    2. 用户信息类UserInfo和LoginServlet
      UserInfo类中封装用户的属性,并生成set get方法
      1 private String username;//用户名
      2     private String password;//密码
      3     private String gender;//性别
      4     private Date birthdar;//出生日期
      5     private String email;//邮箱
      6     private String[] favorates;//爱好
      UserInfo类
        1 package servlet;
        2 
        3 import java.io.IOException;
        4 import java.text.ParseException;
        5 import java.text.SimpleDateFormat;
        6 
        7 import javax.servlet.ServletException;
        8 import javax.servlet.http.HttpServlet;
        9 import javax.servlet.http.HttpServletRequest;
       10 import javax.servlet.http.HttpServletResponse;
       11 
       12 import entity.UserInfo;
       13 
       14 public class LoginServlet extends HttpServlet {
       15 
       16     /**
       17      * 
       18      */
       19     private static final long serialVersionUID = 1L;
       20 
       21     /**
       22      * Constructor of the object.
       23      */
       24     public LoginServlet() {
       25         super();
       26     }
       27 
       28     /**
       29      * Destruction of the servlet. <br>
       30      */
       31     public void destroy() {
       32         super.destroy(); // Just puts "destroy" string in log
       33         // Put your code here
       34     }
       35 
       36     /**
       37      * The doGet method of the servlet. <br>
       38      * 
       39      * This method is called when a form has its tag value method equals to get.
       40      * 
       41      * @param request
       42      *            the request send by the client to the server
       43      * @param response
       44      *            the response send by the server to the client
       45      * @throws ServletException
       46      *             if an error occurred
       47      * @throws IOException
       48      *             if an error occurred
       49      */
       50     public void doGet(HttpServletRequest request, HttpServletResponse response)
       51             throws ServletException, IOException {
       52 
       53         doPost(request, response);
       54     }
       55 
       56     /**
       57      * The doPost method of the servlet. <br>
       58      * 
       59      * This method is called when a form has its tag value method equals to
       60      * post.
       61      * 
       62      * @param request
       63      *            the request send by the client to the server
       64      * @param response
       65      *            the response send by the server to the client
       66      * @throws ServletException
       67      *             if an error occurred
       68      * @throws IOException
       69      *             if an error occurred
       70      */
       71     public void doPost(HttpServletRequest request, HttpServletResponse response)
       72             throws ServletException, IOException {
       73         UserInfo user = new UserInfo();
       74         
       75         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
       76         user.setUsername(request.getParameter("username"));
       77         user.setPassword(request.getParameter("mypassword"));
       78         try {
       79             user.setBirthdar(sdf.parse(request.getParameter("birthday")));
       80         } catch (ParseException e) {
       81             e.printStackTrace();
       82         }
       83         user.setGender(request.getParameter("gender"));
       84         user.setEmail(request.getParameter("email"));
       85         
       86         //获取多个复选按钮的值getParameterValues()
       87         user.setFavorates(request.getParameterValues("favorite"));
       88         
       89         ///把注册成功的用户对象保存在session中session名为userinfo
       90         request.getSession().setAttribute("userinfo", user);
       91         
       92         //跳转到注册成功页面
       93         request.getRequestDispatcher("../success.jsp").forward(request,
       94                 response);
       95 
       96     }
       97 
       98     /**
       99      * Initialization of the servlet. <br>
      100      * 
      101      * @throws ServletException
      102      *             if an error occurs
      103      */
      104     public void init() throws ServletException {
      105         // Put your code here
      106         System.out.println("init执行了");
      107     }
      108 
      109 }
      LoginServlet类
      <servlet>
              <servlet-name>LoginServlet</servlet-name>
              <display-name>This is the display name of my J2EE component</display-name>
              <description>This is the description of my J2EE component</description>
              <servlet-class>servlet.LoginServlet</servlet-class>
          </servlet>
      
      
          <servlet-mapping>
              <servlet-name>LoginServlet</servlet-name>
              <url-pattern>/servlet/LoginServlet</url-pattern>
          </servlet-mapping>
      web.xml中配置LoginServlet
    3. 注册成功页面
       1 <%@page import="java.text.SimpleDateFormat"%>
       2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
       3 <%
       4     String path = request.getContextPath();
       5     String basePath = request.getScheme() + "://"
       6             + request.getServerName() + ":" + request.getServerPort()
       7             + path + "/";
       8 %>
       9 
      10 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      11 <html>
      12 <head>
      13 <base href="<%=basePath%>">
      14 
      15 <title>My JSP 'success.jsp' starting page</title>
      16 
      17 <meta http-equiv="pragma" content="no-cache">
      18 <meta http-equiv="cache-control" content="no-cache">
      19 <meta http-equiv="expires" content="0">
      20 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
      21 <meta http-equiv="description" content="This is my page">
      22 <!--
      23     <link rel="stylesheet" type="text/css" href="styles.css">
      24     -->
      25 
      26 </head>
      27 
      28 <body>
      29     <h1>用户信息</h1>
      30     <hr>
      31     <center>
      32         <jsp:useBean id="userinfo" class="entity.UserInfo" scope="session" />
      33         <table width="600" cellpadding="0" cellspacing="0" border="1">
      34             <tr>
      35                 <td class="title">用户名:</td>
      36                 <td class="content">&nbsp;
      37                     <jsp:getProperty name="userinfo"property="username" />
      38                 </td>
      39             </tr>
      40 
      41             <tr>
      42                 <td class="title">密码:</td>
      43                 <td class="content">&nbsp;
      44                     <jsp:getProperty name="userinfo"property="password" />
      45                 </td>
      46             </tr>
      47             
      48             <tr>
      49                 <td class="title">性别:</td>
      50                 <td class="content">&nbsp;
      51                     <jsp:getProperty name="userinfo"property="gender" />
      52                 </td>
      53             </tr>
      54             
      55             <tr>
      56                 <td class="title">出生日期:</td>
      57                 <td class="content">&nbsp; 
      58                 
      59      <%SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
      60      String date = sdf.format(userinfo.getBirthdar()); %> 
      61      <%=date%>
      62                 </td>
      63             </tr>
      64             
      65             <tr>
      66                 <td class="title">E-mail:</td>
      67                 <td class="content">&nbsp;
      68                     <jsp:getProperty name="userinfo"property="email" />
      69                 </td>
      70             </tr>
      71 
      72             <tr>
      73                 <td class="title">爱好:</td>
      74                 <td class="content">&nbsp; 
      75                 <%
      76      String[] favorites = userinfo.getFavorates();
      77      for (String f : favorites) {
      78  %> 
      79  <%=f%> &nbsp;&nbsp; 
      80  <%
      81      }
      82  %>
      83                 </td>
      84             </tr>
      85             
      86         </table>
      87     </center>
      88 </body>
      89 </html>
      success.jsp
  9. Servlet路径跳转问题
    绝对路径:放之四海而皆准的路径
    相对路径:相对于当前资源的路径
      “../”来表示上一级目录
     “../../”表示上上级的目录,以此类推。
    下级目录用“/..”表示
    "./"代表目前所在的目录
    "/"开头:代表根目录。在web.xml的<url-pattern>/servlet/LoginServlet</url-pattern>必须以/开头,这里的/表示项目的更目录
    根目录:最上一级目录,如双击D盘 就进入了D盘的根目录

    内部跳转(请求转发) 和外部跳转(请求重定向)
    • 内部跳转:服务器收到客户端请求后,将请求转发到另一个页面或servlet,这个时候跳转到的目标页面或者servlet可以获取到请求对象,也可以获取到请求中的属性和参数;浏览器的url地址栏不会改变;无法跳转到工程以外的jsp或servlet
      实现方式: 1 request.getRequestDispatcher("XXX.jsp或者servlet").forward(request, response),  

    • 外部跳转:第一次请求后,服务器端向客户端发送了一个指令,让客户端再次请求了一次服务器端,这个时候服务器第二次拿到的request对象已经不是第一次请求的request对象了,所以无法获取到第一次请求里的参数和属性;浏览器url地址栏会发生变化;可以跳转到工程以外的页面或servlet
      实现方式: 1 response.sendRedirect("XXX.jsp或者servlet") 
  1. http请求的get方式和post方式区别

     

原文地址:https://www.cnblogs.com/gucl/p/8109178.html