社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
引言:目前对于一个项目框架的选择确实是一件很头疼的事情,因为现在的各种框架层出不穷,在其中选择一款适合自己框架绝非易事。但是对于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、web.xml中的配置
<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、
点击登录按钮后,提交表单,首先匹配
web.xml
中的路径,找到
<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);
}
@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");
}
}
4、运行整个项目,在浏览器中访问。
总结:这个开发过程就是手写跳转的Servlet,这样开发效率比较的,索引涌现了很多例如struts2,springmvc这样的框架。
二、springmvc框架实例介绍
Springmvc是公司目前开发中常采用的主流框架,它是方法级别的拦截,每个方法之间都是独立的,独享request response数据。它还可以和很多框架进行无缝集成,开发效率和性能很高。下面就来介绍一下springmvc的登录开发过程。
1、web.xml配置
<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、加载springmvc-servlet.xml配置文件
<!-- 可以扫描controller、service、...
这里让扫描controller,指定controller的包
-->
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.springmvc.controller"></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", URLEncoder.encode(user.getNickName(), "utf-8"));
cookie.setMaxAge(24 * 60 * 60 * 7);
resp.addCookie(cookie);
request.setAttribute("nickName",user.getNickName());
resp.setCharacterEncoding("utf-8");
return "login";
}
return "error";
}
备注:
@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>
总结:
spring框架已经是java web开发很主流的框架,这个框架有很多优点当然也有它的不足之处,比于之前的servlet,它一定程度上简化了开发人员的工作,使用servlet的话需要每个请求都去在web.xml中配置一个servlet节点,而Spring 中的DispatcherServlet他会拦截所有的请求,进一步去查找有没有合适的处理器,一个前端控制器就可以
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!