Java Web——使用Servlet创建项目

Servlet基本介绍 

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

  • 性能明显更好。
  • Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
  • Servlet 是独立于平台的,因为它们是用 Java 编写的。
  • 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
  • Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

Servlet本身不做任何业务处理,只是接收请求并决定调用哪个JavaBean去处理请求,并确定用哪个页面来显示处理返回的数据。

Servlet API 

主要Servlet API介绍:

javax.servlet.Servlet接口

  • 所有Java Servlet的基础接口类,规定了必须由Servlet具体类实现的方法集

javax.servlet.GenericServlet类

  • 是Servlet的通用版本,是一种与协议无关的Servlet

javax.servlet.http.HttpServlet类

  • 在GenericServlet基础上扩展的基于Http协议的Servlet 

如何创建Servlet:

  • 实现Servlet接口
  • 继承GenericServlet类
  • 继承HttpServlet类 

第一个Servlet

Servlet中主要方法:

  • init():Servlet的初始化方法,仅仅会执行一次
  • service():处理请求和生成响应
  • destroy():在服务器停止并且程序中的Servlet对象不再使用的时候调用,只执行一次

ServletRequest:

  • 封装客户的请求信息
  • 作用相当于JSP内置对象request:HttpServletRequest

ServletResponse:

  • 创建响应信息,将处理结果返回给客户端
  • 作用相当于JSP内置对象response

ServletConfig

  • 包含了Servlet的初始化参数信息

Servlet生命周期

生命周期

谁来做

何时做

实例化

Servlet 容器

当Servlet容器启动或者容器检测到客户端请求时

初始化

Servlet 容器

实例化后,容器调用Servlet的init()初始化对象

处理请求

Servlet 容器

得到客户端请求并做出处理时

销毁

Servlet 容器

当程序中的Servlet对象不再使用的时候,或者Web服务器停止运行的时候

 Servlet演示案例

1.实体类User

public class User {
    private int id;
    private String username;
    private String password;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.完成登录功能的Dao接口

public interface LoginDao {
    User queryUserByNameAndPwd(String username,String password) throws Exception;

    String queryPasswordByName(String username);
}

3.实现上面Dao接口的类

public class LoginDaoImpl extends UserDao implements LoginDao {

    @Override
    public User queryUserByNameAndPwd
            (String username, String password) throws Exception {
        User u = null;
        ResultSet rs = null;
        try {
            getConn();
            String sql = "select * from tb_user_info where username=?" +
                    " and password=?";
            rs = query(sql, username, password);
            if (rs.next()) {
                u = new User();
                Class<? extends User> uc=u.getClass();
                Field[] fields=uc.getDeclaredFields();
//                u.setId(rs.getInt("id"));
//                u.setUsername(rs.getString("username"));
//                u.setPassword(rs.getString("password"));
                for (int i = 0; i < fields.length; i++) {
                    fields[i].setAccessible(true);
                    fields[i].set(u,rs.getObject(fields[i].getName()));
                }
            }
        } finally {
            rs.close();
            close();
        }
        return u;
    }

    @Override
    public String queryPasswordByName(String username) {
        return null;
    }
}

4.业务层的接口

public interface LoginService {
    User login(String username,String password);
}

 5.实现业务层接口的Service类

public class LoginServiceImpl implements LoginService {
    @Override
    public User login(String username, String password){
        //1、参数判空
        if (StringUtils.isNullOrEmpty(username)||
                StringUtils.isNullOrEmpty(password)){
            return null;
        }
        //2、是否符合规范
        //3、有哪些特殊要求
        //4、接受返回值,判断返回的值范围是否正确
        LoginDao dao=new LoginDaoImpl();
        User user= null;
        try {
            user = dao.queryUserByNameAndPwd(username,password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }
}

6.controller层的类

public class LoginController extends HttpServlet {
    private LoginService loginService=new LoginServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        User user=loginService.login(name,pwd);
        HttpSession session = req.getSession();
        if(user==null){
            session.setAttribute("msg","输入不正确,登陆失败!");
            resp.sendRedirect("/hello.jsp");
        }else{
            session.setAttribute("msg","登陆成功");
            resp.sendRedirect("/hello.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.service(req, resp);
    }

    @Override
    public void destroy() {
        System.out.println("servlet即将销毁!");
        super.destroy();
        System.out.println(super.toString());
    }

    @Override
    public void init() throws ServletException {
        System.out.println("servlet开始初始化!");
        super.init();
        System.out.println(super.toString());
    }
}

7.Web.xml的配置

<welcome-file-list>
        <welcome-file>/regex.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>cn.kgc.jdbc.controller.LoginController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/doLogin</url-pattern>
    </servlet-mapping>

8.regex.html登录页面设置

<body>
<form action="/doRegex">
    <p>&nbsp;用&nbsp;户&nbsp;名:<input type="text" name="username"></p>
    <p>输入密码:<input type="password" name="pwd"></p>
    <p>确认密码:<input type="password" name="cfmPwd"></p>
    <p><input type="submit" value="注册"></p>
    </p>
</form>
</body>

9.登录成功时的跳转页面hello.jsp

<body>
<h1>${msg}</h1>
<form action="/doLogin">
    <p>用户名:<input type="text" name="username" value="${username}"></p>
    <p>密&nbsp;&nbsp;&nbsp;码:<input type="password" name="pwd" placeholder="请输入密码"></p>
    <p><input type="submit"></p>
    <p><input type="image" name="1" src="Mbappe.jpg" onclick="javascript:alert('姆巴佩')"></p>
</form>
</body>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值