• 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方式区别

       

  • 相关阅读:
    ASP.NET 上传文件最大值调整
    Git撤销提交
    MVC模式下如何实现RegisterStartupScript等功能
    RESTful接口设计原则/最佳实践(学习笔记)
    如何编译MongoDB?
    【NTKO】一些常用操作
    【solr】使用-取反时注意,-是表示排除,不能单独做条件用
    【layui】日期范围分开两个input,开始日期选中时,结束日期的最小可选择就是开始日期
    【转】【Java】剪切板操作大全
    【转】彻底禁用Chrome的“请停用以开发者模式运行的扩展程序”提示
  • 原文地址:https://www.cnblogs.com/gucl/p/8109178.html
Copyright © 2020-2023  润新知