SpringMvc和servlet简单对比介绍
本文内容纲要:
-一、servlet实现登录。
-二、springMVC
**引言:**由于最近要开始springMVC的学习,所以现在先简单介绍一下springMVC,自己也是一个初学者,所以也有很多不懂,主要是以讨论为主。
一、servlet实现登录。
咱们先来看一下servlet实现注册登录。
-
-
LoginServlet 3 -
demo.servlet.LoginServlet 4 -
-
LoginServlet 2 -
login 1
访问顺序为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页面
<formaction="login"method="post">
用户名:<inputtype="text"name="userName"><br>
密码:<inputtype="password"name="password"><br>
<inputtype="submit"value="登录">
2、点击登录按钮后,提交表单,首先匹配web.xml中的路径,找到
publicclassLoginServletextendsHttpServletimplementsServlet{
@Override
protectedvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)throwsServletException,IOException{
doPost(request,response);
}
@Override
protectedvoiddoPost(HttpServletRequestrequest,
HttpServletResponseresponse)throwsServletException,IOException{
Stringresult="";
//获取用户名
StringuserName=request.getParameter("userName");
//获取密码
Stringpasswd=request.getParameter("password");
UserDao.SelectForLogin(userName,password);//数据中查找此人
request.getSession().setAttribute("userName",userName);
response.sendRedirect("login_success.jsp");
}
}
3、然后再跳转到登陆成功页面
<body>
<divalign=center>
${userName}欢迎您,登录成功!
</div>
</body>
但是总是需要手写跳转servlet,开发效率比较低,所以就涌现除了很多框架,比如struct2,spring等等。
二、springMVC
由于SpringMVC是方法级别的拦截,SpringMVC的方法之间基本上独立的,独享requestresponse数据。它还可以和很多框架进行无缝集成,开发效率和性能高。现在很多公司都采用springMVC来进行开发,咱们公司也是采用springMVC来进行。下面我介绍一下springMVC如何实现注册登录。
1、jsp页面(登录)
<div class="content">
<formaction="login.do"method="post">
用户名:<inputtype="text"name="userName">
<p>
密 码:<inputtype="password"name="password">
<p>
<inputclass="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-scanbase-package="com.qunar.fresh2017.controller"></context:component-scan>
4、然后开始扫描controller这个类,找到login.do。这时是通过注解来找到自己所需要的方法。
/**
*用户登录时,检查数据库中是否存在此人
*
*@paramuserName输入的用户名
*@parampassword输入的用户密码
*@paramhttpSession设置session
*@return登陆成功返回登录成功,否则返回登录失败
*/
@RequestMapping("login.do")publicStringlogin(StringuserName,Stringpassword,HttpSessionhttpSession,
HttpServletRequestrequest,HttpServletResponseresp)throwsUnsupportedEncodingException{
Useruser=UserDao.SelectForLogin(userName,password);//数据中查找此人
Optional<User>userPresent=Optional.of(user);
if(userPresent.isPresent()){
Cookiecookie=newCookie("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路径的前缀-->
<propertyname="prefix"value="/"/>
<!--配置jsp路径的后缀-->
<propertyname="suffix"value=".jsp"/>
</bean>
上面这段代码的意思是解析controller中方法返回的jsp页面,前缀加“/”表示webapp根目录,配置后缀“.jsp”表示自动在返回值后加.jsp后缀,这样就找到了webapp下的wecome.jsp。
<div class="welcomediv">
欢迎:${nickName}
</div>
通过EL表达式显示登录用户昵称。
至此springMVC登录功能就实现完成了。
spring框架已经是javaweb开发很主流的框架,这个框架有很多优点当然也有它的不足之处,比于之前的servlet,它一定程度上简化了开发人员的工作,使用servlet的话需要每个请求都去在web.xml中配置一个servlet节点,而Spring中的DispatcherServlet他会拦截所有的请求,进一步去查找有没有合适的处理器,一个前端控制器就可以。
下面在介绍一下session和cookie的使用方法。
1、session
新建session,并添加参数。
HttpSessionsession=request.getSession();
session.setAttribute("nickName",value);
jsp页面获取session
${nickName}
过滤器获取session
StringnickName=(String)session.getAttribute("nickName");
2、cookie
新建cookie
Cookiecookie=newCookie("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(inti=0;i<cookies.length;i++){
if(cookies[i].getName().equals("nickName")){
nickName=URLDecoder.decode(cookies[i].getValue());
break;
}
}
}
本文内容总结:一、servlet实现登录。,二、springMVC,
原文链接:https://www.cnblogs.com/haolnu/p/7294533.html