页面跳转分为:
1. 服务端跳转:request.getRequestDispatcher("success.html").forward(request, response);
2. 客户端跳转 :response.sendRedirect("fail.html");
WEB-INF中的页面只对服务端开放,对客户端是不可见的。
Tomcat启动时,初始化Servlet:
在web.xml中,配置Hello Servlet的地方,增加一句
<load-on-startup>10</load-on-startup>(取值范围是1-99,数字越小,启动的优先级越高)
Servlet方法集合:
request:request对象的类是HttpServletRequest
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类型
获取头信息:
request.getHeader() 获取浏览器传递过来的头信息
比如getHeader("user-agent") 可以获取浏览器的基本资料,这样就能判断是firefox、IE、chrome、或者是safari浏览器
request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息
response:response是HttpServletResponse的实例;,用于提供给浏览器的响应信息
一. 设置相应内容
PrintWriter pw= response.getWriter();
通过response.getWriter(); 获取一个PrintWriter 对象
可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。
例如:
PrintWriter pw= response.getWriter();
pw.println("<h1>Hello Servlet</h1>");
二. 设置响应格式
"text/html" 是即格式 ,在request获取头信息 中对应的request.getHeader("accept").
"text/html" 是存在的,表示浏览器可以识别这种格式,如果换一个其他的格式, 比如 "text/lol" ,浏览器不能识别,那么打开此servlet就会弹出一个下载的对话框。
这样的手段也就常常用于实现下载功能
三. 设置响应编码
设置响应编码有两种方式
1. response.setContentType("text/html; charset=UTF-8");
2. response.setCharacterEncoding("UTF-8");
这两种方式都需要在response.getWriter调用之前执行才能生效。
他们的区别在于
1. response.setContentType("text/html; charset=UTF-8");
不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文
2. response.setCharacterEncoding("UTF-8");
仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是UTF-8的时候,就会看到乱码,需要手动再进行一次设置。
四. 301或者302客户端跳转
客户端有两种跳转
302 表示临时跳转
301 表示永久性跳转
Servlet上传文件
上传页面有两点需要注意
1. form 的method必须是post的,get不能上传文件。 还需要加上enctype="multipart/form-data" 表示提交的数据是二进制文件<form action="uploadPhoto" method="post" enctype="multipart/form-data">
2. 需要提供type="file" 的字段进行上传