SpringMvc和servlet简单对比介绍

差分隐私(Differential Privacy) 差分隐私,拉普拉斯机制和高斯机制的证明 阅读详情
AI摘要

本文介绍了使用SpringMVC框架实现用户登录的具体步骤,包括从前端表单提交数据到后端处理请求,以及如何配置DispatcherServlet和使用注解来简化开发过程。


引言:由于最近要开始springMVC的学习,所以现在先简单介绍一下springMVC,自己也是一个初学者,所以也有很多不懂,主要是以讨论为主。

 

一、servlet实现登录。

咱们先来看一下servlet实现注册登录。

 

  • <servlet>  
  •      <servlet-name>LoginServlet</servlet-name>                                3
  •      <servlet-class>demo.servlet.LoginServlet</servlet-class>             4
  • </servlet>  
  • <servlet-mapping>  
  •      <servlet-name>LoginServlet</servlet-name>                                 2
  •      <url-pattern>login</url-pattern>                                                      1
  • </servlet-mapping>  

       访问顺序为1—>2—>3—>4,其中2和3的值必须相同。

url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值的 servlet,两个 servlet-name 标签的值必须相同,因为通过 servlet 标签中的 servlet-name 标签映射到 servlet-class 标签中的值,最终访问 servlet-class 标签中的 class。

还有,web.xml 的 / 表示的是http://localhost:8080/ + 工程名。转自(点击打开链接)

1、jsp页面

<form action="login" method = "post">
用户名:<input type="text"name = "userName"><br>
密     码:<input type="password"name = "password"><br>
<input type="submit" value="登录">

 

2、点击登录按钮后,提交表单,首先匹配web.xml中的路径,找到<url-pattern>值是login的sevlet,然后根据name去匹配servlet类,找到LoginServlet。

复制代码
public class LoginServlet extends HttpServlet implements Servlet {  
    @Override  
    protected void doGet(HttpServletRequest request,  
            HttpServletResponse response) throws ServletException, IOException {  
        doPost(request, response);  
    }  
  
    @Override  
    protected void doPost(HttpServletRequest request,  
            HttpServletResponse response) throws ServletException, IOException {  
        String result = "";  
        // 获取用户名  
        String userName = request.getParameter("userName");         
        // 获取密码  
        String passwd = request.getParameter("password");              

        UserDao.SelectForLogin(userName, password); //数据中查找此人
request.getSession().setAttribute("userName", userName); response.sendRedirect("login_success.jsp");
  }
}
复制代码

 

3、然后再跳转到登陆成功页面

 <body>  
        <div align=center>  
            ${userName } 欢迎您,登录成功!  
        </div>  
 </body>  

 

但是总是需要手写跳转servlet,开发效率比较低,所以就涌现除了很多框架,比如struct2,spring等等。

 

二、springMVC

由于SpringMVC是方法级别的拦截,SpringMVC的方法之间基本上独立的,独享request response数据。它还可以和很多框架进行无缝集成,开发效率和性能高。现在很多公司都采用springMVC来进行开发,咱们公司也是采用springMVC来进行。下面我介绍一下springMVC如何实现注册登录。

1、jsp页面(登录)

 

复制代码
<div class="content">
    <form action="login.do" method="post">
用户名:<input type="text" name="userName">
        <p>
密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="password">
        <p>
            <input class="submit" type="submit" value="登录">
    </form>
</div>
复制代码

 2、然后同样是匹配web.xml

复制代码
<servlet>  
        <servlet-name>spmvc</servlet-name> 
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
 </servlet>
<servlet-mapping>
          <servlet-name>spmvc</servlet-name>
          <url-pattern>*.do</url-pattern>
 </servlet-mapping>
复制代码

 上面这段xml的意思就是,所有的以.do结尾的action都让org.springframework.web.servlet.DispatcherServlet这个类来处理。load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。这时servlet不用初始化,而是交给容器去处理。

 

Spring主要也是通过DispatcherServlet实现了Servlet这个接口,又叫前端控制器,来自前端的请求会先到达这里,它负责到后台去匹配合适的handler。DispatcherServlet的主要工作流程如下:

前端请求到达DispatcherServlet。

前端控制器请求HandlerMappering 查找Handler。

如果查找到存在的处理器,进一步去调用service和dao层

返回结果再到controller层,渲染具体的视图,返回结果给页面。

3、然后加载sringMVC-servlet.xml配置文件。

<!-- 可以扫描controller、service、...
这里让扫描controller,指定controller的包
-->
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.qunar.fresh2017.controller"></context:component-scan>

 

4、然后开始扫描controller这个类,找到login.do。这时是通过注解来找到自己所需要的方法。

 
  
复制代码
/**
 * 用户登录时,检查数据库中是否存在此人
*
 * @param userName    输入的用户名
* @param password    输入的用户密码
* @param httpSession 设置session
 * @return 登陆成功返回登录成功,否则返回登录失败
*/
@RequestMapping("login.do") public String login(String userName, String password, HttpSession httpSession,
HttpServletRequest request,HttpServletResponse resp) throws UnsupportedEncodingException {

    User user = UserDao.SelectForLogin(userName, password); //数据中查找此人
   Optional<User> userPresent = Optional.of(user);
    if (userPresent.isPresent()) {

    Cookie cookie = new Cookie("nickName", URLEncoder.encode(user.getNickName(), "utf-8"));
    cookie.setMaxAge(24 * 60 * 60 * 7);
    resp.addCookie(cookie);
    request.setAttribute("nickName",user.getNickName());
    resp.setCharacterEncoding("utf-8");
    LOGGER.info("数据库里有这个人");
       return "welcome";
  } else {
        LOGGER.info("数据库里没有这个人");
  }

    return "loginerror";
}
复制代码
 
  

 

@RequestMapping("login.do") 这个注解是SpringMVC中的一个注解,该注解说明的是,对于login.do的请求,
通过注解标签下面的方法进行响应。相当于方法的一个URL。

 

5、最后在返回登录成功界面

这时需要spring-servlet.xml里的视图解析器。

 

复制代码
<!-- 视图解析器
解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包
-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置jsp路径的前缀 -->
<property name="prefix" value="/"/>
<!-- 配置jsp路径的后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
复制代码

 

 

 

上面这段代码的意思是解析controller中方法返回的jsp页面,前缀加“/”表示webapp根目录,配置后缀“.jsp”表示自动在返回值后加.jsp后缀,这样就找到了webapp下的wecome.jsp。

 

 
  
<div class="welcomediv">
  欢迎:${nickName} </div>

通过EL表达式显示登录用户昵称。

至此springMVC登录功能就实现完成了。

 

spring框架已经是java web开发很主流的框架,这个框架有很多优点当然也有它的不足之处,比于之前的servlet,它一定程度上简化了开发人员的工作,使用servlet的话需要每个请求都去在web.xml中配置一个servlet节点,而Spring 中的DispatcherServlet他会拦截所有的请求,进一步去查找有没有合适的处理器,一个前端控制器就可以。

 

下面在介绍一下session和cookie的使用方法。

  1、session

 新建session,并添加参数。

 

HttpSession session = request.getSession(); 
session.setAttribute("nickName", value); 

jsp页面获取session

${nickName}

过滤器获取session
 
  
String nickName = (String) session.getAttribute("nickName");

2、cookie
新建cookie
Cookie cookie = new Cookie("nickName", URLEncoder.encode(user.getNickName(), "utf-8"));
cookie.setMaxAge(24 * 60 * 60 * 7);
resp.addCookie(cookie);
request.setAttribute("nickName",user.getNickName());
resp.setCharacterEncoding("utf-8");

 jsp页面获取cookie值

${nickName}
过滤器获取cookie
复制代码
  Cookie[] cookies = servletRequest.getCookies();
        if (cookies != null) {
            for (int i = 0; i < cookies.length; i++) {
                if (cookies[i].getName().equals("nickName")) {
                    nickName = URLDecoder.decode(cookies[i].getValue());
                    break;
                }
            }
        }
复制代码
Depth Anything 3实战:如何用DINOv2 Transformer一键生成3D高斯点云? 本文详细介绍了Depth Anything 3(DA3)模型如何利用DINOv2 Transformer架构,实现从单张或多视角图像一键生成高质量3D高斯点云。DA3通过统一的深度-射线表示和自适应注意力机制,简化了传统复杂的3D重建流程,并可直接微调用于3D高斯渲染,为图形学、CV和内容创作领域提供了高效的端到端解决方案。 阅读详情

相关推荐

爬取百度图片

最开始,我们想要爬取图片,首先需要打开百度图库,然后在搜索栏中输入自己想要的图片(比如说壁纸)。接着右键检查,点击网络:起初可能没有名称信息,刷新界面就可以了。打开信息,查看标头内容可以看到请求URL为:复制这串URL,然后在浏览器中打开这个就是我们搜索的壁纸图片的网页内容。怎么找到图片的URL呢?在上述内容中,找到data,可以发现里面每隔一个aiEditData,下面代码的形式是一样的,就相当于一张图片。

weixin_54143563的博客 1939

springMVC技术和servlet技术的区别及前者的优势

相比于 Servlet,Spring MVC 提供了更为高级、灵活的功能,可以更加轻松地完成复杂的 Web 应用程序开发,因此在实际开发中,Spring MVC 更受欢迎。所以Spring MVC 比 Servlet 更加灵活、易于扩展和测试,具有更好的错误处理机制和更好的视图技术支持。

weixin_52060913的博客 1546

Ubuntu22.04中通过conda快速部署PyTorch开发环境(CPU/GPU双版本实战)

本文详细介绍了在Ubuntu22.04系统中,如何利用Conda高效部署PyTorch开发环境。文章分别提供了CPU与GPU双版本的实战教程,涵盖环境创建、镜像加速、版本匹配及深度验证等关键步骤,旨在帮助开发者快速搭建稳定、兼容的深度学习环境,从而专注于模型开发。

rose2的博客 556

一文带你搞懂Spring MVC和servlet(面试必备)

一、Spring MVC与Jsp/Servlet比较1、传统的 Jsp/Servlet 技术体系弊端2、Spring Web MVC 特点3、Spring MVC工作流程二、idea创建servlet项目1、搭建过程2、servlet的工作流程3、servlet的生命周期三、idea创建Spring MVC项目1、搭建过程2、Spring MVC接口解释接口解释DispatcherServlet...

qq_36908783的博客 9318

使用buildroot系统的qmake编译QT出现Unknown module(s) in QT: xxxx 的错误解决方法

可以看到,我这里使用的是 qt5base-5.15.2 目录下的qmake,这个qmake只包含了基础的qt模块,而额外添加的qt模块没有包含进去,需要使用。可以看到我这里是有的,如果你跟我一样,模块存在,但是还是报找不到对应模块的错误的话,大概率是跟我一样,用错qmake了,看第二点。在包含 qt5base 目录下查看,是否有对应模块的目录,如果没有的话,需要通过make menuconfig 添加一下。目录下的qmake才可以。

T541132的博客 2489

5分钟看懂LTE注网全流程:从PLMN选择到小区驻留的log分析技巧

本文深入解析了LTE终端从开机到成功驻留小区的完整流程,重点分享了基于QXDM和QCAT工具的log分析实战技巧。文章详细拆解了PLMN选择、System/Band扫频、小区搜索与同步、系统消息解析及驻留等关键步骤,并提供了高频问题场景的排查思路,帮助网络优化工程师快速定位终端侧、射频环境或网络配置问题。

app77的博客 432

SpringMVC和Servlet区别对比

Servlet:性能最好,处理Http请求的标准。 SpringMVC:开发效率高(好多共性的东西都封装好了,是对Servlet的封装,核心的DispatcherServlet最终继承自HttpServlet) 这两者的关系,就如同MyBatis和JDBC,一个性能好,一个开发效率高,是对另一个的封装。

cleble的专栏 2万+

五子棋ai:极大极小搜索和α-β剪枝算法的思想和实现(qt和c++)(一)引言和界面设计

引言 alphaGo击败围棋冠军李世石的新闻让我对棋类博弈产生了浓厚的兴趣,无奈本人不会围棋,但算是一个五子棋业余爱好者,于是乎希望通过实现一个五子棋ai来了解相关算法和知识。 五子棋在英文中又称Gobang,five-in-row,还有两个称呼:gomoku和renju(连珠)。我来简要介绍一下区别。由于五子棋已经被机器严格证明了是一种**“不公平”的游戏,先手黑子是绝对占优的,并且先手有必胜*...

livingsu的博客 1万+

servlet和springmvc的区别 springmvc的原理

个人的理解: 一、首先说mvc和单独一个servlet的区别: 如果我的tomcat服务器要实现一个功能,比如说接收一个请求,从数据库里查出一条用户信息(select),然后返回到服务器,那么不用mvc的方法是: 只有一个servlet也可以实现,自定义一个servlet,在tomcat的web.xml的中注册,接收 /select 请求,在servlet里手写实现jdbc接口连接数据库完成查...

weixin_41399873的博客 5473

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search 发表位置 ECCV 2020 摘要 作者提出了一种基于得分的黑盒Square attack,该模型不依赖于模型的局部梯度信息,因此可以绕过梯度隐藏防御攻击。Square Attack是一种随机搜索方法,它在随机位置选择局部的方形更新,使得每次迭代时扰动近似位于可行集的边界。 背景 当涉及到对安全至关重要的机器学习应用时,对抗性的例子尤其值得

yayayamaomaoya的博客 2492

在Mac上搭建本地AI工作流:Dify与DeepSeek的完美结合

本文介绍了在Mac上搭建本地AI工作流的方法,结合Dify平台和DeepSeek模型。Dify是一个开源的大语言模型应用开发平台,支持可视化AI应用开发。部署步骤包括:1)安装Homebrew和Docker;2)克隆Dify代码库;3)配置环境变量并启动服务。同时,使用Ollama工具本地部署DeepSeek模型,将其集成到Dify中创建聊天助手。通过配置模型接口和新建应用,用户可以在本地环境中实现AI对话功能。这种方案既保证了数据隐私,又提供了灵活的AI应用开发能力。

Linda的自动化测试之旅 1535

菜鸟学SpringMVC之——SpringMVC和Servlet的区别与联系

SpringMVC和Servlet的区别与联系 Servlet:性能最好,处理Http请求的标准。 SpringMVC:开发效率高(好多共性的东西都封装好了,是对Servlet的封装,核心的DispatcherServlet最终继承自HttpServlet) 这两者的关系,就如同MyBatis和JDBC,一个性能好,一个开发效率高,是对另一个的封装。 接下来我们分别通过SpringMVC和Servlet实现一下用户登录的过程,体会一下他们的区别 Servlet实现登录 首先配置:web.xml <

菜鸟琪 1万+

RK3588之内存带宽计算及达成率

本章来和大家介绍一下内存带宽的计算与达成率

文艺小少年的博客 1813

SpringMvc和servlet对比

一、servlet实现登录。 咱们先来看一下servlet实现注册登录。 <servlet> <servlet-name>LoginServlet</servlet-name> 3 <servlet-class>demo.servlet.Login...

weixin_30586257的博客 398

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Servlet和SpringMVC对比

Servlet实现登录 配置web.xml <?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://

qq_42474809的博客 838

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

springmvc执行过程浅析以及与servlet执行过程对比

在分析springmvc执行过程之前,先对传统servlet的执行过程进行一个简短介绍,因为二者的职能是一样的,都是控制层的东西。 传统servlet的执行过程分为如下几步: 1、浏览器向服务器发送请求http://localhost:8080/webproject/hello 2、服务器接受到请求,并从地址中得到项目名称webproject 3、然后再从地址中找到名称hello,并与we...

CoderWangSon 1002

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Struts2、SpringMVC、Servlet(Jsp)性能对比测试

Struts2、SpringMVC、Servlet(Jsp)性能对比测试 。Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照它。做为一个程序员,对于各个框架的性能要有一个基本的认知,便于选型时做出正确的决策。在测试中发现了什么也不要大喊大叫,因为这些都是Java程序员的基础知识。 人人都要了解。建议先阅读《你想建设一个能承受500万PV/每天的网站吗? 》一文,了解一些

流云的博客 650

springmvc+freemarker与servlet性能对比

为了更好的测试公平性,刚才的message.flt去空格改为   &lt;html&gt;&lt;body&gt;&lt;p&gt;This is my message:&lt;br&gt; ${message}&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;     编写servlet package com.ab.test; import ja

lavafree 226

Struts2、SpringMVC、Servlet(Jsp)性能对比 测试

 Struts2、SpringMVC、Servlet(Jsp)性能对比测试。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照它。 做为一个程序员,对于各个框架的性能要有一个基本的认知,便于选型时做出正确的决策。 在测试中发现了什么也不要大喊大叫,因为这些都是Java程序员的基础知识。人人都要了解。 ---------------------------...

iteye_6274的博客 76
上一篇: 如何修改eclipse下tomcat的工程所生成的项目文件的名称
下一篇: 交互设计师
huapro.vip
博客等级 码龄15年 36粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值