SpringMvc和servlet简单对⽐介绍
引⾔:由于最近要开始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。
1、jsp页⾯
<form action="login" method = "post">
⽤户名:<input type="text"name = "userName"><br>
密码:<input type="password"name = "password"><br>
<input type="submit" value="登录">
2、点击登录按钮后,提交表单,⾸先匹配l中的路径,到<url-pattern>值是login的sevlet,然后根据name去匹配servlet类,到LoginServlet。public class LoginServlet extends HttpServlet implements Servlet {
el表达式获取session中的值@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 = Parameter("userName");
/
/ 获取密码
String passwd = Parameter("password");
UserDao.SelectForLogin(userName, password); //数据中查此⼈
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>
密 ;码:<input type="password" name="password">
<p>
<input class="submit" type="submit" value="登录">
</form>
</div>
2、然后同样是匹配l
<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、然后加载l配置⽂件。
<!-- 可以扫描controller、service、...
这⾥让扫描controller,指定controller的包
-->
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.ller"></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", NickName(), "utf-8"));
cookie.setMaxAge(24 * 60 * 60 * 7);
resp.addCookie(cookie);
request.setAttribute("nickName",NickName());
resp.setCharacterEncoding("utf-8");
LOGGER.info("数据库⾥有这个⼈");
return "welcome";
} else {
LOGGER.info("数据库⾥没有这个⼈");
}
return "loginerror";
}
@RequestMapping("login.do") 这个注解是SpringMVC中的⼀个注解,该注解说明的是,对于login.do的请求,
通过注解标签下⾯的⽅法进⾏响应。相当于⽅法的⼀个URL。
5、最后在返回登录成功界⾯
这时需要l⾥的视图解析器。
<!-- 视图解析器
解析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的话需要每个请求都去在l中配置⼀个servlet节点,⽽Spring 中的DispatcherServlet他会拦截所有的请求,进⼀步去查有没有合适的处理器,⼀个前端控制器就可以。
下⾯在介绍⼀下session和cookie的使⽤⽅法。
1、session
新建session,并添加参数。
HttpSession session = Session();
session.setAttribute("nickName", value);
jsp页⾯获取session
${nickName}
过滤器获取session
String nickName = (String) Attribute("nickName");
2、cookie
新建cookie
Cookie cookie = new Cookie("nickName", NickName(), "utf-8")); cookie.setMaxAge(24 * 60 * 60 * 7);
resp.addCookie(cookie);
request.setAttribute("nickName",NickName());
resp.setCharacterEncoding("utf-8");
jsp页⾯获取cookie值
${nickName}
过滤器获取cookie
Cookie[] cookies = Cookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("nickName")) {
nickName = URLDecoder.decode(cookies[i].getValue());
break;
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论