带新手玩转MVC——不讲道理就是干(下)

带新手玩转MVC——不讲道理就是干(下)

前言:废话不多说,直接开干

完整案例演示

案例代码

LoginServlet

package servlet;

import domain.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/*
* 用户登录的Servlet
* */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        //接收数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //从ServletContext域中获得保存用户信息集合
        List<User> list = (List<User>) this.getServletContext().getAttribute("list");
        for (User user:list){
            //判断用户名是否正确
            if (username.equals(user.getUsername())){
                //判断密码是否正确
                if (password.equals(user.getPassword())){
                    //用户名密码都正确
                    //登录成功
                    //判断记住用户名复选框是否勾选
                    String remember = req.getParameter("remember");
                    if ("true".equals(remember)){
                        //完成记住用户名的功能
                        Cookie cookie = new Cookie("username",username);
                        //设置有效路径
                        cookie.setPath("/login.jsp");
                        //设置有效时间
                        cookie.setMaxAge(60*60*24);
                        //将cookie回写到浏览器
                        resp.addCookie(cookie);
                    }
                    //将用户的信息保存到Session中
                    req.getSession().setAttribute("user",user);
                    resp.sendRedirect("/success.jsp");
                    return;
                }
            }
        }
        //登录失败
        req.setAttribute("msg","用户名或密码错误!");
        req.getRequestDispatcher("/login.jsp").forward(req,resp);

    }

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

  

CookieUtils

package utils;

import javax.servlet.http.Cookie;

public class CookieUtils {

    public static Cookie findCookie(Cookie[] cookies,String name){

        if (cookies==null){

            //说明客户端没有携带Cookie

            return null;

        }else {

            //说明客户端携带Cookie

            for (Cookie cookie:cookies){

                if (name.equals(cookie.getName())){

                    return cookie;

                }

            }

            return null;

        }

    }

}

  

success.jsp

<%@page import="domain.User"%>

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

   pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>登录成功</title>

<link rel="stylesheet" href="./css/login.css">

</head>

<body>

   <%

      if(session.getAttribute("user")!=null){

         User user = (User)session.getAttribute("user");

         System.out.println(user.getPath());

         // 获得绝对路径最后一个\的位置

         int idx = user.getPath().lastIndexOf("\\");

         // 获得文件上传的唯一文件名:

         String fileName = user.getPath().substring(idx+1);

   %>

   <div class="login">

      <div class="header">

         <h1>登录成功</h1>

      </div>

      <div class="content">

         <table align="center">

            <tr>

               <td align="center"><img src="/img/<%= fileName %>" /></td>

            </tr>

            <tr>

               <td align="center">欢迎<%= user.getNickname() %>,登录成功!</td>

            </tr>

         </table>

      </div>

   </div> 

   <%       

      }else{

   %>

   <div class="login">

      <div class="header">

         <h1>您还没有登录!请先去<a href="/login.jsp">登录</a>!</h1>

      </div>

   </div>

   <%    

      }

   %>

</body>

</html>

  

特别说明

如果有朋友是按照上篇的代码一路敲过来的,这里有个问题,就是启动服务器后你必须先访问/initServlet去执行init()方法,否则你注册的信息将无法存储。

在这再给你教另外一种方法,就是在Web.xml中配置InitServlet,当服务器一启动,init()方法就立刻被执行,不用你再去手动访问了,操作过程如下:

第一步:找到web.xml,配置如下图所示的信息

<!DOCTYPEweb-appPUBLIC

 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>

    <servlet>

        <servlet-name>initServlet</servlet-name>

        <servlet-class>servlet.InitServlet</servlet-class>

        <load-on-startup>2</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>initServlet</servlet-name>

        <url-pattern>/initServlet</url-pattern>

    </servlet-mapping>

</web-app>

  

第二步:去掉@WebServlet(“/initServlet”)注解

好了,这样就完成了,现在已开启服务器,就可以直接访问注册页面进行注册了。

案例总结

写到这案例算是结束了,这里面用了MVC的设计模式,运用了JSP,Servlet里面的知识,有Web四大域对象的使用,参数的请求和接收,转发和重定向,集合的使用,还有Cookie和Session的使用,表单数据的接收,文件的上传,涉及的方面多,但不超纲,都是JavaSE中学过的部分,在这做个系统性的应用,个人认为此案例适合于初学者练手,希望能帮助到一些真正需要的朋友。

*****************************************************************************************************

我的博客园地址:https://www.cnblogs.com/zyx110/

转载请说明出处

我不能保证我所说的都是对的,但我能保证每一篇都是用心去写的,我始终认同“分享的越多,你的价值增值越大”,欢迎大家关注我的技术分享“Java匹马行天下”和学习心得分享“匹马行天下”,在分享中进步,越努力越幸运,期待我们都有美好的明天!

支持我的朋友们记得点波推荐哦,您的肯定就是我进步的动力。

原文地址:https://www.cnblogs.com/zyx110/p/11251969.html

时间: 2024-08-29 14:06:13

带新手玩转MVC——不讲道理就是干(下)的相关文章

大牛带你玩转 CSS3 3D 技术

css3的3d起步 要玩转css3的3d,就必须了解几个词汇,便是透视(perspective).旋转(rotate)和移动(translate).透视即是以现实的视角来看屏幕上的2D事物,从而展现3D的效果.旋转则不再是2D平面上的旋转,而是三维坐标系的旋转,就包括X轴,Y轴,Z轴旋转.平移同理. 当然用理论来说明,估计你还不明白.下面是3个gif: 沿着X轴旋转 沿着Y轴旋转 沿着Z轴旋转 旋转应该没问题了,那理解平移起来就比较容易了,就是在在X轴.Y轴.z轴移动. 你可能会说透视比较不好理

iOS开发——高级UI&amp;带你玩转UITableView

带你玩装UITableView 在实际iOS开发中UITableView是使用最多,也是最重要的一个控件,如果你不会用它,那别说什么大神了,菜鸟都不如. 其实关于UItableView事非常简单的,实际开发中用起来却没有那么简单就是因为他结合MVC使用,涉及到了模型数据的读取,自定义View,功能的拓展和更好的解藕,下面就带你玩一遍: UITableView的两种样式 UITableViewStylePlain UITableViewStyleGroupeds accessoryType UIT

30分钟带你玩转正则表达式

        30分钟带你玩转正则表达式   定义: 正则表达式说白了就是有普通字符.以及特殊字符组成的文子模式.{匹配模式标准} 正则表达式将会作为一个模板与所搜索的字符串进行匹配.可以让使用者轻易达到搜寻/删除/取代某些特定字符的处理程序.此外vim.grep.find.awk.sed等命令都支持正则表达式 注:在这里希望大家搞明白一件事,那就是通配符和正则表达式的区别与关系: 1.正则表达式是用来匹配字符串的,这个就不解释了2.通配符是用来通配的,也就是shell在做Pathname E

B - 瑶瑶带你玩激光坦克

B - 瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 256000/128000KB (Java/Others) Submit Status Problem Description 有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来达到一些目的,激光可以通过一些镜子反射. 机智的瑶瑶为了显示自己的智商高于常人,把这个游戏改造了一下,变成了用激光攻击敌人的游戏. 瑶瑶想知道射一次激光最多可以攻击到多少个敌人.

带你玩转Kubernetes

导读 Kubernetes是著名的容器管理系统,是一个有这很多贡献者的开源大项目,它作为一个不挑食的容器管理框架,可以无处不在.这两天接触K8s,带你玩转K8s,这个教程可以大致让你知道运行更改源码,而且从头测试本地Kubernetes平台集群. Kubernetes是个有很多贡献者的开源大项目,理论上它作为一个不挑食的容器管理框架,可以无处不在.但可惜的是,无论实际编写还是贡献测试代码,引导kubernetes server都不太容易.里边的一些文件对于我来说有些乱,不是挂了的就是过时的.源文

带你玩转Visual Studio——带你高效管理代码

上一篇文章带你玩转Visual Studio--带你高效开发通过对VAssistX优秀插件的讲解,让我们掌握了快速开发C++代码的技能.然而大部分的程序都不是一个人的开发的,是由一个团队的多个人一起开发的,大型的系统还可能由多个不同的团队分包进行开发.多人进行协作开发时,代码的管理就显得及为重要,需要借助代码管理工具的辅助,这种工具又称为版本控制系统. 目前主流的版本控制系统有: CVS:是一个用于代码版本控制的自由软件,它是一个比较早出现的工具,由于它有很多自身的缺陷,现在几乎被SVN所取代了

分分钟带你玩转 Web Services【2】CXF

在实践中一直在使用 JAX-WS 构建 WebService 服务,服务还是非常稳定.高效的. 但还是比较好奇其他的 WebService 开源框架,比如:CXF/Axis2/Spring WS等. 源于对 Apache 的信赖和喜爱, 旗下的 CXF  WebService 肯定也不会让人失望. 所以花了点时间将 CXF 引入到项目实践当中,多一种选择也未尝不可. 对于 WebService 和 CXF 简介这里就不赘述了,不太懂的同学请先移步:分分钟带你玩转 Web Services[1]J

带你玩转Visual Studio——结局汇总

感谢 这一系列文章陆陆续续写了一个月,也差不多可以告一个段落了.感谢读者们一直以来对我关注和支持!现将这一系列文章在这做一个汇总,以方便大家查阅.若是初学者,建议按顺序阅读. 系列文章目录 带你玩转Visual Studio--开篇介绍 带你玩转Visual Studio--带你新建一个工程 带你玩转Visual Studio--带你了解VC++各种类型的工程 带你玩转Visual Studio--带你高效开发 带你玩转Visual Studio--带你高效管理代码 带你玩转Visual Stu

带你玩转Visual Studio——带你发布自己的工程库

上一篇文章带你玩转Visual Studio--带你高效管理代码通过对VisualSVN优秀插件的讲解,让我们掌握了在集成开发环境VS中快捷高效地管理代码的技能.然而我们开发的程序并不总是直接地生成可执行的软件,我们可能只是开发某个大型系统的一个组件,也可能是开发某个软件的内核SDK提供给上层的应用程序调用,在开发的过程中我们也可能会用到第三方的开源库.那如果将自己的程序编译成程序库给调用方用呢?又如何在自己的程序中引用第三方库呢?这将是这篇文章要讲的内容--发布自己的工程库. 什么是程序库?