• java web学习总结


    servlet学习

    1.1 基本配置

    1.导入依赖

        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
        </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.创建一个servlet去继承HttpServlet,重写service方法,在该方法中写我们的一些操作

    public class SchoolServlet extends HttpServlet {
    	@Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		//1.首先编码设置
    		req.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html;charset=UTF-8");
            // 2. 响应结果 
            resp.getWriter().println("被访问了。");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.在web.xml中配置servlet

        <servlet>
            <servlet-name>addservlet-name>
            
            <servlet-class>action.Servletservlet-class>
        servlet>
        <servlet-mapping>
        	<servlet-name>addservlet-name> 
        
        <url-pattern>*.dourl-pattern>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    1.2 一些用法

    1.首先创建一个jsp页面

    <%--
      Created by IntelliJ IDEA.
      User: 20473
      Date: 2022/9/13
      Time: 9:30
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>登录title>
        head>
        <body style="text-align: center">
            <form action="../login">
                <label>用户名:label>
                <input type="text" name="uName">
                <br>
                <label style="margin-left: 1em">密码:label>
                <input type="password" name="uPassword">
                <div style="margin: 5px 50px">
                    <input type="submit" value="提交">
                    <input type="reset" value="重置">
                div>
            form>
        body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    注意action写的是表单提交相对应servlet的地址

    2.@WebServlet()配置servlet

    添加Tomacat后使用,否则用不了

    添加依赖

    @WebServlet("/login") //通过该注解省去web.xml中的配置
    public class UserServlet extends HttpServlet {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.得到页面传递过来的参数

    req.getParameter()
    
    • 1

    4.session使用

     		HttpSession session = req.getSession();
     		//保存信息到session中
            session.setAttribute("user",uName);
            //设置有效期,单位秒,默认30分钟
            session.setMaxInactiveInterval(60);
            //session失效
            session.invalidate();  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5.cookie的使用

    //创建cookie对象
     Cookie cookie = new Cookie("name",user);
     //设置cookie的存在时间,单位秒
     cookie.setMaxAge(2*60);
     //设置cookie的value值
     cookie.setValue();
     //添加cookie到浏览器中
     resp.addCookie(cookie);
     //得到浏览器中的cookie
     Cookie[] cookies = req.getCookies();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6.转发

    转发是共享request, response对象 ,因此可以把需要转发的数据保存在request对象中。

            //设置属性
            req.setAttribute("books",books);
            //转发到jsp中
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("book/show.jsp");
            requestDispatcher.forward(req,resp);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    jsp页面得到servlet传递过来的对象(脚本方式)

    <%中间可以写java代码%>,<%=book.getId()%>得到属性值

    例如书籍信息展示:

                <table>
                <tr>
                    <th>书本编号th>
                    <th>类型编号th>
                    <th>书名th>
                    <th>作者th>
                    <th>价格th>
                    <th>出版日期th>
                    <th>库存th>
                    <th>操作th>
                tr>
                <%
                    Object books = request.getAttribute("books");
                    if (books != null) {
                        ArrayList<Book> list = (ArrayList<Book>) books;
                        for (Book book : list) {
                %>
                <tr>
                    <td><%=book.getId()%>td>
                    <td><%=book.getTyId()%>td>
                    <td><%=book.getName()%>td>
                    <td><%=book.getAuthor()%>td>
                    <td><%=book.getPrice()%>td>
                    <td><%=book.getDate()%>td>
                    <td><%=book.getNum()%>td>
                    <td>
                        <a href="query.do?book_id=<%=book.getId()%>">修改a>
                        <a href="delete.do?book_id=<%=book.getId()%>">删除a>
                    td>
                tr>
                <%
                        }
                    }
                %>
            table>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    7.重定向

    System.out.println(req.getContextPath());//"/web01" System.out.println(req.getRequestURL());//http://localhost:8080/web01/b.do System.out.println(req.getServletPath());// "/b.do

    resp.sendRedirect(req.getContextPath() + "/show.do");
    
    • 1

    8.el表达式
    同理,先是servlet转发request, response对象,然后再jsp页面上进行使用

     //设置属性
            req.setAttribute("books",books);
            //转发到jsp中
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("book/show.jsp");
            requestDispatcher.forward(req,resp);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    用法${}

    <label style="margin-left: 2em;">书名:label>
    <input type="text" name="book_name" value="${book.name}">
    
    • 1
    • 2

    EL表达式不仅能获取Servlet中存储的数据,也能简化JSP中的代码量,使程序简单易维护,另外,当域对象里面的值不存在时,使用EL表达式获取域对象里面的值返回空字符串;而使用Java脚本方式获取,返回值是null,会报空指针异常。

    el表达式具体详情可以参考JavaWeb——EL表达式

    过滤器

    过滤器是sun提供一个组件, 需要依赖于tomcat容器运行。
    过滤器的执行过程: 访问请求的时候,先根据过滤器的配置,符号过滤器路径的请求,则先进入到过滤器中执行,执行结束之后,再根据情况,看是否需要进入到servlet中。
    例如未登录不让访问

    public class Filter extends HttpFilter {
        @Override
        protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            String requestURI = request.getRequestURI();
    		//登录界面不过滤
            if (requestURI.contains("login")){
                chain.doFilter(request,response);
                return;
            }
            HttpSession session = request.getSession();
            if (session.getAttribute("user") != null){
                //调用下一个过滤器的doFilter方法,如果没有就执行servlet
                chain.doFilter(request,response);
            }else {
                response.getWriter().println("请先登录");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    web.xml配置过滤器的拦截

    <filter>
    	<filter-name>hhfilter-name> 
    	<filter-class>action.LoginFilterfilter-class>
     filter> 
     <filter-mapping>
      	<filter-name>hhfilter-name> 
       
       
       
      	<url-pattern>/*url-pattern>
      filter-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    监听器

    监听器在后台工作,可以设置需要监听的内容
    例如对请求次数的统计

    public class Listener implements ServletRequestListener {
        @Override
        public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
    
        }
        //每次请求一次统计数据
        @Override
        public void requestInitialized(ServletRequestEvent servletRequestEvent) {
            ServletContext servletContext = servletRequestEvent.getServletContext();
            Object count = servletContext.getAttribute("count");
            if (count == null){
            	//第一次请求,创建count
                servletContext.setAttribute("count",1);
            }else {
                int num = (int) count + 1;
                servletContext.setAttribute("count",num);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    同理在web.xml中配置

        <listener>
            <listener-class>action.Listenerlistener-class>
        listener>
    
    • 1
    • 2
    • 3

    ajax使用

    $.ajax({ 
    	url: "hobby", // 请求的url 
    	data: args, // 请求参数 
    	type: "get", // 请求的方式 
    	dataType: "json",// 期待的响应结果的格式 
    	success:function (res) {//成功之后,// res ==> {"success":true} 
     		if(res.success){ 
     			alert("成功") 
     		}else{
     			alert("失败了") 
     		} 
     	} 
     })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    jsp内置对象

    request : 请求
    session : 会话
    out : 输出语句
    response : 响应结果
    page : 类似于this
    pageContext : 有效范围只在当前的jsp页面上
    application: ServletContext
    config : servlet的数据
    exception: 异常
    作用域

    pageContext :只在当前页面有效
    request : 请求期间有效
    session: 会话期间有效
    application : 程序运行期间有效

  • 相关阅读:
    物联网的挑战
    【Linux】进程控制 —— 进程创建/终止/等待
    线程详细解析
    【开发教程10】疯壳·开源蓝牙智能健康手表-OTA镜像制作及下载技术文档
    c#文件读写
    脚本关闭8090端口
    docker入门(一):在centOS虚拟机上安装docker
    492.构造矩形
    基于FPGA MIPS CPU设计学习(1)
    openGauss Meetup(杭州站)全程精彩回顾
  • 原文地址:https://blog.csdn.net/qq_55691662/article/details/126856828