servlet 是一个接口,如果实现这个接口,那么就必须实现接口里面定义的所有方法
HttpServlet遵循HTTP协议,因此继承HttpServlet的类也就遵循HTTP协议
- Servlet(Server Applet):全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。
- 狭义的Servlet是指 Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。
- HttpServlet: 指能够处理 HTTP 请求的 servlet,它在原有 Servlet 接口上添加了一些与 HTTP 协议处理方法,它比 Servlet 接口的功能更为强大。在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
- HttpServlet 在实现 Servlet 接口时,覆写了 service 方法,该方法体内的代码会自动判断用户的请求方式,如为 GET 请求,则调用 HttpServlet 的 doGet 方法,如为 Post 请求,则调用 doPost 方法。因此,在编写 Servlet 时,通常只需要覆写 doGet 或 doPost 方法,而不要去覆写 service 方法
布局代码:
<body>
<h2>首页</h2>
<a href="denglu.jsp">去登录</a>
<a href="zhuce.jsp">去注册</a>
</body>
<h2>登录</h2>
<form action="denglu" method="post">
账号:<input type="text" name="user" value=""> <br>
密码:<input type="password" name="pas" value=""> <br>
<input type="submit" value="登录">
</form>
<h2>注册</h2>
<form action="zhuce" method="post">
账号:<input type="text" name="user" value=""> <br>
密码:<input type="password" name="pas" value=""> <br>
<input type="submit" value="注册">
</form>
配置servlet类传递数据:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置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>
<!-- 组合起来: 当浏览器请求 denglu
这个地址的时候,要执行Login这个Servlet Login这个servlet就是com.gao.servlet包里面的Login这个类-->
<!-- hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh-->
<servlet>
<servlet-name>denglu</servlet-name>
<servlet-class>com.gao.servlet.denglu</servlet-class>
</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>
登陆界面继承httpservlet类:
在项目的src下建一个包 创建登录和注册的java类(继承HttpServlet 并实现doGet和doPost方法)
注意:在书写java类之前确认jar包已经导入(一定要导入jar架包)
其中req参数是前端传输来到数据,这里写的全拼request
resp参数是响应的数据,这里写的全拼response
Requset和Response
从编写Servlet的过程中可以看出,doGet)或者doPost 方法中有两个参数,分别是HtpServletRequest和HttpServletResponse,当执行Servlet的时候会从HttpServletRequest读取请求信息,而将响应信息封装进HttpServletResponse对象中Servlet 处理 HTTP 请求
HttpServlet的一些方法
- getParameter() 根据表单的ame属性获取用户输入的值
- getRequestURI()获取项目名和资源路径
- getContextPath()获取项目名称
- getServletPath()请求的资源路径
package com.gao.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class denglu extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("denglu----doget");
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("denglu-----dopost");
//前端请求(respuest/resp),后端处理后,最后给前端做出响应(response/resp)
//这三个都是后去请求的地址相关
String requestURI = req.getRequestURI();
String contextPath = req.getContextPath();
String servletPath = req.getServletPath();
System.out.println(requestURI);//包含项目名和资源路径
System.out.println(contextPath);//项目名称
System.out.println(servletPath);//请求的资源路径
System.out.println("---------------");
//设置响应的编码格式
req.setCharacterEncoding("utf-8");
String user = req.getParameter("user");//根据表单的name属性获取用户输入的值
String pas = req.getParameter("pas");
System.out.println(user);
System.out.println(pas);
//1,从请求中获取用户提交的参数(数据)
resp.setCharacterEncoding("utf-8");//设置响应的编码格式
resp.setContentType("text/html;charset=utf-8"); //以什么样的格式(文本/网页)响应
if (user.equals("张三") && pas.equals("666")){
//登陆成功
resp.getWriter().write("登陆成功"); //使用字符集合给前端做出响应
}else {
//登陆失败
resp.getWriter().write("登陆失败!!");
}
}
}
zhuce(java类):
package com.gao.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class zhuce extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("zhuce----doget");
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("zhuce----dopost");
//前端请求(respuest/resp),后端处理后,最后给前端做出响应(response/resp)
//这三个都是后去请求的地址相关
String requestURI = req.getRequestURI();
String contextPath = req.getContextPath();
String servletPath = req.getServletPath();
System.out.println(requestURI);//包含项目名和资源路径
System.out.println(contextPath);//项目名称
System.out.println(servletPath);//请求的资源路径
System.out.println("---------------");
//设置响应的编码格式
req.setCharacterEncoding("utf-8");
String user = req.getParameter("user");//根据表单的name属性获取用户输入的值
String pas = req.getParameter("pas");
System.out.println(user);
System.out.println(pas);
//1,从请求中获取用户提交的参数(数据)
resp.setCharacterEncoding("utf-8");//设置响应的编码格式
resp.setContentType("text/html;charset=utf-8"); //以什么样的格式(文本/网页)响应
if (user.equals("张三") && pas.equals("666")){
//登陆成功
resp.getWriter().write("登陆成功"); //使用字符集合给前端做出响应
}else {
//登陆失败
resp.getWriter().write("登陆失败!!");
}
}
}
控制台接受用户创建的账号密码: