1.tomcat补充
(1).tomcat启动报错的时候,检查
- 1.8080端口号是否被占用(netstat -ano|findstr 8080)
- 2.JAVA_HOME是否配置出错(显然基本上不会)
- 3.tomcat目录/log/catalina.out,有时候是带日期的
(2).tomcat部署web项目:
(1).tomcat目录/webapps下,将项目复制进去,项目名就是文件夹名称(如果把war包放进去,tomcat启动后会自动解压)
(2).docBase指定外部目录作为项目部署路径
- 标准的web项目标准结构(和开发的时候不一样):
再次理解,项目构建工具,如maven的使用(从开发环境到部署环境的构建可配置化,所以如果发现前端界面出问题了,优先去target目录(部署环境)下找问题)
- idea中配置tomcat并运行(docBase外部目录部署的方式)
1.配置时注意是war explored,表示使用文件夹来部署
2.Deployment中Application Context表示应用上下文/项目部署名
3.访问也要使用Application Context
2.(流程分析)uri查找的过程和映射的资源理解
正在上传…重新上传取消
- URL查找的过程:
ip对应主的得地址
port对应进程
应用文路径对应项目
之后的uri,对应项目中的资源
- uri映射资源:
(1).资源包括静态资源文件
(2).还包括程序提供的资源(Servlet的路径及http请求相应资源)
3.写一个servlet
(1).注解的使用:
小括号包括对个属性,属性名=属性值,多个之间逗号间隔,属性名为value时可以缺省
原来应该是这样
因为我们这里只需要用value,所以可以缺省
(2).(重要)Servlet注意事项
1.Servlet定义服务:注意服务路径必须是/开始,否则tomcat启动就会报错
2.浏览器输入url的访问请求默认是get请求,想要对指定url发起post请求可以自己在文件中指定,也可以使用postman来发起
3.servlet代码同样可以debug(要多用),打上断点,用debug的方式运行(平时也推荐一直用debug的方式运行),然后postman发起了post请求(即使是post,还是会出错)
可以看到方法栈里面有doPost方法,说明是成功进入这个方法了
4.为什么使用了post方法请求还是返回405呢?
因为我们默认调用的是super.doPost方法,而父类的doPost方法是直接抛出一个405错误。(其实是内部的tomcat在里面在用的Servlet和官方的Servlet不统一导致的)
同样的,如果没有重写,如果发生了对应的请求,会自动调用父类的方法,抛出405错误。
5.Servlet文件一旦发生改变,必须重新启动tomcat,html文件发生改变,一定要刷新一下浏览器
(3)怎么写servlet
1.写上WebServlet注解的value值(这个是服务路径,通过这个来定位到该Servlet对象),然后让Servlet类继承HttpServlet类
2.重写相应的请求方法
* 每次http请求映射到某个Servlet的资源路径,都会调用service生命周期方法
* 如果请求方法没有重写,就调用父类的doXXX(对应请求方法),返回405
* 如果重写,会将请求数据包装为一个Request请求对象,这时候虽然还没有响应,但是也包装了一个Response响应对象
3.设置请求,响应编码,及响应数据类型(为响应体设置Content-Type数据类型)
4.解析数据,request.getParameter方法获取请求数据:在url和请求体(body)内获取数据,数据格式为k1=v1&k2=v2(这种键值对的数据都可以获取)
5.返回响应数据
获取io输出流,输出内容,刷新缓冲区,关闭资源
(4)(重要)servlet服务执行流程分析
- 总体流程分析
1.客户端通过url请求响应服务,通过ip定位主机,port定位端口号,应用上下文路径定位web应用,然后通过剩下的uri(服务路径)定位静态网页资源。
2.服务端响应网页资源
3.客户端受到网页资源,网页初始化的时候,或者点击某个按钮,发生了某个事件之后(网页中我们可以自己写代码来调用Servlet服务)要调用后端的servlet服务,于是向后端发起Servlet请求(也是通过ip port 上下文路径 服务路径的方式进行请求)
4.服务端响应Servlet请求
- Servlet请求响应分析
tomcat启动:
通过一些机制,实例化Servlet对象:
1.产生服务路径(资源路径)和Servlet对象之间的映射关系
2.每次http请求,通过上下文路径+服务路径,查找到唯一的Servlet对象
3.调用Servlet对象的service方法
4.service方法中,将doXXX方法组织为一个模板方法,我们可以重写对应的方法,如果不重写,默认执行父类的方法,抛出405异常