SpringMVC框架与Servlet介绍
引⾔:⽬前对于⼀个项⽬框架的选择确实是⼀件很头疼的事情,因为现在的各种框架层出不穷,在其中选择⼀款适合⾃⼰框架绝⾮易事。但是对于web项⽬后端到前端数据交互渲染⽣成web页⾯的MVC框架选择中,⽬前公司主流使⽤的框架为springmvc,下⾯我们就进⼊主题⼀起探讨springmvc的世界。
Servlet:是⽤java编写的服务端应⽤程序,作⽤:主要⽤于交互式的浏览和修改数据,⽣成web内容,这个过程为:客户端发送请求到服务器 -> 服务器将请求信息发送⾄Servlet –>Servlet⽣成相应内容并将其传给服务器-> 服务器将响应返回给客户端。具体操作流程查看下图。
Springmvc介绍:springmvc在java web项⽬中就是⼀个全功能MVC模块,⽽MVC框架就是⼀个分离了控制器,模型对象、分派器以及处理程序的各个⾓⾊,这种分离让它们更容易进⾏定制。功能类似于Servlet,springmvc的核⼼控制器dispatcherServlet是继承⾃framworkerSevlet,⽽对于其源码本⼈⽬前还是⽐较少的研究,⽽⽬前本⼈观点就是:springmvc是⼀个具有mvc功能的Servlet。
在介绍两个框架之前我想先介绍⼀下⼀个HTTP请求到后台处理返回的整个流程,这样有助⼤家以后对整个框架的学习与理解,其整个流程如下:
Servlet内部请求的过程:
请求说明:⼀个请求进来经过前端控制器Dispatcher Servlet,这是前端的核⼼。⼀个请求的URL进来,经过Dispatcher Servlet转发,⾸先转发到Handler Mapping,②Handler Mapping的作⽤就是完成对URL到Controller组件的映射,然后通过Dispatcher Servlet 从Handlermapping查处理request的Controller。③ controller处理request请求后并返回ModelAndView对象,Controller是是springmvc中负责处理request的组件,ModelAndView是封装结果视图的组件。其后⾯的步骤就是将视图结果返回给
客户端。总结:上图除了Dispatcherservlet以外其他的都是相互独⽴,所有请求都经过这个核⼼控制器进⾏转发控制。
下⾯就来介绍⼀下servlet与springmvc开发以及在项⽬开发的注意事项:
Servlet实例:
1、l中的配置
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>login.html</url-pattern>
</servlet-mapping>
备注: 对于这个配置⽂件在前端浏览器输⼊地址时访问的循序确是从下向上的,前端控制器通过url-pattern规则进⾏拦截。
2、前端页⾯
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
<meta charset="utf-8">
</head>
<body>
<form action="login.html" method = "post">
⽤户名:<input type="text"name = "userName"><br>
密码:<input type="password"name = "password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
3、 点击登录按钮后,提交表单,⾸先匹配l中的路径,到<url-pattern>值是login。html的sevlet,然后根据name去匹配servlet类,到LoginServlet。LoginServlet.java⽂件
public class LoginServlet extends HttpServlet implements Servlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
springmvc常用标签}
@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");
}
}
4、运⾏整个项⽬,在浏览器中访问。
总结:这个开发过程就是⼿写跳转的Servlet,这样开发效率⽐较的,索引涌现了很多例如struts2,springmvc这样的框架。
⼆、springmvc框架实例介绍
Springmvc是公司⽬前开发中常采⽤的主流框架,它是⽅法级别的拦截,每个⽅法之间都是独⽴的,独享request response数据。它还可以和很多框架进⾏⽆缝集成,开发效率和性能很⾼。下⾯就来介绍⼀下springmvc的登录开发过程。
1、l配置
<servlet>
<servlet-name>SpringDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name> SpringDispatcherServlet </servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
备注:上⾯这段xml的意思就是,所有的以.do结尾的action都让org.springframework.web.servlet.DispatcherServlet这个类来处理。load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调⽤其init()⽅法)。这时servlet不⽤初始化,⽽是交给容器去
处理。
2、页⾯开发
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
<meta charset="utf-8">
</head>
<body>
<form action="login.do" method = "post">
⽤户名:<input type="text"name = "userName"><br>
密码:<input type="password"name = "password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
3、加载l配置⽂件
<!-- 可以扫描controller、service、...
这⾥让扫描controller,指定controller的包
-->
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="ller"></context:component-scan>
4、Controller类编写
/**
* ⽤户登录时,检查数据库中是否存在此⼈
*
* @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.selectUser(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");
return "login";
}
return "error";
}
备注: @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>
总结: spring框架已经是java web开发很主流的框架,这个框架有很多优点当然也有它的不⾜之处,⽐于之前的servlet,它⼀定程度上简化了开发⼈员的⼯作,使⽤servlet的话需要每个请求都去在l中配置⼀个servlet节点,⽽Spring 中的DispatcherServlet他会拦截所有的请求,进⼀步去查有没有合适的处理器,⼀个前端控制器就可以
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论