什么是Servlet:
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Tomcat服务器:
下载: http://tomcat.apache.org/ —>apache-tomcat-7.0.82-windows-x64.zip启动:apache-tomcat-7.0.82 —> bin —> startup.bat
浏览器中测试: http://localhost:8080/ 或 http://127.0.0.1:8080/
关闭: apache-tomcat-7.0.82 —> bin —> shutdown.bat 或 Ctrl+C 或直接关闭
闪退: java环境变量没有配置
查看是否配置java环境变量: cmd中 —> java -version
java环境变量配置: 这台电脑 —> 属性 —> 高级系统设置 —> 环境变量 —> 变量名: JAVA_HOME
变量值: C:\ProgramFiles\Java\jdk1.8.0_45 —> 变量名: Path 变量值的最后面写: ;%JAVA_HOME%\bin
esc键: 退出焦点,继续执行
webapps:存放web项目的, 静态资源(html、css、js、img...), META-INF(项目配置信息), WEB-INF(项目内层,不能直接被访问) —> classes(java代码存放处)、lib(项目依赖内裤jar)、web.xml(核心配置文件)
更改端口号: apache-tomcat-7.0.82 —> conf —> server.xml中的第71行 port: 8005/8080/8009
查看已经占用的端口号: cmd -> netstat -ano
查看8080端口是否被占用: cmd -> netstat -ano | find "8080"
eclipse配置:
Eclipse和tomcat关联:
Servlet 接口,抽象方法
init 初始化方法
destroy 销货方法
service 核心方法
getServletConfig() 获取servlet配置
getServletInfo() 获取servlet信息
Servlet生命周期:
init(ServletConfig config)方法 初始化servlet调用的方法 、 tomcat执行 、 一次 、 默认第一次访问时
service(ServletRequest req, ServletResponse res)方法 核心服务方法 、 执行者是tomcat 、 执行次数是每次访问都执行 、 执行时机是每次请求
destroy()方法 销毁方法 、 tomcat 、 1次 、 tomcat正常关闭活着项目移除
关联源码: ctrl+左键添加源码,选择文件
ServletConfig:
String getInitParameter(String name) 获取servlet初始化参数 T02_Constractor com.hx.web1.web.T02_Constractor encoding utf-8
getInitParameterNames() 获取初始化所有参数的名字
getServletName() 获取servlet配置名
getServletContext() 获取整个应用的app,上下文
ServletContext
<!-- context 上下文-参数 app参数 -->
<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
四大域对象之一(最大),作用在整个应用
获取mimeType
String fileName = "xx.jpg"; // js -> text/javascript zip txt
String mimeType = servletContext.getMimeType(fileName);
System.out.println(mimeType);
String fileName2 = "txt"; // js -> text/javascript zip txt
String mimeType2 = servletContext.getMimeType(fileName2);
System.out.println(mimeType2);//null
获取项目真实路径(文件上传) 上传图片,保存在tomcat下面
String realPath = servletContext.getRealPath("/upload");
System.out.println(realPath);
String realPath2 = servletContext.getRealPath("upload");
System.out.println(realPath2);
servlet单实例,多线程 service很多次 多线程-> 线程安全问题 最好不要用全局变量!
<?xml version="1.0" encoding="UTF-8"?>
<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>Web001</display-name>
<!-- 欢迎界面 -->
<welcome-file-list>
<welcome-file>index.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>
<!-- 暴露 login servlet alt+/ 提示 -->
<!-- 暴露具体配置的哪一个servlet -->
<servlet>
<!-- 当前servlet在xml中的名字 id -->
<servlet-name>loginServlet</servlet-name>
<!-- 具体的类的全路径 -->
<servlet-class>com.czm.servlet.LoginServlet</servlet-class>
</servlet>
<!-- 真正的外界访问路径 -->
<servlet-mapping>
<!-- 对应的哪一个servlet配置路径 -->
<servlet-name>loginServlet</servlet-name>
<!-- 路径 / http://localhost/Web001/login.do -->
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
<!-- 暴露register -->
<servlet>
<servlet-name>registerServlet</servlet-name>
<servlet-class>com.czm.servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>registerServlet</servlet-name>
<url-pattern>/register.do</url-pattern>
</servlet-mapping>
<!-- 暴露login2 -->
<servlet>
<servlet-name>login2Servlet</servlet-name>
<servlet-class>com.czm.servlet.Login2Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login2Servlet</servlet-name>
<url-pattern>/login2.do</url-pattern>
</servlet-mapping>
</web-app>