web-01

<--做笔记使用,不做参考-->

1、Servlet是用于开发web项目的技术。是一个接口,自定义的类继承HttpServlet类之后变成一个servlet。Servlet可以对web浏览器或者其他HTTP客户端程序发出的请求进行处理。

每次写完一个Servlet类之后都要在web.xml中注册一个servlet才能使用。<Servlet></Servlet>   <ServletMapping></ServletMapping>

2、Servlet客户端请求的步骤及处理流程

(1)首先用户通过单击一个url链接来向Servlet发起请求。

(2)Web服务器接收到请求之后,会把该请求交给相应的容器进行处理,此时容器会创建两个对象:HttpServletResponse和HttpServletRequest。

(3)容器根据请求的url信息找到对应的Servlet,然后针对该请求创建一个单独的线程,同时把第2)步中创建的两个对象以参数的形式传递到新创建的线程中。

(4)容器调用Servlet的service()方法来完成对用户请求的响应,service()方法会调用doPost()或者doGet()方法完成具体的响应任务,同时把生成的动态页面返回给容器。

(5)容器把响应信息组装成HTTP格式返回给客户端,此时,线程运行结束,同时删除2)步创建的两个对象。
原文链接:https://blog.csdn.net/Dangsir666/article/details/90340896

3、请求和相应的方法

request方法列举:
request.getCharacterEncoding() // 获取字符编码
request.getContentLength()// 返回请求体内容的长度
request.getContentType() // 获取内容类型
request.getContextPath() // 获取上下文路径,就是"/"+工程名
request.getMethod() // 获取请求方式获取请求方式(GET与POST为主,也会有PUT、DELETE、INPUT)
request.getRequestedSessionId() // 获取sessionId
request.getRequestURI() // 获取"/"+工程名+请求路径
request.getRequestURL() // 获取完整的请求地址,不带queryString
request.getServletPath() // 获取请求路径
request.isSecure() // 获取此请求是否使用安全协议(比如https)

response方法列举:
setContentType() 告知浏览器数据类型 
setCharacterEncoding() 设置Response的编码方式 
setHeader() 设置消息头
setIntHeader() 通知浏览器在给定的时间后刷新,时间以秒为单位 
setDateHeader() 处理页面缓存,防止JSP或者Servlet中的输出被浏览器保存在缓冲区中。 java中一般设置为response.setDateHeader("Expires", 0) 与jsp中response.setDateHeader("Expires", -1)效果一致 
setStatus() 设置相应状态码 
sendError() 返回服务器的预设错误网页并显示错误信息。response.sendError(404)返回的Content-Type:text/html 
sendRedirect() 重定向页面 
getOutputStream() 获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在) 
getWriter() 获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在) 
addCookie() 添加Cookie encodeURL() 对给定的url进行编码,以用于sendRedirect方法; 如果不需要编码,则直接返回(未经修改的)url。 
encodeRedirectURL() 都对url附加上jsessionid参数进行了处理,如果需要,则在url的 path后面附加上;jsessionid=xxx;如果不需要则直接返回传入的url。

原文链接:https://blog.csdn.net/weixin_39352976/article/details/79402989

4、9大内置对象

pageContext  存东西

request  存东西

response

session  存东西

application  存东西

config

out

page

exception

获取web开发的常用对象

pageContext.setAttribute("name","licunzhi");保存的数据只能在一个页面中有效

request.setAttribute("name","licunzhi");保存的数据旨在一次请求中有效,请求转发会携带这个数据

session.setAttribute("name","licunzhi");保存的数据只会在一次会话中有效,从打开浏览器到关闭浏览器

application.setAttribute("name","licunzhi");保存的数据只在服务器中有效,从打开服务器到关闭服务器

应用场景:

request:客户端向服务器端发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的

session:客户端向服务器发送请求,产生的数据,用户用完一会还有用的,比如:购物车

application:客户端向服务器端发送请求,产生的数据,一个用户用完了,其他用户可能还要用,比如:聊天数据

5、EL表达式  ${}

需要导包,jstl,standard

获取数据

执行运算

6、浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet

JSP最终也会被转换成为一个Java类

JSP本质上就是一个servlet

在jsp页面中只要是Java代码就会原封不动的输出

如果时html代码就会被转为out.write("<html> ");这样的格式输出到前端

 7、jsp表达式

<%--JSP表达式作用:用来将程序的输出,输出到客户端--%>
<%=变量或者表达式%>
例如<%=new Date()%>
JSP脚本片段:
<%
    int i =0;
%>
<hr>
<%
    for (int j = 0; j <3 ; j++) {
        out.write("1---0");
    }
    out.write(i);
%>
JSP声明会被编译到JSP生成的Java类中,其他的就会被生成到_jspService方法中


在JSP中嵌入Java代码即可
<%%>
<%=%>
<%!%>
<%--注释--%>

JSP指令

<%@page args...%>   //指定页面类型,例如404 500  <%@ page errorPage="error/500.jsp" %>

拼接网页,网页很多都是共用头部和底部,所以每次只需要写中间的主体内容就好了

<%@include file="common/header.jsp"%>

网页主体

<%@include file="common/footer.jsp"%>

JSP<标签>来拼接网页

<%jsp:include page="/common/header.jsp"%>

网页主体

<%jsp:include page="/common/footer.jsp"%>

拼接网页的时候 Java代码要注意变量不要重复,因为他们拼接之后就相当于是同一个程序中的代码

8、JSP标签   JSTL标签  EL表达式

JSP标签

<jsp:forward page="**.jsp">转发

<jsp:param name="" value="">参数   键值对

9、Javabean

实体类:Javabean有特定的写法:必须要有一个无参构造 属性必须私有化  必须有对应的get/set方法  

实体类一般用于对应数据库中的字段

ORM:对象关系映射:表---->类  字段---->属性  行记录---->对象

   private int id;
    private String name;
    private int age;
    private String address;

    public person(){

    }
    public person(int id,String name,int age,String address){
        this.id=id;
        this.name=name;
        this.age=age;
        this.address=address;
    }

 10、MVC三层架构

MVC---->modle view controller  模型 视图 控制器

 现在的MVC架构:

 Model  业务处理:业务逻辑(Service)

    数据持久层:CRUD(Dao)

View:展示数据

     提供链接发起servlet请求(a,form,img...等等设置a标签跳转)

Controller(当前的学习阶段Controller就是servlet)

    接收用户的请求:request可以从请求中拿到    请求参数,session信息...等等

    交给业务层处理对应的代码

    控制视图的跳转

最简单的例子就是登录,登录成功则为下图中的操作反向处理一次

11、过滤器filter

//web.xml中的代码
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>se</servlet-name> <servlet-class>space.urbeautiful.Filter.testFilter</servlet-class> </servlet> <servlet-mapping> <servlet-name>se</servlet-name> <url-pattern>/servlet/a</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>se</servlet-name> <url-pattern>/a</url-pattern> </servlet-mapping> <filter> <filter-name>filter</filter-name> <filter-class>space.urbeautiful.Filter.filter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name>
      //只要是/servlet的任何请求都会经过这个过滤器 <url-pattern>/servlet/*</url-pattern> </filter-mapping> </web-app>
//Filter中的代码
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); servletResponse.setContentType("text/html"); filterChain.doFilter(servletRequest,servletResponse); }
//Servlet中的代码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("你好 未来"); }

将设置字符集解决乱码问题放在过滤器中过滤,请求的时候会过滤一次,响应回去的时候也要过滤一次

tomcat启动的时候,filter自动初始化,在tomcat关闭的时候自动销毁过滤器

/servlet/*   即将servlet下面的所有都过滤,不建议直接/*  每个包有每个包的作用,要有分别的过滤器

12、监听器(awt中用的较多  各种监听器) 暂时不学

13、下一期过滤器及其他

原文地址:https://www.cnblogs.com/jzspace/p/13122875.html