1.基础概念
Java Servlet的简称,称为小服务程序或服务连接器,
用Java编写的服务器端程序,主要功能在于交互式地浏
览和修改数据,生成动态Web内容。
Servlet可以响应任何类型的请求,但绝大多数情况下
Servlet只用来扩展基于HTTP协议的Web服务器。(本质还是一个类)
2.Servlet的生命周期
由容器进行创建:(可以设置为容器立即创建或者在servlet第一次被访问时创建)
过程:
1.Servlet实例化
2.初始化init()方法
3.service(),用于写具体的逻辑代码,调用service
4.destory()方法,在关闭tomcat(服务器)时执行
5.卸载
注意:一个每个Servlet只会被实例化和初始化一次,每次都会被调用的方法是service方法,Servlet直到容器关闭时才会被销毁
3.常用的创建Servlet的两种方式和两种配置Servlet的方式:
1.实现servlet接口:
//=====配置方式1:注解
@WebServlet(name ="FirstServlet" ,urlPatterns ="/first")
public class FirstServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("调用初始化方法");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("调用配置方法");
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("执行业务方法");
}
@Override
public String getServletInfo() {
System.out.println("调用获取Servlet信息的方法");
return null;
}
@Override
public void destroy() {
System.out.println("调用销毁方法");
}
}
//======配置方式2:
<?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>
<!--等价于 name ="FirstServlet"-->
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.redocloud.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<!--等价于 urlPatterns ="/first" 可以为多个-->
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
2.继承于HttpServlet:
@WebServlet(name = "UserServlet",urlPatterns = "/user")
public class UserServlet extends HttpServlet {
private UserService service = new UserServiceImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String username = (String)request.getParameter("username");
String password = (String)request.getParameter("password");
System.out.println(username+password);
User user = service.findByUsername(username);
if(null==user){
System.out.println("账号或密码错误!");
return;
}else{
request.getSession().setAttribute("username", username);
request.getRequestDispatcher("/pages/user.jsp").forward(request, response);
}
}
}
4.Servlet中的常用对象
1.ServletContext对象:
全局对象,如果把数据存放在这里,就是在整个web应用中都能获得数据
如:我在LoginServlet中做如下设置:
request.getServletContext().setAttribute("OK", "我还好");
在另外一个servlet中:
System.out.println("我是另外一个Servlet设置的OK的值"+req.getServletContext().getAttribute("OK"));
结果:
2.HttpServletRequest对象
封装了用户提交的信息,可以调用该对象的方法来获取相应的参数
常用方法:
//给请求的内容设置编码
req.setCharacterEncoding(“UTF-8”);
//获取请求的参数
req.getParameter(“method”);
//请求转发
req.getRequestDispatcher(after).forward(req, resp);
//属性的设置,这个属性仅在一次请求的传递过程中有效
req.setAttribute(“属性名”, “属性值”);
3.HttpRequestResponse
响应对象:
//设置响应的编码
resp.setCharacterEncoding(“UTF-8”);
//设置响应头信息
resp.setHeader(“Content-type”, “text/html;charset=UTF-8”);
//重定向
resp.sendRedirect(“你的路径”);
//输出流
resp.getWriter();