zoukankan      html  css  js  c++  java
  • Servlet基础

     

     
    一、什么是servlet
    servlet是在服务器端运行的一个小程序。一个servlet就是一个java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的servlet程序。
     

    二、tomcat容器等级
        tomcat的容器等级分为四个等级,servlet的容器管理context容器,一个context对应一个web工程。
    Engine是个引擎容器
    HOST是主机容器
     

    三、手工编写servlet程序的步骤
        1.继承HttpServlet
        2.重写doGet()或者doPost()方法
        3.在web.xml中注册Servlet
     
    • 使用普通的方法对servlet进行注册
    1. <servlet>
    2. <!--servlet的名字-->
    3. <servlet-name>MyServlet</servlet-name>
    4. <!--servlet类的名字(包括完整包名)-->
    5. <servlet-class>MyServlet</servlet-class>
    6. </servlet>
    7. <servlet-mapping>
    8. <!--要与上面的那个名字一一对应-->
    9. <servlet-name>MyServlet</servlet-name>
    10. <!--表示该servlet的访问路径 /表示项目的根目录-->
    11. <url-pattern>/servlet/MyServlet</url-pattern>
    12. </servlet-mapping>
     
    • JavaEE6及其以上可以使用注释来对servlet进行注册 
        name为必须,urlPatterns或者value为指定的URL访问地址,也可定义多个URL地址访问
    1. @WebServlet(name = "MyFirstServlet",urlPatterns = "/servlet/MyFirstServlet")
    @WebServlet有很多的属性:
    asyncSupported 声明servlet是否支持异步操作模式
    description servlet的描述
    displayName servlet的显示名称
    initParams servlet的init参数
    name servlet的名称
    urlPatterns servlet的访问URL
    value servlet的访问URL
     

    四、servlet的生命周期
            1.初始化阶段,调用init()方法
            2.响应客户请求阶段,调用servlet()方法。由servlet()方法根据提交方式选择执行doGet()或者doPost()方法。
            3.终止阶段,调用destroy()方法
     
               servlet生命周期阶段包括初始化、加载、实例化、服务和销毁。
     
     
    在下列时刻servlet容器装在servlet:
            1.servlet容器启动时自动装在某些servlet,实现它只需要在web.xml文件中的<Servlet></Servlet>之间添加如下代码:<load-on-startup>1</load-on-startup>数字越小表示优先级越高。
            2.在servlet容器启动后,客户端首次向servlet发送请求。
            3.servlet类文件被更新后,重新装载servlet。
    servlet被装载后,servlet容器创建一个servlet实例并且调用servlet的init()方法进行初始化。在servlet的整个生命周期内,init()方法只被调用一次。
     

    Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类,可使用javax.servlet和javax.servlet.http包创建,是JavaEE的标准组成部分。servlet是服务HTTP请求并实现javax.servlet.Servlet接口的Java类,通常编写servlet扩展javax.servlet.http.HttpServlet。

    Servlet生命周期: 
    1、通过调用init()方法进行初始化 
    第一次调用servlet时被调用,只调用一次。当用户调用一个servlet时就会创建servlet实例,每个用户请求产生新的线程,移交给doGet()或doPost(),init()创建或加载一些数据。 
    2、通过调用service()处理客户端的请求 
    servlet容器调用service()处理浏览器的请求,把格式化的响应写回给客户端,service()由容器调用,service()在适当的时候调用doGet、doPost等方法,根据客户端的请求类型重写方法。 
    3、通过调用destroy()方法结束 
    只调用一次,servlet由JVM垃圾回收器进行垃圾回收。


     

    五、servlet与九大内置对象
    如何在servlet中获取jsp的九大内置对象
    JSP对象 如何获取
    out response.getWriter方法(类型并不一致,但功能一致)
    request service方法中的参数
    response service方法中的参数
    session request.getSession()方法
    application getServletContext()方法
    exception Throwable
    page this
    pageContext PageContext
    config getServletConfig方法


    六、如何通过servlet获取jsp表单中的值与如何将值发送给jsp
    从servlet获取jsp表单中的值:
    1. //获取单个值的时候
    2. String context=request.getParameter("username");
    3. //获取复选框等多个选址的时候
    4. String[] parameterValues = request.getParameterValues("username");
     
    servlet将值发送给jsp
    将内容存储到session中,将内容通过请求转发的方式发送给jsp
    示例:
    1. // 将内容存储到session中
    2. request.getSession().setAttribute("a","object");
    3. // 通过请求转发将其发送给jsp页面
    4. request.getRequestDispatcher("index.jsp").forward(request,response);
     

    七、servlet路径跳转
            绝对路径:从根目录来计算 "/"表示服务器的根目录
            相对路径:从相对于当前资源来计算
     
    xml中servlet的映射地址必须以"/"开头
    在servlet中使用请求重定向的时候,可以使用request.getContextPath方法获取上下文对象后加上目标jsp名字
    在servlet中使用服务器内不跳转,可以使用 "/"表示项目的根目录
     

    八、获取初始化参数
            在web.xml中配置servlet时,可以配置一些初始化参数。而在servlet中可以通过ServletConfig接口提供的方法来取得这些参数。
    在XML的servlet标签里面设置初始化参数
    1. <servlet>
    2. <servlet-name>GetInitParameterServlet</servlet-name>
    3. <servlet-class>servlet.GetInitParameterServlet</servlet-class>
    4. <!--设置初始化参数-->
    5. <init-param>
    6. <param-name>username</param-name>
    7. <param-value>admin</param-value>
    8. </init-param>
    9. <init-param>
    10. <param-name>password</param-name>
    11. <param-value>123456</param-value>
    12. </init-param>
    13. </servlet>
    14. <servlet-mapping>
    15. <servlet-name>GetInitParameterServlet</servlet-name>
    16. <url-pattern>/servlet/GetInitParameterServlet</url-pattern>
    17. </servlet-mapping>
     
    在servlet中重写init()方法
    通过getInitParameter方法获取
    1. @Override
    2. public void init() throws ServletException {
    3. String username = this.getInitParameter("username");
    4. this.setUsername(username);
    5. }
     
     
     
    servlet:
    web服务器端的编程技术。
    是继承了javax.servlet.http.HttpServlet类的Java类。
    由支持servlet的web服务器(tomcat)调用和启动运行。
    一个servlet负责对应的一个或一组urld的访问请求,并返回相应的响应内容。
    C/S:客户机和服务器架构,服务器负荷轻,维护升级成本高。
    B/S:浏览器和服务器架构,服务器负荷重,维护升级成本低。
    B/S:工作原理:
    浏览器--服务器--数据库
    通过Url来访问服务器,在浏览器里发送请求(传递参数)给服务器,服务器调用dao类(有参数先接收参数)操作数据库。


    servlet创建步骤:
    1.创建一个继承类(extends javax.servlet.http.HttpServlet):
    2.重写三个方法:
    生命周期:访问时开始:init()→service()→destroy()
    1).public void init(){
    super.init();
    }
    2).protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
    super.service(req, resp);
    }
    3)public void destroy() {
    super.destroy(); 
    }
    3.给servlet配备一个URL地址,供浏览器访问servlet用。
    打开WebRoot/WEB-INF/web.xml文件,添加<servlet>和<servlet-mapping>两个标签
    <servlet>
    <servlet-name>FirstServlet<servlet-name>
    <servlet-class>com.xxx.servlet.web.servlet.FirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/first</url-pattern><!-/first代表localhost:80/项目名称/first>
    </servlet-mapping>
    500错误:服务器内部错误。
    404错误:找不到网页,网页地址错误。
    一个类被修改后要重新启动Tomcat发布。


    servlet的三个方法:
    init()方法:
    默认情况下:第一次访问servlet时被调用(该servlet被初始化),且只能被调用一次。
    service()方法:
    servlet的主方法,每访问一次就调用一次。
    destroy()方法:
    在服务器关闭的时候,被调用(该servlet被销毁)


    网页参数的接收与返回:(关键代码示例)
    接收:HttpServletRequest request
    String username = request.getParameter("name");
    返回:HttpServletResponse response
    PrintWriter out = response.getWriter();
    out.print("接收到的名字:"+username+"<br>");
    网页的编码集:
    接收中文的处理:
    req.setCharacterEncoding("UTF-8");(gb2312也可以)
    username = new String(username.getBytes("ISO-8859-1"),"UTF-8");


    表单信息的提交与页面对表单信息的获取主要步骤:
    1.新建一个jsp网页,绘制一个简单的用户登录表单。
    2.新建一个servlet类,在service()方法中进行参数的获取(request)和返回显示(response).(注意该servlet类url地址的注册)
    3.通过表单属性actoin提交输入信息到服务器,并转到所创建的servlet类。
    4.servlet获取参数,并在网页中显示。


    提交网页数据,遍历数据库,返回显示遍历判断结果:
    1.新建jsp网页,servlet类。(参考上一个例子)
    2.创建操作数据库的类(UserDao)(注意驱动,连接参数等的配置)
    3.在UserDao中创建查询的方法。(用户名和密码作为条件,同时满足(and))
    String sql = "select * from userInfor where userName = ? and userPassword = ? ";
    4.在servlet类中的service方法中获取网页数据。(方法参考上一个例子)
    5.通过UserDao user = UserDao.getInstance();
    Map<String,String> map = new HashMap<String, String>();
    map.put(key,value);分别键入键值对数据(userName和userPassword)启用UserDao中的查询方法遍历数据库。
    6.根据查询结果判断用户信息是否存在,在网页中显示判断结果。
  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/SFHa/p/9499685.html
Copyright © 2011-2022 走看看