1.需求及技术分析
登录页面需要完成如下需求:
在页面上输入用户名和密码,提交到服务器上,服务器取用用户名和密码去数据库中查找是否存在该用户。若用户存在,提示登录成功并转接到首页;若不存在,提示用户名或者密码错误。
技术分析:
实现该需求,需要如下技术:表单,servlet,请求(request)和响应(response)。
其中,表单的作用是:
1)收集用户数据;
2)所有的字段要想提交到服务器端必须有Name属性;
3)提交的地址为action
4)请求方式为post
2.servlet
servlet是动态的web开发技术,本质上是运行在服务器端的一个java小程序(类),主要用于处理业务逻辑,生成共台的web内容。
2.1编写一个servlet步骤
1)编写一个类; a)继承HttpServlet; b)重写doGet或者doPost方法;
2)编写配置文件;
a)注册servlet;
b)绑定路径
3)访问
http://主机:端口/项目名/绑定的路径
2.2 接受参数
格式为key=value
String value=request.getParameter("key")
例如:
http://localhost:8080/loginout/hello?username=tom
request.getParameter("username")就可以获取tom的值
2.3 回写内容
response
response.getWriter().print("success";)
如:
resp.getWriter().print("data:"+value);
如果回写的内容中存在中文字符,需要在语句前增加以下内容:
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("data:"+value);
全部代码如下:
public class RequestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接受参数
String value = req.getParameter("username");
//回写数据
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().print("data:"+value);
System.out.println(value);
}
}
2.4 servlet生命周期
servlet常用方法有三种:分别为初始化、服务以及销毁三个,如下所示。生命周期详见程序中注释
public class LifeServlet implements Servlet {
/**
* 销毁方法
* 执行者:服务器
* 执行次数:只执行一次
* 执行时机:当servlet被移除或者服务器正常关闭的时候
*/
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
/**
* 初始化方法
* 执行者:服务器
* 执行次数:一次
* 执行时机 :默认第一次访问的时候
*/
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
/**
* 服务方法
* 执行者:服务器
* 执行次数:请求一次执行一次
* 执行时机:请求来的时候
*/
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
}
servlet是单实例多线程的,默认第一次访问的时候,服务器创建servlet,并调用Init实现初始化操作,并调用一次service方法。每当请求来的时候,服务器就会创建一个线程,调用service方法执行自己的业务逻辑。当servlet被移除的时候服务器正常关闭的时候,服务器就会调用servlet的destroy方法实现销毁操作。
2.5 url-pattern配置
配置共有三种方式:
1)完全匹配,必须以"/"开始,如/hello,/a/b/c
2)目录匹配,必须以"/"开始,以'*'结束,例如/a/*,/*;
3)后缀名匹配,以"*"开始,以字符结尾,例如*.jsp,*.do,*.action
优先级:
完全匹配>目录匹配>后缀名匹配
练习:
1.当请求URL为"/abc/a.html","/abc/*"和"/*"都匹配,此时Servlet引擎可以调用/abc/*;
2.当请求URL为"/abc"时,"/abc"和"/*"都匹配,此时Servlet引擎可以调用/abc;