Java学习之Servlet

JavaWeb开发(服务器端)

用户(浏览器)访问服务端的什么东西

静态Web资源 html css js

用户在访问静态资源的时候 这些资源不会变 

动态Web资源 JSP Servlet

  用户在访问动态资源的时候

  访问的内容是由代码生成的

  例如 不同的用户访问不同的资源


用户(浏览器 客户端)通过网址来请求服务器端

请求的就是服务器端上的静态资源和动态资源

请求完成之后会给浏览器一个响应结果


服务器

tomcat服务器 sun公司 开源的 免费的

轻量级服务器 公司里常用的服务器

注意:咱们写的Java代码 和 前段html页面

全都是放在服务器上运行(服务器端开发是开发放到服务器上运行的代码 而不是开发一个服务器出来)


JavaEE规范服务器的一套规则(类和接口)

JSP和Servlet就是这套规范的一部分

 

tomcat服务器下文件夹

bin 存放编译指令的文件夹(开启(startup)关闭服务(shutdown)) window bat, mac sh

conf 存放tomcat服务器的配置文件的文件夹

lib 存放tomcat所依赖的jar包

logs 存放用户访问服务器的日志(查看错误)

temp 存放临时文件

webapps 默认存放应用程序的文件夹(工程)

work 存放tomcat自己的工作文件

wtpwebapps 与Eclipse关联后 工程存放的文件夹


利用命令行(终端开启tomcat服务)

1.前往tomcat的bin文件夹下

2.开启文件管理权限(读写)

sudo chmod 755 *.sh

3.开启服务(windows下执行的是.bat后缀的指令)

sudo sh ./startup.sh

        注意:不要重复开启服务 否则会出现端口被占用错误


访问服务器上的资源

访问网址:http://IP地址:端口号/项目名称/访问的资源

通过这个网址查看tomcat服务是否启动

  http://localhost:8080

访问的网址

    URL 统一资源定位符

http://localhost:8080/test/HelloWorld.html

    URI 统一资源标识符

/test/HelloWorld.html 


4关闭服务

sudo sh ./shutdown.sh 

工程被编译到服务器

实际上是把工程目录下的WebContent文件夹下的内容编译进去


META-INF 扩展应用程序文件夹(暂时没用)

WEB-INF 存放着工程的所有资源

lib 存放工程使用的jar包(不用添加路径 会自动编译到服务器上)

web.xml 工程的配置文件

classes 工程编译到服务器上出现的 保存的是工程中的类的.class文件

注意:WEB-INF文件夹下存放的资源 是不能直接通过网址去访问的


Servlet(小服务程序) 是个java接口

访问服务器 实际上访问的就是Servlet(容器 有访问的动态资源)


javax.servlet.Servlet包下的

注意:如果报错或提示不出来

在library修改或添加tomcat到你的工程中


Servlet的生命周期方法

实例化 -> 初始化 -> 服务方法 -> 销毁方法

Servlet只有第一次访问的时候 创建一次

当你再次访问该servlet时

不会创建新的Servlet

只会重复调用服务方法 service方法


servlet的访问流程

用户发出一个请求

1.通过用户请求的网址,服务器会获取到,项目的名称

2.找到对应的项目后 从项目中找到

该项目的web.xml文件

3.从web.xml文件中可以找到访问servlet的路径(/demo01)

4.通过servlet的路径找到用户


5.通过servlet的名字 找到要创建的servlet属于哪个类

6.系统就会通过反射创建该类的对象,然后就走声明周期的4个方法



创建servlet的第一种方式

     直接实现Servlet接口

    public class Demo01 implements Servlet{  
          
        // 实例化方法(创建对象的无参构造方法)  
        public Demo01() {  
            System.out.println("实例化对象的无参构造方法");  
        }  
          
        // 初始化方法(初始化Servlet的配置信息)  
        public void init(ServletConfig arg0) throws ServletException {  
            System.out.println("初始化init方法 被调用");  
        }  
          
        // 服务方法(处理用户的请求 处理完成后 响应给用户)  
        public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {  
            System.out.println("service方法被调用");  
        }  
          
        // Servlet销毁方法  
        // 1.服务器关闭(停止)会调用  
        // 2.该应用程序被移除也会被调用  
        public void destroy() {  
            System.out.println("destory方法被调用");  
        }  
          
        // 获取servlet配置信息的方法  
        public ServletConfig getServletConfig() {  
            return null;  
        }  
          
        // 获取servlet的版本 作者等信息的方法  
        public String getServletInfo() {  
            return null;  
        }  
    }  

创建servlet方式二

    继承GenericServlet类(利用缺省适配方式)

    public class Demo02 extends GenericServlet{  
      
        @Override  
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {  
            System.out.println("Demo02的service方法");  
        }  
      
    }  

方式三(常用)

    直接继承httpServlet

    利用的是模板设计模式

    public class Demo03 extends HttpServlet{  
        // 重写doGet和doPost方法  
        @Override  
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
            System.out.println("doGet");  
        }  
          
        @Override  
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
            // 两种请求共用一个处理方式  
            doGet(req, resp);  
        }  
    }  

XML文件

    <?xml version="1.0" encoding="UTF-8"?>  
    <!-- 表示的是该xml文件的头 限制下面能写什么标签 -->  
    <!-- 还建议你书写标签的顺序 -->  
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
      <!-- 工程的名字 -->   
      <display-name>sh-web-01</display-name>  
      <!-- 配置servlet访问地址 -->  
      <!-- 创建一个servlet -->  
      <servlet>  
        <!-- 给创建的servlet对象起个对象名 -->  
        <servlet-name>demo01</servlet-name>  
        <!-- 设置servlet使用哪个类创建对象 -->  
        <!-- 注意:填全类名 -->  
        <servlet-class>com.lanou3g.Demo01</servlet-class>  
        <!-- 配置一下servlet创建的优先级 -->  
        <!-- 加上这个设置 服务器启动就会创建该servlet -->  
        <!-- <load-on-startup>1</load-on-startup> -->  
      </servlet>    
        
      <!-- 设置servlet的映射(访问地址) -->  
      <servlet-mapping>  
        <!-- 表示要给哪个servlet对象配置访问地址 -->  
        <servlet-name>demo01</servlet-name>  
        <!-- 设置访问地址 -->  
        <url-pattern>/demo01</url-pattern>  
      </servlet-mapping>  
        
      <servlet>  
        <servlet-name>demo02</servlet-name>  
        <servlet-class>com.lanou3g.Demo02</servlet-class>    
      </servlet>  
        
      <servlet-mapping>  
        <servlet-name>demo02</servlet-name>  
        <url-pattern>/demo02</url-pattern>  
      </servlet-mapping>  
        
      <servlet>  
        <servlet-name>demo03</servlet-name>  
        <servlet-class>com.lanou3g.Demo03</servlet-class>  
      </servlet>  
        
      <servlet-mapping>  
        <servlet-name>demo03</servlet-name>  
        <url-pattern>/demo03</url-pattern>  
      </servlet-mapping>  
        
      <servlet>  
        <servlet-name>demo04</servlet-name>  
        <servlet-class>com.lanou3g.Demo04</servlet-class>  
      </servlet>  
        
      <servlet-mapping>  
        <servlet-name>demo04</servlet-name>  
        <!-- 利用通配符配置路径 -->  
        <!--   
            1.  /demo04 配置的是绝对路径  
            2.  *.后缀名   *.action      
            3.  /*    
            4.  /   系统使用的默认的配置方法   
            注意:凡是通过服务器访问的资源都是servlet  
            注意:2 3 方式不能一起使用  
            匹配路径的优先级  
            绝对匹配 > / > 后缀  
         -->  
        <url-pattern>/*</url-pattern>  
      </servlet-mapping>  
        
      <!-- 一个servlet配置多个访问路径 -->  
      <servlet-mapping>  
        <servlet-name>demo04</servlet-name>  
        <url-pattern>/demo999</url-pattern>  
      </servlet-mapping>  
        
      <!-- 设置欢迎页面 直接访问工程路径出现的页面 -->  
      <welcome-file-list>  
        <welcome-file>HelloWorld.html</welcome-file>  
        <welcome-file>index.htm</welcome-file>  
        <welcome-file>index.jsp</welcome-file>  
        <welcome-file>default.html</welcome-file>  
        <welcome-file>default.htm</welcome-file>  
        <welcome-file>default.jsp</welcome-file>  
      </welcome-file-list>  
    </web-app>  

猜你喜欢

转载自blog.csdn.net/yanxinrui1995/article/details/80785040