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
    获取所有的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);
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号