zoukankan      html  css  js  c++  java
  • java_day20_Servlet

    Apache服务器

    一.Servlet:Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件.

      1).Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,所有的HTTP头数据读可以通过request对象调用对应的方法查询到。

      2).Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象,通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器

      3).实现Servlet的三个方法一;Servlet有五个方法需要覆写

          public class MyServlet implements Servlet {

            private int count = 0; //Servlet 是线程不安全的

            //1.等级一:不在Servlet中创建全局变量

            //2.等级二:在Servlet中创建无状态的全局变量(没有属性的对象)

            //3.等级三:创建有状态的全局变量,但是状态都是只读的

          @Override

          public void init(ServletConfig servletConfig)  {

            System.out.println("init"); }     //初始化方法 

          @Override

          public ServletConfig getServletConfig () {

            return null; }  //此方法需手动调用,返回Servlet的配置信息

          @Override

          public void service (ServletRequest req,ServletResponse resp) {

            System.out.println("service"); }   //此方法是提供服务的,每一次访问Servlet都会执行此方法

          @Override

          public String getServletInfo () {

            return "啥都行"; }    //此方法获取Servlet信息,没有用,手动调用

          @Override

          public void destroy () {

            System.out.println("destroy"); }  //此方法在servlet被销毁之前调用

      4).实现Servlet的方法二,继承GenericServlet覆写service方法即可

        public class MyServlet extends GenericServlet {

          @Override

          public void service (ServletRequest req,ServletResponse resp) {

          PrintWriter pw = resp.getWriter();}   //获取写流对象

      5).实现Servlet的方法三.继承HttpServlet类,覆写doGet和postGet方法,从数据库获取数据

        public class MySQLServlet extends HttpServlet {

          //super.doGet(req, resp); 会抛405异常,所以为了Servlet支持get请求,则需覆写doGet方法,并且不能调用父类的doGet()方法

          @Override

          protected void doGet (HttpServletRequest req,HttpServletResponse resp) {

            resp.setContentType ("text/html;charset=utf-8");//告知浏览器解码的格式

            PrintWriter writer = resp.getWriter();//获取写(输出)对象

            Class.forName("com.mysql.jdbc.Driver");  //加载驱动

            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/lan_ou","root","123456");//连接数据库

            String sql = "SELECT * FROM stu";//sql语句

            PreparedStatement statement = conn.prepareStatement(sql);//创建执行sql语句的对象

            ResultSet rs = statement.executeQuery();//执行查询语句,返回结果集

            rs.next();//移动到数据的第一行

            String name = rs.getString("sname"); //通过列名获取数据

            Integer age = rs.getInt("age");//通过列名获取数据

            writer.println(name); //输出数据

            writer.println(age); //输出数据

       5).javaWeb四大域对象之ServletContext

          public class MyServlet extends HttpServlet {  //获取网页被访问的次数

            @Override

            //1.ServletContext 是JavaWeb四大域对象之一,有时我们也叫做app/application

            //2.特点:1.所有的servletContext无论在哪都是同一个对象,那么可以做多个servlet传值/记录整个网站的信息;特点:2.寿命极长:tomcat启动,这个对象就被创建,tomcat停止,这个对象就会销毁

            protected void doGet (HttpServletRequest req,HttpServletResponse resp) {

              ServletContext app = getServletContext();//创建ServletContext域对象

              Integer count = (Integer) app.getAttribute ("counts");//通过键值对获取值

              if(count == null) {  //初始值为null

                count = 1;

              }else { count++; }

              app.setAttribute("counts",count);//通过键值对赋值给key

              PrintWriter writer = resp.getWriter();//创建输出对象

              writer.println(count); //输出数据

       6).利用apache封装好的commons-io包

          public class PathServlet extends HttpServlet{

            @Override

            protected void doGet (HttpServletRequest req,HttpServletResponse resp) {

              resp.setContentType ("text/html;charset=utf-8");//告知浏览器解码的格式

              ServletContext app = getServletContext();//创建ServletContext域对象

              PrintWriter writer = resp.getWriter();//创建输出对象

              InputStream is = app.getResourceAsStream("error.html");//获取输入流

              //commons的jar包继承好了IO流的方法,不用再写复杂的IO流代码了

              String html = IOUtils.toString(is);//windows系统需要多一个参数utf8

              writer.println(html);

    二.注册Servlet

      1.基本格式

      <servlet>

        <servlet-name>name</servlet-name>    //servlet指定的名字

        <servlet-class>com.lanou3g.code0509.MyServlet</servlet-class> //指定哪个servlet

      </servlet>

      <servlet-mapping> //映射
        <servlet-name>name</servlet-name>  //名字
        <url-pattern>/hello</url-pattern> //对应的网址
      </servlet-mapping>
     

      2.一个servlet可以配置多个路径,这些路径都会生效
        <url-pattern>/your</url-pattern>
        <url-pattern>/her</url-pattern>
      3.路径匹配:只要前半段的路径匹配上了,后半段可以随意,即*代表任意字符
        <url-pattern>/my/*</url-pattern>
      4.后缀匹配:只要最后是以.action结尾的就能匹配
        <url-pattern>*.action</url-pattern>
      5.通配:所有url都会被匹配到

        <url-pattern>/*</url-pattern>
        * 叫做通配符,表示任意数量的任意字符,
    注意*要么出现在开头,要么出现在结尾,一定不会出现在中间

      6.启动时自动加载配置文件

        <load-on-startup>0</load-on-startup>

      7.加载404页面

        <error-page>

          <error-code>404</error-code>    //404表示出错码

          <location>/error4040</location>  //当出现这个404错误时去往的页面

        </error-page>

    三.文件位置

      1.jar包放在WEB-INF包下

      2.html文档放在web包下

  • 相关阅读:
    leetcode腾讯精选练习之最长公共前缀(九)
    leetcode腾讯精选练习之螺旋矩阵(八)
    leetcode腾讯精选练习之删除链表中的结点(七)
    leetcode腾讯精选练习之相交链表(六)
    leetcode腾讯精选练习之旋转链表(四)
    leetcode腾讯精选练习之链表逆置(三)
    leetcode腾讯精选练习之合并有序链表(二)
    leetcode腾讯精选练习之两数相加(一)
    const理解
    树莓派-淘宝-百度网盘资料-免费下载
  • 原文地址:https://www.cnblogs.com/memo-song/p/9016309.html
Copyright © 2011-2022 走看看