1、所需要的环境
- jdk、tomcat、mysql(最好有)
2、生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
- Servlet 通过调用 init () 方法进行初始化。这里只在第一次请求servlet时创建。
- Servlet 调用 service() 方法来处理客户端的请求。这里有类似于doGet和doPost方法。
- Servlet 通过调用 destroy() 方法终止(结束)。在 Servlet 生命周期结束时被调用。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
3、 代码示例
- 这是再eclipse创建的servlet
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class hello
*/
@WebServlet("/hello")
public class hello extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public hello() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
- @WebServlet("/hello")表示配置的路径,当然也可以用配置文件web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
4、常用方法
- 设置编码格式
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
}
- 获取表单form或者ajax请求的参数,account为form中name的值或者json对象的属性名。
String account = request.getParameter("account");
- 也可以这样处理编码。设置中文
String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
- 返回json数据
json = "{\"loginMsg\":\"密码错误\"}";
response.getWriter().write(json);
- 请求转发(一次请求),这里面的request会直接传到对应的页面、jsp或者servlet。
request.getRequestDispatcher("login/login.jsp").forward(request, response);
- 重定向(二次请求),不带有一第一次请求的信息,例如参数等。
response.sendRedirect("pages/jsp/index.jsp");
5、设置cookie
- 创建cookie,这里面不可以包含[ ] ( ) = , " / ? @ : ;这几个字符。
Cookie cookie = new Cookie("key","value");
- 设置最大生存周期:您可以使用 setMaxAge 方法来指定 cookie 能够保持有效的时间(以秒为单位)。下面将设置一个最长有效期为 24 小时的 cookie。
cookie.setMaxAge(60*60*24);
- 发送 Cookie 到 HTTP 响应头:您可以使用 response.addCookie 来添加 HTTP 响应头中的 Cookie,如下所示
response.addCookie(cookie);
- 例子
// 为名字和姓氏创建 Cookie
Cookie name = new Cookie("name",
URLEncoder.encode(request.getParameter("name"), "UTF-8")); // 中文转码
Cookie url = new Cookie("url",
request.getParameter("url"));
// 为两个 Cookie 设置过期日期为 24 小时后
name.setMaxAge(60*60*24);
url.setMaxAge(60*60*24);
// 在响应头中添加两个 Cookie
response.addCookie( name );
response.addCookie( url );
- 读取cookie,读取 Cookie,您需要通过调用 HttpServletRequest 的 getCookies( ) 方法创建一个 javax.servlet.http.Cookie 对象的数组。然后循环遍历数组,并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。
Cookie cookie = null;
Cookie[] cookies = null;
// 获取与该域相关的 Cookie 的数组
cookies = request.getCookies();
if( cookies != null ){
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
System.out.print("名称:" + cookie.getName( ) + ",");
System.out.print("值:" + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br/>");
}
}
- 删除cookie,删除 Cookie 是非常简单的。如果您想删除一个 cookie,那么您只需要按照以下三个步骤进行:
读取一个现有的 cookie,并把它存储在 Cookie 对象中。
使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie。
把这个 cookie 添加到响应头。
删除名字为url的cookie。
Cookie cookie = null;
Cookie[] cookies = null;
// 获取与该域相关的 Cookie 的数组
cookies = request.getCookies();
response.setContentType("text/html;charset=UTF-8");
if( cookies != null ){
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
if((cookie.getName( )).compareTo("url") == 0 ){
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
6、设置session
- HttpSession 对象,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。
HttpSession session = request.getSession();
- 设置session对象,创建以及获取。这里也是key-value形式。
request.getSession().setAttribute("key","value");
request.getSession().getAttribute("key");
- 删除会话数据:删除指定会话和删除整个会话
request.getSession().removeAttribute("key");
request.getSession().invalidate();
- 设置过期时间,24小时
request.getSession().setMaxInactiveInterval(24 * 60 * 60);
web.xml中设置
<session-config>
<session-timeout>15</session-timeout>
</session-config>