是运行在服务器(tomcat)的java组件
Servlet组件主要完成两个部分工作
1.接受客户端请求
2.返回服务器响应
UserServlet.java
package com.javakc.web1.user;
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 UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("UserServlet doGet method!");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("UserServlet doPost method!");
//响应类型
response.setContentType("text/html;charset=utf-8");
java.io.Writer writer = response.getWriter();
writer.write("");
writer.write("");
writer.close();
}
}
web.xml
<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-name>UserServletservlet-name>
<servlet-class>com.javakc.web1.user.UserServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>UserServletservlet-name>
<url-pattern>/user.dourl-pattern>
servlet-mapping>
web-app>
index.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<a href="/web1/user.do">Helloa>
<form action="/web1/user.do" method="post">
<table>
<tr>
<td>姓名:<input type="text" name="username" value="">td>
tr>
<tr>
<td>年龄:<input type="number" name="userage" value="">td>
tr>
<tr>
<td>日期:<input type="date" name="birthday" value="">td>
tr>
<tr>
<td>爱好:
<input type="checkbox" name="hobby" value="1">爱好1
<input type="checkbox" name="hobby" value="2">爱好2
<input type="checkbox" name="hobby" value="3">爱好3
<input type="checkbox" name="hobby" value="4">爱好4
td>
tr>
<tr>
<td><input type="submit" value="提交">td>
tr>
table>
form>
body>
html>
Servlet是由服务器来负责实例化, 服务器默认管理的方式(单例模式)懒汉模式, 在客户端第一次访问服务器资源时, 由服务器负责对象的实例化过程.
只有在第一次实例化时调用, 且只会调用一次!
package com.javakc.web1.user;
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 UserServlet1 extends HttpServlet {
public UserServlet1() {
System.out.println("实例化");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("UserServlet doGet method!");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("UserServlet doPost method!");
//响应类型
response.setContentType("text/html;charset=utf-8");
java.io.Writer writer = response.getWriter();
writer.write("");
writer.write("");
writer.close();
}
}
<servlet>
<servlet-name>UserServlet1servlet-name>
<servlet-class>com.javakc.web1.user.UserServlet1servlet-class>
<load-on-startup>0load-on-startup>
servlet>
package com.javakc.web1.user;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
//初始化方法
public class UserServlet2 extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
//ServletName
System.out.println(config.getServletName());
//应用作用域
System.out.println(config.getServletContext());
//获取初始化参数
String username = config.getInitParameter("username");
System.out.println("username:" + username);
//获得初始化参数名称
Enumeration<String> enumerations = config.getInitParameterNames();
while (enumerations.hasMoreElements()) {
String name = enumerations.nextElement();
System.out.println(name + ":" + config.getInitParameter(name));
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("UserServlet doGet method!");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("UserServlet doPost method!");
//响应类型
response.setContentType("text/html;charset=utf-8");
java.io.Writer writer = response.getWriter();
writer.write("");
writer.write("");
writer.close();
}
}
<servlet>
<servlet-name>UserServletservlet-name>
<servlet-class>com.javakc.web1.user.UserServlet2servlet-class>
<init-param>
<param-name>usernameparam-name>
<param-value>adminparam-value>
init-param>
<init-param>
<param-name>passwordparam-name>
<param-value>123456param-value>
init-param>
<load-on-startup>0load-on-startup>
servlet>
Servlet组件中运行方法是用来接收客户端请求, 返回服务器响应的方法!
客户端发送一次请求, 运行方法便会调用一次!
1.重写service
public class UserServlet extends HttpServlet {
void service(HttpServletRequest request, HttpServletResponse response)
{
}
}
2.重写doGet + doPost
public class UserServlet extends HttpServlet {
void doGet(HttpServletRequest request, HttpServletResponse response)
{
}
void doPost(HttpServletRequest request, HttpServletResponse response)
{
}
}
在服务器关闭阶段时完成方法调用, 释放资源
package com.javakc.web1.user;
import javax.servlet.http.HttpServlet;
//销毁
public class UserServlet4 extends HttpServlet {
@Override
public void destroy() {
System.out.println("destroy");
}
}
package com.javakc.web1.user;
import com.javakc.web1.db.Utils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
//生命周期用法
public class UserServlet5 extends HttpServlet {
int sum = 0;
//初始化方法
@Override
public void init() throws ServletException {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = Utils.getConnection();
statement = connection.createStatement();
String sql = "select total from sumTotal";
resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
sum = resultSet.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
resultSet.close();
statement.close();
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
//运行方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("当前访问量:" + (++sum));
}
//销毁方法
@Override
public void destroy() {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = Utils.getConnection();
String sql = "update sumTotal set total =? where id =? ";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, sum);
preparedStatement.setInt(2, 1);
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
preparedStatement.close();
connection.close();
} catch (Exception throwables) {
throwables.printStackTrace();
}
}
}
}
<servlet>
<servlet-name>UserServlet5servlet-name>
<servlet-class>com.javakc.web1.user.UserServlet5servlet-class>
<load-on-startup>0load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>UserServlet5servlet-name>
<url-pattern>/user5.dourl-pattern>
servlet-mapping>
访问路径:http://localhost:8080/web1/user5.do