Servlet在初学WEB项目的时候,是很重要的一个东西,但是后期在学习了框架之后,Servlet就被框架自带的控制器取代了,但是原理还是不变的。学习Servlet有助于理解框架的原理。
顾名思义,Servlet是整个Web项目的“总管”,一个Web项目可以不执行别的文件,但是Servlet必须要执行!
访问一个url的时候,如果符合配置Servlet时的要求,则先执行Servlet;如果不符合要求,就不经过Servlet。
使用Servlet:
①配置web.xml:
<servlet>
<servlet-name>servlet</servlet-name>
<!--这个name与相应的< servlet-mapping>中的<servlet-name>相同 -->
<servlet-class>com.sict.controller.Servlet</servlet-class>
<!--Servlet的位置:包名+类名 -->
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<!--这个name与相应的< servlet>中的<servlet-name>相同 -->
<url-pattern>*.do</url-pattern>
<!--表示拦截什么样的url,*是通配符,*.do表示以“.do”为结尾 -->
<!--这里的url指的是servletPath,即写浏览器url时项目名之后的部分 -->
</servlet-mapping>
②写一个类继承HttpServlet:
public class Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
//如果传过来的是get形式的数据,可以转换成post
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//执行Servlet时,运行的代码
}
}
估计肯定都很迷糊,我举个实例吧!
首先是Web项目的结构:
jsp文件中没有改其他的,只改了< html>中的< body>
①index.jsp
<div align="center">
<form action="dologin.do" method="post">
账号:<input type="text" id="name" name="name"><br> 密码:<input
type="password" id="psd" name="psd"><br> <input type="submit"
value="登录"> <input type="reset" value="重置">
</form>
</div>
②login_success.jsp:
<h2><b>欢迎!${requestScope.name }</b></h2><br>
<!--${requestScope.name }为EL表达式,我的其他博客中也有解释 -->
<a href="#">注销</a>
③login_defeat.jsp
<h2>
<b>抱歉,当前用户不存在!</b>
</h2>
<br>
<a href="#">重新登录</a>
④Servlet.java
package com.sict.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
req.setCharacterEncoding("UTF-8");
//改req中数据的编码方式
String s = req.getServletPath();
//s表示获得一部分url,即项目名之后的url
System.out.println(s);
if (s.equals("/dologin.do")) {
dologin(req, resp);
}
}
private void dologin(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
String name = req.getParameter("name");
String psd = req.getParameter("psd");
if (name.equals("admin") && psd.equals("admin")) {
req.setAttribute("name", name);
req.getRequestDispatcher("WEB-INF/views/login_success
.jsp").forward(req, resp);
//转发
} else {
req.getRequestDispatcher("WEB-INF/views/login_defeat
.jsp").forward(req, resp);
}
}
}