1、定義一個類實現servlet接口,和相關配置
- 在3.0之前需要配置web.xml,3.0和3.0之后就使用注解配置
<!--web.xml中-->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>com.yj.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
//3.0之后使用注解(推薦): @WebServlet("資源路徑")
@WebServlet("/demo1")
public class ServletDemo implements Servlet{
//實現接口中的所有抽象方法: 5個
//getServletConfig()、getServletInfo()
/*
生命周期方法:
1、被創建:init()只執行一次
2、提供服務:service() 執行多次
3、被銷毀:destroy() 服務器關閉時執行,執行一次
*/
}
- servlet 體系結構
graph LR A[Servlet接口] -->B[GenericServlet抽象類] B -->C[HttpServlet抽象類]
GenericServlet:將Servlet接口中其他的方法做了默認空實現,只將service()方法作為抽象
HttpServlet:對http協議的一種封裝,簡化操作,直接復寫doGet/doPost方法即可
簡化寫法:
@WebServlet("/demo1")
public class ServletDemo extends GenericServlet{
//實現抽象方法 service:1個
}
最終寫法:
@WebServlet("/demo1")
public class ServletDemo implements HttpServlet{
//重寫方法:doGet/doPost
}
2、定義的Servlet如何在瀏覽器訪問
- 配置好tomcat,如何配置:點擊查看
- 上述的代碼會找不到servlet相關的包,需要導入servlet-api
導入步驟:
1、在file菜單欄下找到project Structure
2、找到 Libraries,點擊+號,選擇java
3、找到 Tomcat的安裝目錄下的lib文件夾,下面有 servlet-api.jar,選擇導入
- 運行tomcat,在打開的瀏覽器頁面地址欄后添加/demo1路徑就可以訪問到了
3、登錄案例
-
需求
-
項目目錄結構

-
servlet部分代碼
//LoginServlet
@WebServlet("/loginDemo")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//設置編碼
req.setCharacterEncoding("utf-8");
//正常步驟:獲取請求參數並封裝user對象
// String username = req.getParameter("username");
// String password = req.getParameter("password");
//
// User loginUser = new User();
// loginUser.setName(username);
// loginUser.setPassword(password);
//使用BeanUtils,簡化數據封裝
/*
* 需要到入兩個包:commons-beanutils-1.8.0.jar、commons-logging-1.2.jar
* */
Map<String, String[]> map = req.getParameterMap();
User loginUser = new User();
try {
BeanUtils.populate(loginUser,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
UserDao userDao = new UserDao();
User user = userDao.login(loginUser);
if(user == null){
//登錄失敗轉發
req.getRequestDispatcher("/failServlet").forward(req,resp);
}else{
//登錄成功轉發,並向reques域中共享user對象
req.setAttribute("user", user);
req.getRequestDispatcher("/successServlet").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
//SuccessServlet
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user = (User) req.getAttribute("user");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("登錄成功,歡迎"+ user.getName());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
