其他分享
首页 > 其他分享> > web-day02

web-day02

作者:互联网

Servlet-day02

一、工程目录和部署目录

工程目录:写代码的位置
src
web:
部署目录:启动服务器访问当前项目的位置
day12Morning_war_exploded
项目名
--WEB-INF
-- classes 存储的是java编译后的代码
-- web.xml
--静态资源
.html文件
如果工程目录新增的静态资源 一直无法同步到部署目录
1.重启服务器
2.关闭服务器 build --> build artifacts ---> 项目 ---> rebuild

二、ServletConfig的使用

1.主要的方法

方法名 作用
getServletName() 获取<servlet-name>HelloServlet</servlet-name>定义的Servlet名称
getServletContext() 获取ServletContext对象
getInitParameter() 获取配置Servlet时设置的『初始化参数』,根据名字获取值
getInitParameterNames() 获取所有初始化参数名组成的Enumeration对象

2.设置servlet初始化值的方式

①在web.xml中设置初始化值

<!--在servlet中配置其初始值-->
 <servlet>
        <servlet-name>SS</servlet-name>
        <servlet-class>com.atguigu.servlet.SecondServlet</servlet-class>
        <init-param>
            <param-name>uname</param-name>
            <param-value>张三</param-value>
        </init-param>
    </servlet>

②获得初始化参数

public void init(ServletConfig servletConfig) throws ServletException {
	//获取指定的
    servletConfig.getInitParameter("uname");//张三
    //获取所有的初始化参数的名字
     Enumeration<String> names = servletConfig.getInitParameterNames();

    }

三、Servlet体系结构

GenericServlet implements Servlet, ServletConfig, Serializable
HttpServlet extends GenericServlet

创建Servlet时 继承 HttpServlet 需要处理什么业务 重写什么方法
doGet()
doPost()

注意:以后使用HttpServlet即可

四、ServletContext的概念

1.定义

服务器为其部署的每一个应用(项目)都创建了一个ServletContext对象。ServletContext属于整个项目的,该项目中的所有Servlet都可以共享同一个ServletContext对象

2.创建ServletContext对象的方式

//方式一
ServletContext s1 = getServletContext();

//方式二
ServletContext s2 = getServletConfig().getServletContext();

//方式三
ServletContext s3 =  requset.getServletContext();

3. ServletContext获取全局的初始化参数

①在web.xml中设置全局初始化值

<!--    配置全局初始化参数-->
    <context-param>
        <param-name>admin</param-name>
        <param-value>123456</param-value>
    </context-param>

②在java代码中获得指定的值或者添加值

//1.获取ServletContext对象
ServletContext s1 = getServletContext();

//2.获取值
s1.getInitParameter("admin");//123456

//3.全局域对象 容器 可以向容器中插入值 在当前项目的任意位置都可以获取
s1.setAttribute("uname","安其拉");
s1.getAttribute("uname");//安其拉


4.获取请求资源所处的真实路径(在部署目录中)

//1.获得ServletContext对象
ServletContext s1 = getServletContext();
//2,使用getRealPath() 参数传入 工程目录中的资源地址  返回的是 部署目录中的资源地址
String realPath = s1.getRealPath("/img/g1.jpg");
System.out.println("realPath = " + realPath);

五、配置Sevlet匹配路径

idea自动创建Servlet
右键 --->new ---> create new Servlet

1.一个Servlet可以设置多个匹配路径

映射路径的作用

Servlet的映射路径是提供一个让别人能够访问该Servlet的路径,例如Servlet的映射路径是"/hello",那么在浏览器上访问该Servlet的路径是http://localhost:8080/项目部署名/hello

<servlet-mapping>
                <servlet-name>SecondServlet</servlet-name>
                <url-pattern>/second</url-pattern>
                <url-pattern>/s</url-pattern>
            </servlet-mapping>

2.完全匹配路径

完全匹配 必须在地址栏写完整路径
            <url-pattern>/second</url-pattern>
            <url-pattern>/first</url-pattern>
            <url-pattern>/first/f</url-pattern>

3.模糊匹配路径

http://localhost:8080/day12Servlet_war_exploded/third
http://localhost:8080/day12Servlet_war_exploded/third/abc/cba

<url-pattern>/third/*</url-pattern>

4.后缀名匹配路径

          http://localhost:8080/day12Servlet_war_exploded/a.do
          http://localhost:8080/day12Servlet_war_exploded/a/abc.do
          http://localhost:8080/day12Servlet_war_exploded/abc/cc.action

          <url-pattern>*.do</url-pattern>
          <url-pattern>*.action</url-pattern>

六、路径

1.url 同一资源定位符

协议 主机名 端口号 应用名/项目名 资源名
http://localhost:8080/day12Servlet_war_exploded/success.html
既可以访问本项目资源 也可以访问其他项目资源

客户端访问服务器的资源,或者一台服务器中要访问另外一台服务器的资源都是通过url访问

2.uri 同一资源标识符

/应用名/资源名

使用uri访问本项目资源

在同一个项目的某个资源中访问该项目中的另一个资源

3.相对路径

相对自身资源 以自身资源为基础查找其他的资源
注意: 相对路径 不是以/开头

4.绝对路径

从服务器的根目录开始查找(推荐写法)
/应用名(项目名)/资源名

   ```http

成功界面

```

/:服务器的根目录
localhost:8080
注意: 永远以 "/" 开头
/:代表访问服务器的根目录
/应用名(项目名)/资源名

5.获取应用名、项目名

String path = request.getContextPath(); 获取 /应用名

七.请求

​ 请求时会携带大量的数据 服务器会将 请求行 请求头 请求体封装为一个请求对象。

1.获取请求行

​ //获取请求方式
​ String method = request.getMethod();
​ //获取uri /day12Request/first
​ String requestURI = request.getRequestURI();
​ //获取协议 HTTP/1.1
​ String protocol = request.getProtocol();

2.获取请求头

​ //获取请求头信息
​ String agent = request.getHeader("User-Agent");
​ String referer = request.getHeader("Referer");

​ //获取所有请求头key

Enumeration<String> headerNames = request.getHeaderNames();

3.获取请求体(参数)

​ 一个name 对应一个值
​ String uname = request.getParameter("uname");
​ 一个name 对应多个值
​ String[] hobbies = request.getParameterValues("hobby");
​ 获取所有的name
​ Enumeration parameterNames = request.getParameterNames();
​ 获取所有的name和value 放到map内
​ Map<String, String[]> map = request.getParameterMap();

4.post 请求乱码

​ request.setCharacterEncoding("utf-8");

5.将表单数据封装为对象 使用Beanutils

1.在 web-inf 下 新建 lib 文件夹
线下_JavaWeb【V4.0】\01_resources\03_BeanUtils

2.将beanutils的jar包拷贝进去

3.右键 add as library

4.实体类的属性名 要与 表单的 name 名相同

5.//0.获取所有的请求参数
Map<String, String[]> map = req.getParameterMap();
//1.创建User对象
User user = new User();

//2.使用BeanUtils 完成数据填充

BeanUtils.populate(user, map);

标签:web,String,day02,request,获取,ServletContext,Servlet,资源
来源: https://www.cnblogs.com/gezigkd/p/16221965.html