前言:我们在前几篇文章里的web项目都是用jsp文件完成的,那么什么时候jsp算是学完了呢?——在jsp文件中没有java代码。

在原来的doxxx.jsp文件里写的都是处理登陆或者主页面功能的java代码,现在我们需要servlet来代替doxxx.jsp文件。

目录

一.实现servlet

二.开发模式 

三.继承Servlet 

一.实现servlet

我们可以一个登陆来当例子。

建一个com.xxx.servlet包,在写一个LoginServlet类

package com.zking.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/**

*

* @author zjjt

*用来实现登陆请求的处理

*/

public class LoginServlet implements Servlet{

//生命周期

@Override//初始化

public void init(ServletConfig arg0) throws ServletException {

//当请求来到这个servlet就会调用init方法

System.out.println("开始初始化");

}

@Override//服务

public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {

// 所有的代码写在这个方法中

//强转响应

HttpServletResponse response = (HttpServletResponse) resp;

//强转请求

HttpServletRequest request = (HttpServletRequest) req;

//如果用户名是中文

req.setCharacterEncoding("utf-8");

//取到用户数据

String username = req.getParameter("username");

String password = req.getParameter("password");

//通过响应对象获得输出对象

PrintWriter out = response.getWriter();

//通过请求对象取session,需要强转请求

HttpSession session = request.getSession();

//取application通过请求对象

ServletContext application = request.getServletContext();

//与数据库数据做对比

if("root".equals(username)&&"root123".equals(password)) {

//登陆成功

//转发:req.getRequestDispatcher("/xx").forward(req, resp);

//重定向:需要强转响应

//response.sendRedirect("/xx");

out.println("登陆成功");

}else {

//登陆失败

out.println("登陆失败");

}

}

@Override//销毁

public void destroy() {

//什么时候销毁

//1.服务关闭时

//2.这个类被修改时

System.out.println("我销毁了");

}

@Override//得到配置

public ServletConfig getServletConfig() {

// TODO Auto-generated method stub

return null;

}

@Override//得到信息

public String getServletInfo() {

// TODO Auto-generated method stub

return null;

}

}

 家人们注意了在代码里我使用了强转,是因为ServletRequest 和 ServletResponse 没有重定向功能,所有request(请求)和response(响应)取不到值。但是ServletRequest 和 ServletResponse的子类有重定向功能所有,我们要进行强转。

提供访问路径【web.xml】

Web20

/index.jsp

one

com.zking.servlet.LoginServlet

one

/login.do

切记修改了web.xml的代码一定要重启服务器 

访问路径一定要加/,否则运行会报错

 登陆界面代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

Insert title here

 这样我们的登陆就完成了,但是这样大家会不会觉得代码有点多,没关系,还有其他方法。

二.开发模式 

我们的开发模式有两种,一种是(传统的开发模式)配置式开发,另一种是注解式开发。我们上面所讲的就是配置式开发,接下来我们来讲一讲注解式开发~( ̄▽ ̄)~*。

注解式开发使用的是@注解,在代码中@WebServlet就等于web.xml里的

 在@WebServlet后面加上(),在里面直接填入路径,例如@WebServlet("/xxx")就等于web.xml里的

三.继承Servlet 

 使用注解式开发的方法我们就可以不用修改web.xml代码了,是不是简单多了(●'◡'●)。接下来我们写一个MyServlet文件,写Servlet有两种方法,一种式实现,另一种是继承。实现的方法我们已经写过了,接下来我们使用继承的方法

package com.zking.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/**

*

* @author zjjt

*

*/

@WebServlet("/test.do")//直接填访问路径

public class MyServlet extends HttpServlet{

//不同的请求方式:

//doGet 专门处理get请求

//doPost 专门处理post请求

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//登陆功能

doPost(req,resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//登陆功能

//如果用户名是中文

req.setCharacterEncoding("utf-8");

//取到用户数据

String username = req.getParameter("username");

String password = req.getParameter("password");

//支持中文的编码【utf-8】【gb2312】【big5】

req.setCharacterEncoding("gb2312");

//通过响应对象获得输出对象

PrintWriter out = resp.getWriter();

//通过请求对象取session,需要强转请求

HttpSession session = req.getSession();

//取application通过请求对象

ServletContext application = req.getServletContext();

//与数据库数据做对比

if("root".equals(username)&&"root123".equals(password)) {

//登陆成功

//转发:req.getRequestDispatcher("/xx").forward(req, resp);

//重定向:需要强转响应

//response.sendRedirect("/xx");

out.println("登陆成功");

}else {

//登陆失败

out.println("登陆失败");

}

}

}

 家人们有发现实现和继承servlet有什么区别了吗

 我相信细心的家人们应该已经发现了我这里继承的是HttpServlet而不是Servlet。这是因为HttpServlet是它的子类,具有重定向功能,这下我们又可以省去强转的部分了。所有我推荐大家使用注解式开发模式和继承Servlet的方式来写Servlet哟~

到这里就结束了

 

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: