javaWeb中 测试类中结果正确,servlet结果错误

package com.dao.imp;

import com.dao.UserLoginDao;
import com.tool.myutil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserLoginDaoImp implements UserLoginDao {

    Connection con  = null;
    PreparedStatement sta = null;
    ResultSet ret = null;



    //查询用户名密码是否存在与数据库中
    @Override
    public int login(String n, String p) {

        String sql = "";
        int n1 = 0;
        try {
            con = myutil.utilDbc();
            sql = "select count(id) from t_user where username= ? and password = ?";
            sta = con.prepareStatement(sql);
            sta.setString(1,n);
            sta.setString(2,p);
            ret = sta.executeQuery();
            while (ret.next()){
                n1 = ret.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            myutil.myclose(con,sta,ret);
        }
        return n1;
    }

}



package com.service.imp;

import com.dao.UserLoginDao;
import com.service.UserLoginService;

public class UserLoginSreviceImp implements UserLoginService {

    private UserLoginDao userLoginDao;

    public UserLoginSreviceImp(UserLoginDao userLoginDao) {
        this.userLoginDao = userLoginDao;
    }



    //登录业务
    @Override
    public int loginService(String n,String p) {
         return userLoginDao.login(n, p);
    }
}


package com.sevlet;

import com.dao.imp.UserLoginDaoImp;
import com.service.UserLoginService;
import com.service.imp.UserLoginSreviceImp;

import javax.servlet.RequestDispatcher;
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 java.io.IOException;


@WebServlet("/login")
public class LoginSevlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");

            UserLoginService u = new UserLoginSreviceImp(new UserLoginDaoImp());
            int i = u.loginService("zhangsan", "123");
            System.out.println(i);
            if(i == 1){
                //登录成功
                request.setAttribute("msg","登录成功");
            }else{
                //登录失败
                request.setAttribute("msg","登录失败");
            }
            //转发到show.js
            //获取请求转发器对象
            RequestDispatcher a = request.getRequestDispatcher("show.jsp");
            //forward(方法)调用转发
            a.forward(request,response);

    }
}

i 值为0

import com.dao.imp.UserLoginDaoImp;
import com.service.UserLoginService;
import com.service.imp.UserLoginSreviceImp;
import org.junit.Test;

public class ServiceTest {

    @Test
    public void test01(){
        UserLoginService u = new UserLoginSreviceImp(new UserLoginDaoImp());
        int i= u.loginService("zhangsan", "123");
        System.out.println(i);
    }

}

i 值为 1

为啥测试类有结果,载servlet中没有结果?

你的 mysql驱动依赖,没有打包到 你web项目中吧,检查一下

测试类是new对象,当然有结果了,servlet debug查看get请求是否进入了方法,

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/239552
  • 这篇博客你也可以参考下:javax.servlet 不存在的解决办法
  • 除此之外, 这篇博客: 还记得JavaWeb中的组件Servlet吗?面试会问中的 四、实现servlet程序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 其实操作很简单,编写一个类去实现servlet接口:

    public class FirstServlet implements Servlet{
        public FirstServlet() {
            System.out.println("我是构造器");
        }
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("我是初始化方法");
        }
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("service方式执行了");
        }
        @Override
        public String getServletInfo() {
            return null;
        }
        @Override
        public void destroy() {
            System.out.println("我被摧毁了~");
        }
    }
    

    然后在web.xml配置文件中配置servlet程序的访问地址:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>FirstServlet</servlet-name>
            <servlet-class>com.cabbage.FirstServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>FirstServlet</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    </web-app>
    

    需要注意的是:

    标签作用
    <servlet>给Tomcat配置servlet程序
    <servlet-name>给servlet程序起一个别名
    <servlet-class>servlet程序的全类名
    <servlet-mapping>给servlet程序配置访问地址
    <servlet-name>是告诉服务器,当前配置的地址给哪个servlet程序使用
    <url-pattern>配置访问地址
    /斜杠在服务器解析的时候,表示地址为http://ip:port/工程路径
    /hello表示地址为http://ip:port/工程路径/hello

    在这里插入图片描述

    图实在是太难画了,就直接拿了过来。从图中可知,客户端通过ip地址定位服务器,然后通过端口号定位Tomcat,在通过工程路径确定访问哪一个工程,最后通过资源路径访问web.xml配置文件中的访问路径,根据name找到对应的servlet类,最后执行该内中的功能代码,大致就是这么一个过程。