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包下

原文地址:https://www.cnblogs.com/memo-song/p/9016309.html