Tomcat,Servlet学习笔记

  Web概念

软件架构

1.C/S:客户端/服务器端

2.B/S:浏览器/服务器端(常用)

服务器可以由浏览器通过【IP,端口,传输协议】访问(请求),内含静态资源,动态资源。

静态资源:所有用户访问后,得到相同的结果,可以直接返回给浏览器(响应)。浏览器内含静态资源解析引擎,可以直接解析静态资源。如html,css,JavaScript(这部分我略过没学)

动态资源:每个用户访问相同资源后,得到不同的结果。动态资源需要转化成静态资源,才能被浏览器解析。如Servlet,jsp,php,asp等

Web服务器软件

服务器:安装了服务器软件的计算机

服务器软件:接收了用户的请求,处理请求,做出响应

Web服务器软件:接收用户的请求,处理请求,做出响应。部署Web项目,让用户通过浏览器来访问Web项目。

常见的Web服务器软件:WebLogic,WebSphere,JBOSS均要收费,Tomcat免费

  Tomcat

下载后解压得到文件夹即可。

bin目录:存放可执行文件

conf:存放配置文件

lib:存放依赖的jar包

logs:存放日志文件,可以用来调试程序

temp:临时文件

webapps:存放web项目

work:存放运行时的数据

启动方法:bin目录下,双击startup.bat

我启动的时候遇到了闪退+乱码,通过配置环境变量和更改字符集得到了解决,具体百度上很多。

启动后,不要关闭窗口,打开浏览器输入127.0.0.1:8080或localhost:8080就可以看到tomcat的页面

通过在cmd中输入ipconfig命令可以得到本机IP,我查到的本机IP为192.168.1.107。在浏览器中输入192.168.1.107:8080就可以让别人访问自己的tomcat了。(也可以用别人的IP访问别人的tomcat)

关闭方法:在不关闭startup.bat窗口的情况下,双击执行shutup.bat即可。或者直接按ctrl+C关闭。

部署项目的方式:将项目放到webapps中。

访问:localhost/虚拟目录/资源名.html

1.普通部署

虚拟目录:项目的访问路径(项目文件夹名称)

简化部署方式:将虚拟目录下的资源压缩后,改后缀名为war,将war包直接放到webapps目录中

2.通过配置部署

在conf目录下的server.xml文件中在<Host>标签体写入:<Context docBase = "项目存放路径" path= "虚拟目录"/>

3.热部署

在conf/Catalina/localhost中创建一个xml文件该文件名称就是虚拟目录,在文件中编写

<Context docBase = "项目存放路径"/>

webapps中项目分类:

1.静态项目:html,css,JavaScript等

2.动态项目:动态项目为WEB-INF目录,内含核心配置文件web.xml,class目录(放置字节码文件),lib目录(放置依赖的jar包)

将Tomcat集成到IDEA中:

run—>editorconfigurations—>Templates—>tomcat Server—>loca—>server—>configure—>选择tomcat的安装目录。

然后我们通过创建一个项目,再来使用tomcat部署。

创建项目:在idea中创建一个Java Enterprise的project或module,选择Java EE7,已默认使用tomcat服务器。在下面的列表中勾选Web application。

创建完成后,web-WEB-INF目录中index.jsp,可以写一些内容,然后点绿色三角启动部署。

默认主页为index,故用localhost:8080就可以访问。如果新建新的html文件,就要加上html的文件名(虚拟目录)来访问。

 Servlet

通俗的解释:浏览器访问服务器中的动态资源时,需要java代码来表现动态逻辑。这里的java代码是一些特殊的类,依赖于服务器才能运行,由tomcat来执行它们。而这些java类需要遵守一定的规则(接口),才能被tomcat所识别,这些接口就是Servlet。将来我们会自定义一个类,实现Servlet接口,复写其中的方法。

概念:运行在服务器端的小程序

快速入门:

在之前创建好的project的src文件下创建一个包,然后创建一个class,实现Servlet接口,并实现接口中所有的方法。

为了测试,我们在service()方法中打印一行内容。

 1 public class servletdemo implements Servlet {
 2 
 3     @Override
 4     public void init(ServletConfig servletConfig) throws ServletException {
 5 
 6     }
 7 
 8     @Override
 9     public ServletConfig getServletConfig() {
10         return null;
11     }
12     //提供服务的方法
13     @Override
14     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
15            System.out.println("Hello Servlet!");
16     }
17 
18     @Override
19     public String getServletInfo() {
20         return null;
21     }
22 
23     @Override
24     public void destroy() {
25 
26     }
27 }
View Code

在WEB-INF文件夹下的web.xml文件中进行配置:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 5          version="3.1">
 6     <!--配置Servlet -->
 7     <servlet>
 8         <servlet-name>demo</servlet-name>
 9         <servlet-class>servlet.servletdemo</servlet-class>
10     </servlet>
11 
12     <servlet-mapping>
13         <servlet-name>demo</servlet-name>
14         <url-pattern>/demo</url-pattern>
15     </servlet-mapping>
16 
17 </web-app>
View Code

运行tomcat服务器后,访问localhost:8080/xxx(xxx为xml中配置的名字,上面配置的叫demo),就可以在idea控制台看到之前打印的内容了。

执行原理:

1.服务器接收到客户端浏览器的请求后,会解析请求URL路径。localhost:8080可以定位到访问的Servlet资源路径

2.查找web.xml文件,是否有对应的<url-pattern>标签体内容,如例子中就由url路径中的demo查到了xml文件中的demo

3.找到对应的<service-class>中配置好的全类名

4.tomcat会将字节码文件加载进内存,并且创建类对象(反射)

5.tomcat调用其方法。在快速入门程序中,就调用了seivice()方法。

Servlet中的生命周期:

1.被创建:执行init()方法,只执行一次

注意:默认情况下,Servlet在第一次被访问时被创建,可以配置创建的时机。

配置方法:在<servlet>标签下配置<load-on-startup>,负数表示第一次被访问时创建,0或正数表示服务器启动时创建。

2.提供服务:执行service()方法,执行多次(每一次访问时)重点方法

3.被销毁:执行destroy()方法,只执行一次(点红色小方块关闭服务器时)

注意:只有服务器正常关闭时,才执行destroy()方法,且执行于Servlet被销毁前执行,用于释放资源

介绍一种用注解来配置的方法:

需要Servlet3.0以上的版本。

1.重新创建一个module,选择JavaEE6及以上的版本,不需要勾选创建web.xml选项。

2.定义一个类,实现Servlet接口。

3.复写所有的方法。

4.在类上使用@WebServlet注解进行配置。

配置路径完整写法:@WebServlet(urlPatterns="/demo")

配置路径省略写法:@WebServlet("/demo")

配置多个路径写法(均可访问同一个资源):@WebServlet({"/demo1","/demo2","/demo3"})

配置多层路径写法(需要完整路径才可访问资源):@WebServlet("/user/demo")

使用通配符*配置路径写法(*表示任意内容均可访问,但是在存在其他指定的资源时,优先级最低):@WebServlet("/user/*")

使用*.do格式配置路径写法(注意没有/):@WebServlet("*.do")

Idea与tomcat相关配置:

1.Idea会为每一个tomcat部署的项目单独建立一份配置文件

如何查看:启动服务器后,控制台中找到Using CATALINA_BASE:   "C:\Users\Dexin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\_IdeaProjects"语句,用后面的路径访问即可查看。

2.tomcat真正访问的是“tomcat部署的web项目”,即对应“工作空间项目”的web目录下的所有资源。

WEB-INF目录下的资源不能被浏览器直接访问。

3.断点调试需要使用小虫子按钮启动debug界面。

Servlet体系结构

Servlet接口——>GenericServlet抽象类——>HttpServlet抽象类

GenericServlet抽象类:只将service()方法设置为抽象类,必须实现,其他方法做了默认空实现,不一定要实现。

1 @WebServlet("/demo2")
2 public class TestGenericServlet extends GenericServlet {
3 
4     @Override
5     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
6         System.out.println("GenericServlet 测试成功!");
7     }
8 }
View Code

HttpServlet抽象类:对http协议的一种封装,简化操作。

因为在实际操作中,我们必然需要在service()方法中写获取数据的代码,要获取数据,首先需要判断获取的方式是doGet/doPost,然后做出不同的处理。HttpServlet抽象类就为我们封装好了这些代码,并在其中调用了doGet()&doPost(),我们只需要在service()方法中实现这两个方法即可。

 1 @WebServlet("/demo3")
 2 public class TestHttpServlet extends HttpServlet {
 3     @Override
 4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 5         System.out.println("doGet测试成功!");
 6     }
 7 
 8     @Override
 9     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
10         System.out.println("doPost测试成功!");
11     }
12 }
View Code

 

posted @ 2020-04-21 15:15  菅兮徽音  阅读(149)  评论(0编辑  收藏  举报