Tomcat子目录分别存放的文件类型:
一、bin目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。
重要:
很多环境变量的设置都在此处,例如可以设置JDK路径、TOMCAT路径
startup 用来启动tomcat
shutdown 用来关闭tomcat
修改catalina可以设置tomcat的内存
二、conf目录主要是用来存放tomcat的一些配置文件。
重要:
server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码
web.xml可以设置tomcat支持的文件类型
context.xml可以用来配置数据源之类的
tomcat-users.xml用来配置管理tomcat的用户与权限
在Catalina目录下可以设置默认加载的项目
三、lib目录主要用来存放tomcat运行需要加载的jar包。
例如,像连接数据库的jdbc的包我们可以加入到lib目录中来。
logs目录用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响)
在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中 (xxxxx为日期)
在linux环境中,控制台的输出日志在catalina.out文件中
四、temp目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)
五、webapps目录用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包、jar包的形式发布应用。
当然,你也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行。
六、work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。
清空work目录,然后重启tomcat,可以达到清除缓存的作用。
Servlet web.xml配置
一、
login2 1、 Servlet的类名 servlet的全类名
<servlet-class>com.hisoft.servlet.login2</servlet-class>
<load-on-startup>3</load-on-startup>
2、Servlet的类名 Servlet的访问路径 login2 /login2
调用方式:http://localhost:8080/ScervletDemo/login
端口 项目名+Servlet类名
实现顺序:login––Servlet的类名 – Servlet的类名–<servlet-
class>servlet的全类名</servlet-class>
二、快速建立自动生成@webServlet("/Servlet类名")注解
web容器启动时,他会为每个web应用程序都创建一个对应的ServletContext对象,代表当前web应用。ServletConfig对象中维护了ServletContext的引用,编写Servlet时候,可以通过ServletConfig.getServletContext来获取ServletContext对象;
ServletConfig:由web容器创建,一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet
有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
ServletContext:由web容器创建,对任何servlet,任何人在任何时间都有效,等于是全局的对象。
所有的Servlet对象共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯;
每一个Servlet对象的ServletConfig不能被另一个Servlet对象访问;
Servlet访问路径配置三种方式:
1、以 / 开头;
如:/login
2、以/* 结尾
如:/login/*
3、加后缀名
*.do、*.action
请求方式:一、get:1、地址栏中直接输入
2、
3、超链接
4、默认为get请求
二、Post:目前仅知
http请求的组成:请求行+请求头+请求体
Post 和Get的区别:1、请求行不同:Post的请求行 路径只是单纯的路径 Get 请求行路径中包含用户输入的信息
get请求的时候用户输入的内容在请求url中,会在地址栏中显示,数据泄露,不安全
Pose有请求体 userName = qqq
Get没有请求体
如果用户输入的信息过多 get请求时数据在地址栏中,地址栏的空间是有限的。一般为1kb
http请求头中参数
:
Accept: text/html,image/* 客户端识别文件类型
Accept-Charset: ISO-8859-1 客户端字符集
Accept-Encoding: gzip 客户端支持编码类型 gzip 压缩格式
Accept-Language:zh-cn 客户端语言
Host: www.yanqi.com:80 访问服务器地址
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT和
Last-Modified 一起使用 控制缓存 (tomcat 提供缓存 过滤器 缓存处理)
Referer: http://www.itcast.com/index.jsp (重要) 防止盗链 获取网站域名地址
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 浏览器类型(文件下载时,不同浏览器进行不同处理) 不同的浏览器器存在兼容性!!
Connection: close/Keep-Alive 请求后连接是关闭还是保持
Date: Tue, 11 Jul 2000 18:23:51 GMT 请求时间
HTTPServletResponse
重定向:一个Servlet接收到客户端请求后,通知客户端去请求另外一个Servlet
两种方式:1、重定向一
response.setStatus(302);
response.setHeader("Location", "./login.html");
重定向二
response.sendRedirect("./login.html");
重定向后地址栏会发生改变,不能后退;
**向浏览器输入内容:**
PrintWriter out = response.getWriter();
out.print("您访问的资源不存在,3秒后跳转");
通过response把内容输入到浏览器内
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charaet=utf-8");//可以告诉浏览器使用什么样的编码去解析我们htm;
解决响应时的乱码
自动刷新页面:
两种方式:1、response.setHeader(“refresh”,“3,;url=./login.html”) (doget()或dopost()内部)
2、<meta http-equiv="refresh" content="3;url=./login.html"> (写在html文件中的<head>标签内部)
HTTPServletRequest:
常用API:一、获取请求行信息
1、获取请求的方法:request.getMethod();
2、获取请求的URI:request.getResquestURI();
3、获取请求的URL:request.getrequestURL();
4、获取请求行的协议:request.getProtocol();
5、获取客户ip地址:request.getRemoteAddr()
二、获取请求头中的API
getHeaders(String name)方法--返回值:枚举类型的集合 Enumeration<String>
getHeaderNames方法--Enumeration<String>,返回的内容是请求头中的key的集合
getIntHead(name)方法 ---返回值:int 如果请求头的信息是整型的,可以通过getIntHead()获取
getDateHead()方法--返回值:long (日期对应毫秒)
get请求乱码解决方案:一、把编码过程逆转解决乱码
1、userName = URLEncoder.encode(uaerName,"iso-8859-1");
userName = URLDecoder.decode(username,"utf-8");
2、new String(username.getBytes("iso-8859-1"),"utf-8")
二、更改字符集:配置Tomcat的默认解码字符集 在conf/server.xml中
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/>
在“8843”和面加上URIEncoding=“utf-8” 这样就把所有项目的解码字符集定为utf-8; (不建议使用。修改tomcat中server.xml。会很死板。如果一个tomcat部署2个项目,1个utf-8;1个是gbk;会出现乱码)
获取请求参数:请求参数:用户提交的数据;
key=value
String str = request.getParameter("key")
获取多个类容
String[] values = getParameter("name")
一般用于复选框checkbox 一个name对应多个value
request.getParameterMap()获取请求体的全部内容,自动封装Map<String,String[]>
遍历输出:
Map<String,String[]> map = request.getParameterMap();
for(String key:map.keySet()){
String[] values = map.get(key);
for(String value : values){
system.out.println(key+":"+value)
}
}
post请求乱码问题解决方案:
request.setCharacterEncoding();在获取参数之前设置字符集
转发传递数据:RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet");
requestDispatcher.forward(request,response); ---执行被转到的servlet
system.out.println("转发之后");
在此Servlet中也可以对数据进行操作,操作完再转发
请求转发和重定向的区别:1、重定向是页面跳转 所有语言通用方式302+Location
2、重定向共产生两次请求、两次响应。url地址栏显示第二次请求资源路径(重定向对用户可见)
3、转发:再一次请求过程中,服务器端有多个资源共同对请求数据进行处理
4、转发,只会产生一次请求,一次响应,转发是服务器内部行为,转发对用户不可见