JAVAWEBSMBMS 期末大作业

Posted ꧁༺空༒白༻꧂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVAWEBSMBMS 期末大作业相关的知识,希望对你有一定的参考价值。

SMBMS javaweb期末大作业

1、项目部署准备

  1. 创建一个新的maven,选中maven的webapp,然后创建

  2. 新建项目结构
    在这里插入图片描述

  3. 连接数据库并且创建实体类

在这里插入图片描述

  1. 配置pom.xml文件信息

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
    
  2. 配置数据库链接驱动db.properties

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8
    user=root
    password=root
    
  3. 写一个BaseDao来获取数据库的连接信息

    public class BaseDao {
        private static String driver;
        private static String url;
        private static String user;
        private static String password;
        //静态代码块,类加载的时候就初始化了
        static {
            //通过类加载读取对应资源
            Properties properties = new Properties();
            InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
            try{
                properties.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
            driver=properties.getProperty("driver");
            url=properties.getProperty("url");
            user=properties.getProperty("user");
            password=properties.getProperty("password");
        }
        //获取数据库的连接
        public static Connection getConnection(){
            Connection connection=null;
            try{
                Class.forName(driver);
                connection= DriverManager.getConnection(url,user,password);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connection;
        }
    
        //编写查询的公共类
        public static ResultSet execute(Connection connection, String sql, Object[] params, ResultSet resultSet, PreparedStatement preparedStatement) throws SQLException {
            //预编译sql,在后面直接执行即可
            preparedStatement = connection.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                preparedStatement.setObject(i + 1, params[i]);//占位符是从1开始的
            }
            resultSet = preparedStatement.executeQuery(sql);
            return resultSet;
        }
        public static int execute(Connection connection, String sql, Object[] params, PreparedStatement preparedStatement) throws SQLException {
            //增删改查公共方法
            preparedStatement = connection.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                preparedStatement.setObject(i + 1, params[i]);//占位符是从1开始的
            }
            int updateRows=preparedStatement.executeUpdate();
            return updateRows;
        }
        //释放资源
        public static boolean closeResources(Connection connection, ResultSet resultSet, PreparedStatement preparedStatement){
            boolean flag=true;
            //回收资源
            if(resultSet!=null){
                try{
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag=false;
                }
            }
            if(connection!=null){
                try{
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag=false;
                }
            }
            if(preparedStatement!=null){
                try{
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag=false;
                }
            }
            return flag;
        }
    
  4. 过滤器characterEndingFile

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
    
        chain.doFilter(request,response);
    }
    
  5. 配置web.xml文件

    <!--    字符编码过滤器-->
        <filter>
            <filter-name>characterEndingFile</filter-name>
            <filter-class>com.kong.filter.characterEndingFile</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>characterEndingFile</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

2、登录实现

1、控制层user

  • UserDao

    public interface UserDao {
        //得到需要的用户
        public User getLoginUser(Connection connection,String userCode) throws SQLException;
    
    }
    
  • UserDaoImpl

    ublic class UserDaoImpl implements UserDao {
        public User getLoginUser(Connection connection, String userCode) throws SQLException {
            PreparedStatement pstm=null;
            ResultSet rs=null;
            User user=null;
    
            if(connection!=null) {
                String sql = "select * from smbms_user where userCode=?";
                Object[] params = {userCode};
                    rs = BaseDao.execute(connection, pstm, rs, sql, params);
                    if (rs.next()) {
                        user = new User();
                        user.setId(rs.getInt("id"));
                        user.setUserCode(rs.getString("userCode"));
                        user.setUserName(rs.getString("userName"));
                        user.setUserPassword(rs.getString("userPassword"));
                        user.setGender(rs.getInt("gender"));
                        user.setBirthday(rs.getDate("birthday"));
                        user.setPhone(rs.getString("phone"));
                        user.setAddress(rs.getString("address"));
                        user.setUserRole(rs.getInt("userRole"));
                        user.setCreatedBy(rs.getInt("createdBy"));
                        user.setCreationDate(rs.getTimestamp("creationDate"));
                        user.setModifyBy(rs.getInt("modifyBy"));
                        user.setModifyDate(rs.getTimestamp("modifyDate"));
                    }
                    BaseDao.closeResources(null, pstm, rs);
                }
            return user;
        }
    

2、服务层service

  • UserService

    public interface UserService {
        public User login(String userCode,String password);
    }
    
  • UserServiceImpl

    public class UserServiceImpl implements UserService {
        //业务层会调用dao层,引入dao层操作
        private UserDao userDao;
    
        public UserServiceImpl() {
            userDao = new UserDaoImpl();
        }
    
        public User login(String userCode, String userPassword) {
            Connection connection = null;
            User user = null;
            try {
                connection = BaseDao.getConnection();
                //通过业务层调用对应的具体数据库操作
                user = userDao.getLoginUser(connection,userCode);
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                BaseDao.closeResources(connection,null,null);
            }
            return user;
        }
        @Test
        public void test(){
            UserServiceImpl userService=new UserServiceImpl();
            User admin = userService.login("admin", "123456");
            System.out.println(admin.getUserPassword());
        }
    

3、servlet层

  • Loginservlet
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    System.out.println("你好");
    //获取用户和密码
    String userCode=req.getParameter("userCode");
    String userPassword=req.getParameter("userPassword");
    //和数据库中的密码进行对比,调用业务层
    UserService userService=new UserServiceImpl();
    User user=userService.login(userCode,userPassword);//把登录的人查出来
    if(user!=null){
        //查有此人,可以登录
        req.getSession().setAttribute(Constants.USER_SESSION,user);
        resp.sendRedirect("jsp/frame.jsp");
    }else{
        req.setAttribute("error","用户名或者密码不正确");
        //失败转发回登录页面,并且获取error消息
        req.getRequestDispatcher("login.jsp").forward(req,resp);
    }
}

4、写一个工具类放在util方便修改

  • Constants

    public class Constants {
        public final static String USER_SESSION="userSession";
    }
    

5、配置web.xml

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.kong.servlet.user.Loginservlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login.do</url-pattern>

重定向(redirect)和请求转发(getRequestDispatcher)的区别

  1. 重定向:两次请求两次响应

​ 请求转发:只有一次

  1. 重定向:需要给出响应的URL,也就是包含的项目名

    请求转发:只需要给出转发的Servlet路径

  2. 重定向:显示后一个请求的地址,属于客户端行为,重新发送了请求,整个过程不在同一个请求中,因此会跳转

    请求转发:地址不会发生变化,属于服务端的行为,整个过程是同一次请求

  3. 重定向:到了Servlet,再到其他项目

    请求转发:只能是本项目其他Servlet

3、注销及权限过滤

注销功能:删除session,返回登录页面

  • LoginOut
public class LoginOut extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //删除session
        req.getSession().removeAttribute(Constants.USER_SESSION);
        resp.sendRedirect(req.getContextPath()+"/login.jsp");
    }
  • 登录拦截实现

根据判断session是否为空,来做拦截的判断

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request1 = (HttpServletRequest) request;
    HttpServletResponse response1 = (HttpServletResponse) response;

    //过滤器,获取session用户
    User user=(User) request1.getSession().getAttribute(Constants.USER_SESSION);
    if(user==null){//已经移除或者注销,或者未登录
        response1.sendRedirect("/error.jsp");
    }else {
        chain.doFilter(request,response);
    }
}

注意每一写一步都要配置web.xml

<!--    登录拦截-->
    <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>com.kong.filter.loginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/jsp/*</url-pattern>
    </filter-mapping>
<!--    注销-->
    <servlet>
        <servlet-name>LoginOut</servlet-name>
        <servlet-class>com.kong.servlet.user.LoginOut</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginOut</servlet-name>
        <url-pattern>/jsp/logout.do</url-pattern>
    </servlet-mapping>

以上是关于JAVAWEBSMBMS 期末大作业的主要内容,如果未能解决你的问题,请参考以下文章

HTML5期末大作业:餐饮美食网站设计——咖啡(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 咖啡网页设计 美食餐饮网页设计...(代码片段

HTML+CSS期末大作业 中国传统美食网站设计 节日美食13页 html5网页设计作业代码 html制作网页案例代码 html大作业网页代码

期末大作业——许愿墙

第十次作业:期末大作业

一个简单HTML5期末考核大作业,学生个人html静态网页制作代码

项目分享期末大作业——电商后台管理系统