javaweb学习路线-Tomcat与Servlet-1

时间:2021-10-19 12:51:13

1.Tomcat:先配置java环境和tomcat环境

配置端口号:到conf里面的server.xml中找到port:8080 可以修改端口号,最大到65535,注意不能占用默认的端口

work:存放tomcat动态生成的资源

appwebs:存放写的web文件

logs:日志

lib:tomcat要使用的架包

 

2.创建一个web应用:

静态网站:

第一步:在webapps下创建一个目录(名称不能包括中文和空格),这个目录被称为项目目录

第二步:在文件里创建一个html文件,在里面写内容就完事了

动态网站:

第一步:在webapps下创建一个目录

第二步:在项目目录下创建这些内容:

  创建一个WEB-INF文件(!!它下面的资源是允许浏览器访问的):

    web.xml文件

    lib文件夹(存放架包)

    classes文件夹(存放编译出来的.class文件)

  创建一个静态或者动态的页面

 

3.配置外部应用(了解):就是不放在tomcat那个webapps里也能找到它的方法

(待补充)

4.配置虚拟主机(就是用网址http://www.itcast.cn访问我们的项目):

  第一步:将端口号改成80,因为默认端口号就是80

  第二步:在本机上可以解析域名为127.0.0.1,这需要修改 C:\WINDOWS\system32\drivers\etc\hosts文件添加网址与127.0.0.1的绑定关系

  第三步:在server.xml文件中添加一个<Host>(主机):里面的name=“http://www.itcast.cn”  appBase="F:/itcastapps"

5.server.xml里面元素介绍:

 http协议:请求,响应。如果是IE浏览器需要安装HttpWatch软件,来查看请求和响应,谷歌自带。

      请求: 请求格式
         请求行
         多个请求头信息:头名称:头值
         空行
         请求体
         Connection:Keep-Alive
      响应:响应格式
         响应行(协议/版本 状态码的解析)
         响应头(key/value格式)
           响应内容的MIME类型:Content-Type:text/html;charset=utf-8 
         空行
         响应正文

6.POST请求的内容:

  1.表单中的数据会自动使用url来编码

  2.utf-8编码格式里一个汉字占3个字节,GBK编码格式里一个汉字占2个字节

    中文转换:一个中文三个字节 每一个字节先加上128  然后转换成16进制 最后添加%前缀

  3.在上传的时候修改Content-Type里面的内容

  4.个别请求头(点击链接跳转到百度会添加一个请求头,直接输入网址则不会出现):Referer:http://localhost:8080/hello/index.jsp 能统计访问量

  5.响应码:200,请求成功
         404,请求的资源没找到,客户端错误的请求了资源
         500,请求资源找到了,但服务器内部出现了错误
         302,重定向,表示服务器要求浏览器重新发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址
         304, Last-Modifired:最后请求时间
        请求头:
         if-Modified-Since:把上次请求的index.html的最后修改时间还给服务器
         状态码:304,比较if-Modified-Since的时间与文件真实的时间一样时,服务器会响应304.且不会有响应正文,表示浏览器缓存的就是最新版本

  6.常用响应头

    HTTP/1.1  200  ok:响应协议为HTTP1.1,状态码为200,表示请求成功,ok是对状态码的解释
    Server:Apache-Coyote/1.1:服务器的版本信息
    Content-Type:文本格式;编码格式;响应体的编码格式
    Set-Cookie:响应给客户端的Cookie
    Data:响应的时间,这可能会有8个小时的时区差

   具体关于请求头与响应头:http://blog.csdn.net/qingkongyeyue/article/details/54925741 

 

javaweb三大组件:Servlet和Listener和Filter 

Servlet:一个项目里每个servlet都是处理不同的请求的,都是独一无二的。

作用:接受请求数据,处理请求,完成响应

实现Servlet的方式:

1.实现javax.servlet.Servlet接口

2.继承javax.servlet.GenericServlet类(一般用下面那种,比较方便)

3.继承javax.servlet.http.HttpServlet类

     

如何让浏览器访问servlet?

1.给servlet指定一个servlet路径(在web.xml中配置)

2.访问servlet路径,找到我们写的servlet实现类

(servlet类是由我们自己写的,对象是由服务器创建的,并由服务器来调用)

javaweb学习路线-Tomcat与Servlet-1

 

 

ServletConfig: servlet配置介绍:

 javaweb学习路线-Tomcat与Servlet-1

HttpServlet:

HttpServlet extends GenderServlet(){

  void service(ServletRequest,ServletResponse)--生命周期方法

  强转两个参数为http协议相关的类型

  调用本类的service(HttpServletRequest,httpServletResponse)方法

 

  void service(HttpServletRequest,httpServletResponse)-->参数已经是Http协议相关的,使用起来方便得多

  它会通过request得到当前请求的方式

  根据请求的方式调用doGet()和doPost()方法

  doPost(){}  重写

  doGet(){}   重写

}

javaweb学习路线-Tomcat与Servlet-1

servlet与线程安全(servlet不是线程安全的,所以效率很高):

初级:不要在servlet中创建成员变量,只创建局部变量。

中级:可以创建无状态的成员(例如:只有方法的类)

高级:可以创建有状态成,但是状态必须为只读的

 

让服务器在启动的时候就创建servlet:

<load-on-startup>0</load-on-startup>//配置在web.xml的servlet里面的信息,设定了servlet的启动优先级,数字越小优先级越高。

一个servlet可以绑定多个url-pattem,这样会有多种途径来访问一个servlet

在url-pattem中可以使用通配符  *  .  ,这样servlet可以绑定一组url,例如/*,就可以匹配所有的URL,一个url中最多出现一个通配符,而且*不能出现在两端

 

Tomcat文件下config里面的web.xml了解:

首先它是所有web.xml的父文件,写在它里面的文件相当于写在每一个web.xml之中

servlet里面有个叫default的servlet,匹配优先级最低,界面对应404界面。

servlet与反射:Tomcat使用类名创建对象,调用方法,就是通过反射来做到的

ServletContext:一个项目只有一个这个对象,多个servlet之间可以用它来传递数据;
这个对象在tomcat启动时启动,销毁时销毁。

 

ServletContext是javaweb四大域对象之一:

  PageContext

  ServletRequest

  HttpSession

  ServletContext

所有的域对象都有存储数据的功能,因为内部有个Map用来存储数据,

ServletContext用来操作数据的方法:

void setAttribute(String name,Object value):存数据,一样的名字的值会覆盖,和map相同

Object getAttribute(String name):取数据,根据数据的名字来取数据的值

 

Servlet可以获取初始化参数,但这个参数是局部参数。换句话说,一个servlet只能获取到自己的初始化参数,不能获取到别人的。

ServletContex可以获取到应用的初始化参数与servlet初始化参数不一样

配置所有servlet的公共初始化参数(直接被根元素所包含):

<context-param>

  <param-name>xxx</param-name>

  <param-value></param-value>

</context-param>

使用ServletContext.getInitParameter("xxx");

获取文件或者文本存放的真实路径:

this.getServletContext().getRealPath("/index.jsp");

获取资源流,即以输入流的形式获取资源

例如:获取a.txt资源流:InputStream in=servletContext.getResourceAsStream("/a.txt");

获当前路径下所有资源的路径

this.getServletContext().getResourcePaths("/WEB-INF");

获取类路径下的资源:

首先获取到ClassLoader,用this.getClass().getClassLoader()

然后用它的方法getResourceAsStream("要读取文件的路径"),得到一个InputStream

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---