一、Tomcat
Tomcat的默认端口:HTTP/1.1-8080、Tomcat admin port-8005、AJP/1.3-8009;(www-HTTP 协议的默认端口号:80)
文件夹作用:
bin:可执行文件;
conf:配置文件,Tomcat 运行时的一些参数;
server.xml:*非常重要的配置文件(端口号);
lib:Tomcat 依赖第三方jar包;
logs:Tomcat 运行时的日志文件;
temp:临时文件;
webapps:Tomcat 对外发布的可访问资源(工程、项目);
ROOT:运行 Tomcat 主页的运行文件
work:webapps 编译时的一些文件。
进入Tomcat:
启动tomcat,进入 http://localhost:8080/,会看到如下三个按钮:
Server Status,Manager App,Host Manager
右边的三个按钮,分别表示进入服务器状态,管理服务器上部署的应用,管理主机界面。
进入管理页面可以看到tomcat的版本信息
在默认情况下,tomcat的配置文件里没有角色,因为在tomcat的conf文件夹下的tomcat-users.xml文件中,用户是被注释掉的。
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->
所以点击三个中任意一个按钮,会跳转到一个拒绝的界面
在tomcat-users.xml加入下面的role,再创建一个user,重启服务器输入下面创建的用户名和密码就可以进入管理页面了
<role
rolename
=
"manager-gui"
/> //对应第二个按钮权限
<role
rolename
=
"admin-gui"
/>
//对应第三个按钮权限
<
user
username
=
"admin"
password
=
"admin"
roles
="manager-gui,admin-gui"/>
注意:在localhost:8080页面下,如果一旦
点击三个按钮输入过用户名,密码,localhost:8080
页面会记住输入的用户名和密码,如果第一次输入的用户名密码没有manager-gui
、admin-gui
权限的话,会弹出拒绝页面,再次进入localhost:8080页面
,点击三个按钮,会默认帮你输入之前的用户名和密码,仍然会弹出拒绝页面
,要想进入管理页面,必须在之前输入的用户下加入manager-gui
、admin-gui权限
<user username="admin" password="admin" roles="tomcat,manager-gui,admin-gui"/>
第一个按钮查看服务器状态
第二个按钮管理服务器上部署的应用,页面上有start,stop按钮可以启动和关闭web project;还可以进行项目部署:在myeclipse的对应项目上右击/Export 在弹出的对话框中选择JavaEE/WARfile(MyEclipse)将该项目导入到某个位置(不妨是桌面),进入Tomcat管理页面(http://localhost:8080)点击ManagerApp,进入管理应用界面,在WAR fileto deploy(如下图:) 选择刚才到处的WAR文件即可,然后就可以在上面的应用列表中看到自己刚部署的项目。
第三个按钮管理主机界面
二、Web项目手动发布的三种方式
- 将一个web项目copy到webapps/ROOT目录下
- Tomcat虚拟路径的配置:修改server.xml在Host中加入:<Context path="/xiaoniu" docBase="C:/xzy"/>
- Tomcat虚拟路径的配置:在conf/Catalina/localhost/test.xml test作为虚拟路径名称.
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="C:/xzy"/>
三、Dynamic Web Project
1.WebContent->WEB-INF->
web.xml:默认配置->
<welcome-file-list>
默认欢迎界面列表。
</welcome-file-list>
<servlet>
<servlet-name>3.实例对象 </servlet-name>
<servlet-class>4.工程的包名.文件名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>2.实例对象的映射</servlet-name>
<url-pattern>1.自定义URL资源名称(/xxx)</url-pattern>
</servlet-mapping>
2.过滤器 Filter
实现了 javax.servlet.Filter接口的一个类
<filter>
<init-param><!-- 初始化 -->
<param-name>变量名</param-name>
<param-value>变量值</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoder</filter-name>
<url-pattern>过滤方式(*:拦截所有网页请求|*.html:只拦截以.html结尾的网页)</url-pattern>
</filter-mapping>
3.重定向&跳转
重定向(.sendRedirect("URL");):浏览器的地址会发生改变,值为重定向的地址。重定向不能访问 /WEB-INF 下受保护的资源。不会造成表单数据的重复提交。不能返回数据。
跳转(Request.getRequestDispatcher("跳转的目标页面").forward(request,response);):可以访问 /WEB-INF/ 下受保护的资源。问题:会造成表单数据的重复提交,插入数据和更新数据的时候,最好不使用跳转的方式。可以在响应中返回数据。
四、浏览器头信息
头信息 | 描述 |
Accept | 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常见的两种可能值。 |
Accept-Charset | 这个头信息指定浏览器可以用来显示信息的字符集。例如 ISO-8859-1。 |
Accept-Encoding | 这个头信息指定浏览器知道如何处理的编码类型。值 gzip 或 compress 是最常见的两种可能值。 |
Accept-Language | 这个头信息指定客户端的首选语言,在这种情况下,Servlet 会产生多种语言的结果。例如,en、en-us、ru 等。 |
Authorization | 这个头信息用于客户端在访问受密码保护的网页时识别自己的身份。 |
Connection | 这个头信息指示客户端是否可以处理持久 HTTP 连接。持久连接允许客户端或其他浏览器通过单个请求来检索多个文件。值 Keep-Alive 意味着使用了持续连接。 |
Content-Length | 这个头信息只适用于 POST 请求,并给出 POST 数据的大小(以字节为单位)。 |
Cookie | 这个头信息把之前发送到浏览器的 cookies 返回到服务器。 |
Host | 这个头信息指定原始的 URL 中的主机和端口。 |
If-Modified-Since | 这个头信息表示只有当页面在指定的日期后已更改时,客户端想要的页面。如果没有新的结果可以使用,服务器会发送一个 304 代码,表示 Not Modified 头信息。 |
If-Unmodified-Since | 这个头信息是 If-Modified-Since 的对立面,它指定只有当文档早于指定日期时,操作才会成功。 |
Referer | 这个头信息指示所指向的 Web 页的 URL。例如,如果您在网页 1,点击一个链接到网页 2,当浏览器请求网页 2 时,网页 1 的 URL 就会包含在 Referer 头信息中。 |
User-Agent | 这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。 |
1.读取 HTTP 头的方法
下面的方法可用在 Servlet 程序中读取 HTTP 头。这些方法通过 HttpServletRequest 对象可用。
获得客户机信息:
getMethod()返回用于发出此请求的 HTTP 方法的名称
getRemoteAddr()返回发送请求的客户端或最后一个代理的 Internet Protocol (IP) 地址
getContextPath()返回请求 URI 指示请求上下文的那一部分
getRequestURI()返回此请求的 URL 的一部分
getRequestURL()重新构造客户端用于发出请求的 URL
getQueryString()返回包含在请求 URL 中路径后面的查询字符串
接收请求参数:
getParameter(String name)以 String 形式返回请求参数的值,如果该参数不存 在,则返回 null
getParameterNames()返回包含此请求中所包含参数的名称的 String 对象的 Enumeration
getParameterMap()返回此请求的参数的 java.util.Map
作为域对象存取数据:(request域的作用范围:一次请求范围.)
setAttribute(String name, Object o)存储此请求中 的属性
getAttribute(String name)以 Object 形式返回指定属性的值,如果不存在给定 名称的属性,则返回 null
removeAttribute(String name)从此请求中移除属性
五、服务器头信息
头信息 | 描述 |
Allow | 这个头信息指定服务器支持的请求方法(GET、POST 等)。 |
Cache-Control | 这个头信息指定响应文档在何种情况下可以安全地缓存。可能的值有:public、private 或 no-cache 等。Public 意味着文档是可缓存,Private 意味着文档是单个用户私用文档,且只能存储在私有(非共享)缓存中,no-cache 意味着文档不应被缓存。 |
Connection | 这个头信息指示浏览器是否使用持久 HTTP 连接。值 close 指示浏览器不使用持久 HTTP 连接,值 keep-alive 意味着使用持久连接。 |
Content-Disposition | 这个头信息可以让您请求浏览器要求用户以给定名称的文件把响应保存到磁盘。 |
Content-Encoding | 在传输过程中,这个头信息指定页面的编码方式。 |
Content-Language | 这个头信息表示文档编写所使用的语言。例如,en、en-us、ru 等。 |
Content-Length | 这个头信息指示响应中的字节数。只有当浏览器使用持久(keep-alive)HTTP 连接时才需要这些信息。 |
Content-Type | 这个头信息提供了响应文档的 MIME(Multipurpose Internet Mail Extension)类型。 |
Expires | 这个头信息指定内容过期的时间,在这之后内容不再被缓存。 |
Last-Modified | 这个头信息指示文档的最后修改时间。然后,客户端可以缓存文件,并在以后的请求中通过 If-Modified-Since 请求头信息提供一个日期。 |
Location | 这个头信息应被包含在所有的带有状态码的响应中。在 300s 内,这会通知浏览器文档的地址。浏览器会自动重新连接到这个位置,并获取新的文档。 |
Refresh | 这个头信息指定浏览器应该如何尽快请求更新的页面。您可以指定页面刷新的秒数。 |
Retry-After | 这个头信息可以与 503(Service Unavailable 服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求。 |
Set-Cookie | 这个头信息指定一个与页面关联的 cookie。 |
1.设置 HTTP 响应报头的方法
下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头。这些方法通过 HttpServletResponse 对象可用。
设置状态码:
setStatus(int sc) 设置此响应的状态代码
设置响应头:
setHeader(String name, String value)用给定名称和值设置响应头
setIntHeader(String name, int value)用给定名称和整数值设置响应头
setDateHeader(String name, long date)用给定名称和日期值设置响应头
addHeader(String name, String value)用给定名称和值添加响应头。此方法允许 响应头有多个值
addIntHeader(String name, int value)用给定名称和整数值添加响应头。此方法 允许响应头有多个值
addDateHeader(String name, long date)用给定名称和日期值添加响应头,该日期 根据距历元时间的毫秒数指定。此方法允许响应头有多个值
设置响应体:
getOutputStream()返回适用于在响应中编写二进制数据ServletOutputStream
getWriter()返回可将字符文本发送到客户端的 PrintWriter 对象
setContentType(String type)设置将发送到客户端的响应的内容类型
setCharacterEncoding(String charset)设置将发送到客户端的响应的字符编码
sendRedirect(String location)使用指定重定向位置 URL 将临时重定向响应发 送到客户端
六、Servlet HTTP 状态码
代码 | 消息 | 描述 |
100 | Continue | 只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。 |
101 | Switching Protocols | 服务器切换协议。 |
200 | OK | 请求成功。 |
201 | Created | 该请求是完整的,并创建一个新的资源。 |
202 | Accepted | 该请求被接受处理,但是该处理是不完整的。 |
300 | Multiple Choices | 链接列表。用户可以选择一个链接,进入到该位置。最多五个地址。 |
301 | Moved Permanently | 所请求的页面已经转移到一个新的 URL。 |
302 | Found | 所请求的页面已经临时转移到一个新的 URL。 |
303 | See Other | 所请求的页面可以在另一个不同的 URL 下被找到。 |
306 | Unused | 在以前的版本中使用该代码。现在已不再使用它,但代码仍被保留。 |
307 | Temporary Redirect | 所请求的页面已经临时转移到一个新的 URL。 |
400 | Bad Request | 服务器不理解请求。 |
401 | Unauthorized | 所请求的页面需要用户名和密码。 |
402 | Payment Required | 您还不能使用该代码。 |
403 | Forbidden | 禁止访问所请求的页面。 |
404 | Not Found | 服务器无法找到所请求的页面。. |
405 | Method Not Allowed | 在请求中指定的方法是不允许的。 |
406 | Not Acceptable | 服务器只生成一个不被客户端接受的响应。 |
407 | Proxy Authentication Required | 在请求送达之前,您必须使用代理服务器的验证。 |
408 | Request Timeout | 请求需要的时间比服务器能够等待的时间长,超时。 |
409 | Conflict | 请求因为冲突无法完成。 |
410 | Gone | 所请求的页面不再可用。 |
411 | Length Required | "Content-Length" 未定义。服务器无法处理客户端发送的不带 Content-Length 的请求信息。 |
412 | Precondition Failed | 请求中给出的先决条件被服务器评估为 false。 |
413 | Request Entity Too Large | 服务器不接受该请求,因为请求实体过大。 |
414 | Request-url Too Long | 服务器不接受该请求,因为 URL 太长。当您转换一个 "post" 请求为一个带有长的查询信息的 "get" 请求时发生。 |
415 | Unsupported Media Type | 服务器不接受该请求,因为媒体类型不被支持。 |
500 | Internal Server Error | 未完成的请求。服务器遇到了一个意外的情况。 |
501 | Not Implemented | 未完成的请求。服务器不支持所需的功能。 |
502 | Bad Gateway | 未完成的请求。服务器从上游服务器收到无效响应。 |
503 | Service Unavailable | 未完成的请求。服务器暂时超载或死机。 |
504 | Gateway Timeout | 网关超时。 |
505 | HTTP Version Not Supported | 服务器不支持"HTTP协议"版本。 |
七、处理中文乱码
Request的Get方法中文乱码解决方案:
String username= request.getParameter("username");
new String(username.getBytes("ISO8859-1"),"UTF-8")
Request的Post方法中文乱码解决方案:
request.setCharacterEncoding("UTF-8");
String username= request.getParameter("username");
Response乱码解决方案:
设置浏览器打开的编码:
response.setHeader("Content-Type", "text/html;charset=UTF-8");
设置response缓冲区的编码:
response.setCharacterEncoding("UTF-8");
或者一行代码:response.setContentType("text/html;charset=utf-8");
中文转成字节数组编码:
response.getWriter().println("简体字");
response.getOutputStream().write("简体字".getBytes("UTF-8"));
八、jQuery 实现 AJAX
get():语法:$.get(URL,callback);||$.get(url,[data],[callback],[type]);
url:发送请求地址。
data:待发送 Key/value 参数。
callback:发送成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。
post()
通过远程 HTTP POST 请求载入信息。
这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。
语法:$.post(URL,data,callback);|| $.post(url,[data],[callback],[type]);
参数:
url:发送请求地址。
data:待发送 Key/value 参数。
callback:发送成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。