tomcat 是一个web服务器,将编译后的class文件和配置文件web.xml(指定url的处理对象)
通过web.xml将请求文件映射到一个已经注册过的servlet上。下面代码是注册servlet和将url映射到servlet上
HelloServlet
HelloServlet
HelloServlet
/hello
一个servlet就可以处理那个请求了。它继承于一个HttpServlet,实现了一个doGet或doPost函数。请求对象及响应对象都包含在doGe,doPostt的参数中。会根据请求中是否由post提交,自动选择函数。函数会修改后的response 通过tomcat(遵守http协议)传回浏览器。
public void doGet(HttpServletRequest request,HttpServletResponse response) {
try {
response.getWriter().println("Hello Servlet!!!
");
response.getWriter().println(new Date().toLocaleString());
}catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
}
request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)"
request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名"
request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
request.getRemoteHost(): 浏览器所处于的客户机的主机名
request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
request.getLocalAddr(): 服务器的IP地址
request.getLocalName(): 服务器的主机名
request.getMethod(): 得到客户机请求方式一般是GET或者POST
获取参数
request.getParameter(): 是常见的方法,用于获取单值的参数
request.getParameterValues(): 用于获取具有多值的参数,比如注册时候提交的 “hobits”,可以是多选的。
request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。
String password = request.getParameter("password");
其中name为form表中input 中属性 name的值
获取头信息
request.getHeader() 获取浏览器传递过来的头信息。
比如getHeader(“user-agent”) 可以获取浏览器的基本资料,这样就能判断是firefox、IE、chrome、或者是safari浏览器
request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息
Enumeration headerNames= request.getHeaderNames();
while(headerNames.hasMoreElements()){
String header = headerNames.nextElement();
String value = request.getHeader(header);
System.out.printf("%s\t%s%n",header,value);
}
PrintWriter pw= response.getWriter();
通过response.getWriter(); 获取一个PrintWriter 对象
可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。给里面加参数
response.setContentType("text/html");
1. response.setContentType("text/html; charset=UTF-8");
2. response.setCharacterEncoding("UTF-8");
response.sendRedirect("fail.html"); //301跳转,临时性跳转
//永久性跳转
response.setStatus(301);
response.setHeader("Location", "fail.html");
//设置不使用缓存,默认使用
response.setDateHeader("Expires",0 );
response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","no-cache");
response.getWriter().println(“返回内容”)
web中页面跳转是很常见的应用场景,页面跳转有两种方式。分别为服务端跳转和客户端(浏览器)跳转。
服务端跳转是将要返回的内容赋予response,然后直接返回。浏览器地址发生改变
客户端跳转是告诉浏览器去访问哪个页面,浏览器接收消息后去访问那个页面(重定位),浏览器访问地址不发生改变
if ("admin".equals(name) && "123".equals(password)) {
request.getRequestDispatcher("success.html").forward(request, response);
//服务器跳转
}
else{
response.sendRedirect("fail.html");
//客服端跳转
}
servlet默认情况下是服务器(tomcat)就受一个url后创建一个类对象,然后直至程序关闭,期间一直用该类对象处理请求
自启动就是在获得一个url之前创建一个类对象。可以进行一些检测。
HelloServlet
HelloServlet
10