1、servlet: 动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序;
作用:处理业务逻辑,生成动态web内容
2、接受参数: 格式:key=value
Sting value=request.getParameter("key")
回写内容:
response
response.getWriter().print("success");
处理响应数据中文乱码:
resp.setContentType("text/html;charset=utf-8"); //建议大家放在方法中的第一行
3、servlet生命周期 ★★★
void init(ServletConfig config):初始化
* 初始化方法
* 执行者:服务器
* 执行次数:一次
* 执行时机:默认第一次访问的时候
void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
* 服务
* 执行者:服务器
* 执行次数:请求一次执行一次
* 执行时机:请求来的时候
void destroy():销毁
* 销毁
* 执行者:服务器
* 执行次数:只执行一次
* 执行时机:当servlet被移除的时候或者服务器正常关闭的时候
serlvet是单实例多线程
默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.
4、url-pattern的配置:★
方式1:完全匹配 必须以"/"开始 例如: /hello /a/b/c
方式2:目录匹配 必须"/"开始 以"*"结束 例如: /a/* /*
方式3:后缀名匹配 以"*"开始 以字符结尾 例如: *.jsp *.do *.action
优先级:
完全匹配>目录匹配>后缀名匹配
案例:实现登录失败时:3秒之后自动跳转至其他页面以及登录次数统计
loginservlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.设置编码
response.setContentType("text/html;charset=utf-8");
//1.接受用户名和密码
String username=request.getParameter("username");
String password=request.getParameter("password");
//2.调用userservice 里的login(username,password) 返回值:User user
User user = null;
try {
user = new UserService().login(username,password);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("网络异常,请稍后再试!");
}
//3.判断user是否为空
if(user==null){
//3.1若为空 写"用户名和密码不匹配"
response.getWriter().print("用户名和密码不匹配,3秒之后跳转");
//案例2-定时跳转
response.setHeader("refresh", "3;url=/day0902/login.htm");
}else{
//3.2若不为空 写"xxx:欢迎回来"
response.getWriter().print(user.getUsername()+":欢迎回来");
//4.获取全局管理者
ServletContext context = this.getServletContext();
//5.获取总次数
Integer cishu = (Integer) context.getAttribute("count");
//6.将次数+1
cishu++;
//7.将次数再次放入域对象中
context.setAttribute("count", cishu);
}
}
}
showservlet代码:
public class ShowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.设置编码
response.setContentType("text/html;charset=utf-8");
//1.获取全局管理者
ServletContext context = this.getServletContext();
//2.获取登录的次数
Integer cishu=(Integer) context.getAttribute("count");
//3.在页面上打印总次数
response.getWriter().print("登录成功的总次数为:"+cishu);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}