package helloServlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class helloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("get请求执行");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("post请求执行");
}
}
<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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>helloServletdisplay-name>
<servlet>
<servlet-name>helloServletservlet-name>
<servlet-class>helloServlet.helloServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>helloServletservlet-name>
<url-pattern>/hellourl-pattern>
servlet-mapping>
<welcome-file-list>
<welcome-file>index.htmlwelcome-file>
<welcome-file>index.htmwelcome-file>
<welcome-file>index.jspwelcome-file>
<welcome-file>default.htmlwelcome-file>
<welcome-file>default.htmwelcome-file>
<welcome-file>default.jspwelcome-file>
welcome-file-list>
web-app>
localohost:8080/helloServlet/hello
方法 | 描述 |
---|---|
String getMethod() | get、post |
String getReuestURI() | 获取主机请求行中的资源部分 |
String getQueryString() | 获取请求行中的参数部分 |
String getProtocol() | 获取协议及其版本 |
String getContextPath() | 获取请求URL中属于web应用程序的路径,如果请求属于web站点的根目录,返回结果为空字符串 |
String getServletPath() | 获取servlet名称或所映射的路径 |
String getRemoteAddr() | 获取请求客户端的IP地址 |
String getRemoteHost() | 获取客户端连接的端口 |
String getLocalName() | 获取web服务器当前连接网络对应的主机名 |
int getLocalPort() | 获取服务器接收网络连接的端口号 |
String getServerName() | 获取当前请求所指向的主机名,jiHTTP请求消息post字段对应的主机名部分 |
int getServerPort() | post字段对应的端口号 |
String getScheme() | 获取请求的协议名 |
StringBuffer getRequestURL() | 获取请求的完整url |
方法 | 描述 |
---|---|
String getHeader(String name) | 获取指定字段的值 |
Enumeration getHeaders(String name) | 获取指定字段的值 |
Enumeration getHeaderNames() | 获取所有字段的值 |
int getIntHeader(String name) | 获取特定字段的值并将其转换为int型 |
Long getDateHeader(String name) | 获取指定字段的值并将按GMT时间格式其转换为毫秒时间值 |
String getContentType() | 获取Content-Type |
int getCntentLength() | 获取content-length |
String getCharacterEncoding() | 获取字符集编码 |
方法 | 描述 |
---|---|
String getParameter(String name) | 获取指定参数的值,没有返回null,有则获取第一个 |
String[] getParamterValue(String name) | 获取指定参数的所有值 |
Map |
获取所有的请求参数,key为参数名,value为对应的所有值 |
Enumeration getParameterNames() | 获取所有参数 |
getRequestDispatch(String path)
:path必须以‘/’开头//传递当前请求,必须在客户端响应之前被调用,即请求转发
forward(ServletRequest request,ServletResponse response)
//将其他资源作为当前响应内容包含进来
include(ServletRequest request,ServletResponse response)
方法 | 描述 |
---|---|
setStatus(int status) | 设置http响应消息状态码 |
sendError(int sc) | 发送表示错误信息的状态码 |
sendError(int sc,String message ) | 发送错误信息状态码的同时发送说明说明信息 |
方法 | 描述 |
---|---|
void addHeader(String name,String value) | 设置响应头字段,可以增加同名的响应头字段 |
void setHeader(String name,String value) | 设置响应头字段,会覆盖同名的响应头字 |
void addIntHeader(String name,int value) | 设置包含整数的响应头 |
void setIntHeader(String name,int value) | 设置包含整数的响应头 |
void setContentLength(int len) | |
void setContentType(String type) | |
void setLocale(Locale loc) | 设置本地化信息 |
void setCharacterEncoding(String charse) |
方法 | 描述 |
---|---|
getOutputStream() | 获取ServletOutputStream字节输出流 |
getWriter() | 获取PrintWriter字符输出流对象 |
String b = "hello";
OutputStream ou = resp.getOutputStream();
ou.write(b.getBytes());
getOutputStream与getWriter互相排斥,不可以同时使用
原因:
不仅需要指定文件单独路径,还要在http协议中设置两个响应头
//设定接收程序处理数据的方式
Content-Disposition:attachment;filename=
//设定实体内容的MIME类型
Content-Type:application/x-msdownload
//接收参数
String filename = request.getParamter("filename");
//设置content-type头
String type = this.getServletContext().getMimeType(filename);
response.setHeader("Content-type",type);
//设置content-Disposition
response.setHeader("Content-Disposition","attachment;filename="+filename);
//设置文件的InputStream
String realPath = this.getServletContext().getRealPath("/download/"+filename);
InputStream in = new FileInputStream(realPath);
//获取response输出流
OutputStream out = response.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
while((len=in.read(b))!=-1){
os.write(b,0,len);
}
in.close();
中文文件
String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");
...
中文乱码解决
//设置HttpServletResponse使用utf-8
response.setCharacterEncoding("utf-8");
//通知服务器使用指定编码
response.setHeader("Content-Type","text/html;charset=utf-8");
response.setContentType("text/html;charset=utf-8");
Cookie cookie - new Cookie(String cookieName,String cookieValue);
HttpServletResponse.addCookie(Cookie cookie)
HttpServletRequest.getCookies()
cookie分类
cookie唯一表示
/web/a/b/c/CookieName
Cookie 的API总结
方法 | 描述 |
---|---|
getName() | 获取cookie的名称 |
getValue() | 获取cookie的值 |
setMaxAge(int expiry) | 设置有效时间 |
setPath(String url) | 设置的路径以及子路径都允许访问cookie |
方法 | 描述 |
---|---|
String getId() | 获取与session对象关联的会话标志号 |
Long getCreationTime() | 获取session创建的时间,毫秒表示 |
long getLastAccessedTime() | 返回客户端最后一次发送Session相关请求时间,毫秒表示 |
void setMaxInactiveInterval(int interval) | 设置session可空闲的最长时间,以秒为单位 |
boolean isNew() | 判断当前session是否新创建 |
void invalidate() | 强制session无效 |
ServletContext getServletContext() | 获取servletContext对象 |
void setAttribute(String name,obect value) | 设置属性 |
String getAttribute(String name) | 获取属性 |
void removeAttribute(String name) | 移除属性 |
ServletContext
HttpSession
//web.xml中配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
HttpServletRequest
API相同
num
:num为正整数,值越小,被创建的优先级越高*.jsp
./ 当前路径 ../上一级目录
/工程名/url
/url
方法 | 描述 |
---|---|
void setAttribute(String name, Object object ) | 向ServletContext存放数据 |
Object getAttribute(String name) | 获取ServletContext中特定名称的数据 |
void removeAttribute(String name) | 移除ServetContext中的某个数据 |
Enumeration |
获取所有属性 |
方法 | 描述 |
---|---|
Set getResourcePaths(String path) | 集合内包含资源目录下的子目录和文件路径名称,path必须以/开头 |
String getRealPath(String path | 返回资源文件在服务器文件系统中的绝对路径,path必须以/开头(表示当前web应用的根目录),如果不能将资源文件转换为真实路径,,则返回null |
URL getResource(String path) | 返回映射到资源文件的URL对象 |
InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的InputStream输入流对象 |
ServletContext context = this.getServletContext();
InputStream in = context.getResourceAsStream("/web-inf/classed/xxx.properties");
String path = context.getRealPath("/web-inf/classed/xxx.properties");
...
Properties pros = new Properties();
pros.load(in);
...
方法 | 描述 |
---|---|
String getInitParmater(String name) | 获取初始化参数 |
Enumeration getInitParamterNames() | 获取所有的初始化参数 |
ServletContext getServletContext() | 获取ServletContex对象 |
String getServletName() | 获取所有servlet的初始化参数单独名称 |
//全局初始化参数
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
//servlet初始化参数
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>helloServlet.helloServlet</servlet-class>
<!-- 初始化参数 -->
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
</servlet>
className.class.getClassLoader().getResourcAsStream("文件名")