目录
五、HttpServletRequest、HttpServletResponse
3、在Tomcat中注册实现类(两种方式:注解 或者 web.xml)
一、servlet接口实现类
1.什么是servlet?
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
通俗来讲servlet专门用来接收客户端的请求,专门接收客户端的请求数据,然后调用底层service处理数据并生成结果
浏览器http请求------》tomcat服务器-------》到达servlet-----》执行doget或者dopost方法----》返回数据
- <1>客户端发送请求到服务器端
- <2>服务器将请求信息发送至Servlet
- <3>Servlet生成响应内容并将其传给服务器。
- <4>服务器将响应返回给客户端。
2、如何使用Servlet
- servlet接口来自servlet规范下的一个接口,这个接口存在Http服务器提供jar包
- Tomcat服务器下lib文件有一个servlet-api.jar存放servlet接口(javax.servlet.servlet接口)
- Servlet规范中任务,http服务器能调用的动态资源文件必须是一个Servlet接口实现类 例:
class Student{ //不是动态资源文件,Tomcat无权调用 } class Teacher implements Servlet{ //合法动态资源文件,Tomcat有权力调用 }
- Tomcat根据Servlet规范调用Servlet接口实现类规则:
1.Tomcat有权创建Servlet接口实现类实例对象
Servlet oneServlet=new OneServlet();
2.Tomcat根据实例对象调用service()方法处理当前请求,在service()方法中会判断请求的是get请求还是post请求,从而调用相应的方法
String method = req.getMethod();
long lastModified;
if (method.equals("GET"))
{
}
else if(method.equals("POST")){
}
因为浏览器在向服务器发送请求的时候,会连同请求方式一并发送给服务器
因此服务器可以通过String method = req.getMethod();来获得它的请求方式
二、servlet接口实现类开发步骤
第一步:
创建一个Java类继承HttpServlet父类,使之成为一个Servlet接口实现类
第二步:
重写HttpServlet父类俩个方法,doGet或者doPost
浏览器-----》oneServlet.doGet()
浏览器-----》oneServlet.doPost()
第三步:
将servlet接口实现类信息【注册】到Tomcat服务器(两种方式)
第一种:web.xml注册
网站---->web---->WEB-INF ----->web.xml
<!-- 将servlet接口实现类类路径地址交给Tomcat-->
<servlet>
<servlet-name>mm</servlet-name><!--声明一个变量名储存servlet接口实现类类路径-->
<servlet-class>类的路径地址.具体的servlet实现类</servlet-class>
</servlet>
<!--为了降低用户访问 servlet接口实现类的难度,需要设置简短请求别名-->
<servlet-mapping>
<servlet-name> mm </servlet-name> //确定为那个变量名储存下的servlet实现类起别名
<url-pattern> /one <url-pattern>
<!--设置简短请求别名,别名在书写时必须以”/“为开头-->
</servlet-mapping>
第二种:注解方式注册
@WebServlet(name="HelloServlet",urlPatterns = "/hello")
//name对应需要注册的类名,urlPattern对应类的路径地址
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("<h2 style='color:red'>helloWorld</h2>");
}
}
三、servlet里的三大作用域。
- request(请求):它的作用范围是一次请求和响应,是三个作用域中最小的。
- session(会话):它的作用比request要大一点,一次会话过程中,它的作用域就一直存在,(默认是30分钟)
- .servletcontext:它作用范围最大,作用于整个服务器中。(Application)
四、Servlet主要类、接口:
要编写一个Servlet需要继承HttpServlet类来实现servlet接口,该接口定义了5个方法
- 1.init(),初始化servlet对象,完成一些初始化工作。它是由servlet容器控制的,该方法只能被调用一次。
- 2.service(),接受客户端请求对象,执行业务操作,利用响应对象响应客户端请求。
- 3.destroy(),当容器监测到一个servlet从服务中被移除时,容器调用该方法,释放资源。
- 4.getServletConfig(),ServletConfig是容器向servlet传递参数的载体。
- 5.getServletInfo(),获取servlet相关信息。
- doGet()
- doPost()
五、HttpServletRequest、HttpServletResponse
由于HttpServletRequest和HttpServletResponse都是基于Http协议“升级改造”的,所以这两个对象较之ServletRequest和ServletResponse多出的方法主要和Http协议相关。
例如:Cookie、request(response)headers、Session、URL等。
六、使用实例
1、创建setvlet实现类
package com.web;
public class LoginServlet extends HttpServlet {
}
2、重写doGet()方法和doPost()方法
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
String name = req.getParameter("name");
String pwd = req.getParameter("pwd");
try{
UserDaoImpl userDao = new UserDaoImpl();
userMap = userDao.userMap();
User user = null;
Set<Map.Entry<String,User>> set = userMap.entrySet();
Iterator it = set.iterator();
Boolean f=false;
System.out.println(name+pwd);
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
User u = (User) entry.getValue();
System.out.println(u.getId()+u.getPassword());
String key = (String) entry.getKey();
if (name.trim().equals(key) &&pwd.trim().equals(u.getPassword())) {
req.getRequestDispatcher("/ok.jsp").forward(req, resp);
f=true;
break;
}
}
if(f==false){
resp.sendRedirect("/login.jsp");
}
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void destroy() {
userMap.clear();
}
3、在Tomcat中注册实现类(两种方式:注解 或者 web.xml)
<servlet>
<servlet-name> HelloServlet</servlet-name>
<servlet-class>com.web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
或者
@WebServlet(urlPatterns ="/login")
public class LoginServlet extends HttpServlet {
}