前后端交互【2】

161 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

今天,我来说说在前后端交互中,后台如何给前端提供接口,如何分析前端传过来的数据。

传纸条 image.png 把同学A看成前端,把同学B看成后端,那么在我们实现后端提供接口,分析数据,返回数据给前端是否也会像同学B接收同学A的纸条那样实现呢?让我分析分析,一探究竟。

1、后台如何提供接口给前端?

Servlet提供接口,要处理HTTP请求继承HttpServlet类。Servlet将会接收到HTTP请求并执行某种处理。

image.png 1、servlet2.5 ,在web.xml中配置映射关系,web.xml中配置的url-pattern,提供给前端访问,在前端中通过url发送请求访问,通过映射,Servlet就能接收到前端的请求。 image.png 2、servlet3.0 ,使用注解给前端提供接口,前端通过该接口向后端发送请求访问 image.png 后端提供接口给前端建议在web.xml中配置映射关系,这种方式便于管理,使用注解会暴露一个在项目根路径下的接口。

问题:后台的接口暴露了,岂不是谁都可以访问 我们可以设置过滤器(Fliter),来过滤一些不正当的请求。因为一个请求对应一个Servlet,请求多了就很麻烦,我们可以设置映射地址,实现一个servlet处理多个请求。


UserFilter继承了Filter类,实现过滤方法doFilter(),在web.xml中配置拦截路径。 doFilter方法专门用来拦截请求,做权限检查的。
这里实现的是拦截没有登录用户的访问

public void doFilter(ServletRequest servletRequest, ServletResponse 
servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        HttpSession session = httpServletRequest.getSession();
        Object user = session.getAttribute("user");
        if (user == null) {
            httpServletRequest.getRequestDispatcher("/login.jsp")
            .forward(httpServletRequest,servletResponse);
            return;     
        } else {
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }
    <filter>
        <filter-name>Userfilter</filter-name>
        <filter-class>com.filter.UserFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Userfilter</filter-name>
        <url-pattern>/user/*</url-pattern>
    </filter-mapping>
2、后端如何分析前端传过来的数据
@WebServlet("/addFbackServlet")
public class AddFbackServlet extends HttpServlet{
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String fbacktitle = request.getParameter("fbacktitle");
		String fbackcontent=request.getParameter("fbackcontent");
		int userid=Integer.parseInt(request.getParameter("userid"));
		String fbacktime = new GetTime().gettime();

		EpFeedback feedback= new EpFeedback(fbacktitle,fbackcontent,userid,fbacktime);
		IEpFeedbackDao feedbackDao= new EpFeedbackDao();
		feedbackDao.insert(feedback);
		 response.setContentType("text/html;charset=UTF-8");
		 request.getRequestDispatcher("queryAllFbackServlet").forward(request, response);
		}

		
		protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
			doGet(request, response);
		}
}

后端getParameter()接收前端传过来的参数,后端便会根据处理数据所需拿去所需的数据。 在post提交中会把数据封装还在传递,在传递数据时需要注意数据类型一致。一般使用JSON类型传递。 这一篇有许多整理得不太好的,有好多东西知道如何去实现,却不会用准确的语言表达,感谢阅读,如有错误,还请指正!!!