一,HttpServlet
1,概念:HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。
Servlet处理HTTP请求的流程如下:
2,响应的流程
1.Web客户向Servlet容器发出Http请求
2.Servlet容器解析Web客户的Http请求
3.Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息
4.Servlet容器创建一个HttpResponse对象,响应请求信息
5.Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象
6.HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
7.HttpServlet调用HttpResponse的有关方法,生成响应数据
8.Servlet容器把HttpServlet的响应结果传给Web客户
其中HttpServlet首先必须读取Http请求的内容,Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中。
3、创建HttpServlet步骤
1.继承HttpServlet抽象类,创建两个类
public class Login extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login-get...");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login-post...");
//前端请求(request),后端处理后,最后给前端做出响应(response)
//获取请求的地址相关
String uri = request.getRequestURI();
String contextPath = request.getContextPath();
String servletPath = request.getServletPath();
System.out.println(uri); //包含项目名和资源路径
System.out.println(contextPath);//项目名称
System.out.println(servletPath);//请求的路径
// String remoteAddr = request.getRemoteAddr();
// String remoteHost = request.getRemoteHost();
//
// System.out.println(remoteAddr);
// System.out.println(remoteAddr);
System.out.println("-------------------");
//1,从请求中获取用户提交的参数(数据)
request.setCharacterEncoding("utf-8");//设置请求的编码格式为中文
String user = request.getParameter("user");//根据表单的name属性获取用户输入的值
String pwd = request.getParameter("pwd");
System.out.println(user);
System.out.println(pwd);
//2.根据用户提交的用户名和密码,去数据库执行查询
//3.判断成功要干什么?判断失败要干什么? 做出响应
response.setCharacterEncoding("utf-8");//设置响应的编码格式
response.setContentType("text/html;charset=UTF-8");//以什么样的格式(文本/网页)响应
if (user.equals("张三") && pwd.equals("666")) {
//登录成功
response.getWriter().write("登录成功");
}else {
//登录失败
response.getWriter().write("登录失败");
}
}
}
2.重写HttpServlet的部分方法,如doGet()或doPost()方法
public class Zhuce extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login-get...");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login-post...");
}
}
写web.xml部分代码
<!-- 配置servlet类 -->
<servlet>
<!-- 起别名 -->
<servlet-name>Login</servlet-name>
<!-- servlet类所在的位置:类的全类名就是 包名.类名 -->
<servlet-class>com.gao.servlet.Login</servlet-class>
</servlet>
<!-- Servlet类的映射:Servlet用来处理哪个请求 -->
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
<!-- 起别名 -->
<servlet-name>denglu</servlet-name>
<!-- servlet类所在的位置:类的全类名就是 包名.类名 -->
<servlet-class>com.gao.servlet.Login</servlet-class>
</servlet>
<!-- Servlet类的映射:Servlet用来处理哪个请求 -->
<servlet-mapping>
<servlet-name>denglu</servlet-name>
<url-pattern>/denglu</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>zhuce</servlet-name>
<servlet-class>com.gao.servlet.Zhuce</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>zhuce</servlet-name>
<url-pattern>/zhuce</url-pattern>
</servlet-mapping>
</web-app>
3.获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串
<html>
<head>
<title>这是第一个Web项目</title>
</head>
<body>
<h2>欢迎使用 Java Web</h2>
<a href="login.jsp">登录</a>
<a href="zhuce.jsp">注册</a>
</body>
</html>
<html>
<head>
<title>登录</title>
</head>
<body>
<h2>登录</h2>
<form action="denglu" method="post">
账号:<input type="text" name="user" value="" /><br/>
密码:<input type="password" name="pwd" value="" /><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
<html>
<head>
<title>注册</title>
</head>
<body>
<h2>注册</h2>
<form action="zhuce" method="post">
账号:<input type="text" name="user" value="" /><br/>
密码:<input type="password" name="pwd" value="" /><br/>
<input type="submit" value="注册">
</form>
</body>
</html>
由代码可知我们使用的是利用form表单来输入我们的数据参数和请求,其中的一些比较重要的属性:action=“login”:action表示当前表单中的内容提交给哪个页面进行处理,对于我们的代码来说就是提交给login页面来进行处理。
input的属性取值type=“text”与type=“password”:type=“text”代表的是单行文本输入框而type=“password”代表的是密码输入框,密码输入框与文本输入框的最大区别就是密码输入框不会将输入的字符明文显示出来,而是会被“•”替代,增强了数据的安全性。
type=“submit”:提交按钮,是将表单中的信息提交给表单属性中action所指向的文件,即提交给“login”,传给服务器。
运行一下,结果为:
4.生成HTTP响应结果。通过HttpServletResponse对象生成响应结果。