一。Servlet的配置
方式一: 完全匹配 只能通过/demo01 来访问这个资源
<url-pattern>/demo01</url-pattern>
<url-pattern>/demo011</url-pattern>
方式二: 目录匹配, 通配符 *
<url-pattern>/*</url-pattern>
<url-pattern>/hi/*</url-pattern>
方式三: 后缀匹配
<url-pattern>*.do</url-pattern>
特殊的匹配: / 所有资源,默认的配置,缺省的配置
<url-pattern>/</url-pattern>
2.欢迎页面设置
设置应用的默认首页
<welcome-file-list>
<welcome-file>demo01</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<?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">
<welcome-file-list>
<!--设置欢迎目录。hi为pattern-->
<!-- <welcome-file>hi</welcome-file>-->
<!--设置欢迎目录welcom.html为自己写的的html文件-->
<!-- <welcome-file>/welcom.html</welcome-file>-->
<!--设置欢迎目录index.jsp为web自己的jsp文件-->
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
<!--参数-->
<context-param>
<param-name>driver</param-name>
<param-value>给个类的地址day02.hello</param-value>
</context-param>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>day02.hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<!--访问地址方式1目录匹配-->
<!-- <url-pattern>/*</url-pattern>-->
<!--访问方式2完全匹配-->
<url-pattern>/hi</url-pattern>
<!--访问方式3后缀匹配-->
<!-- <url-pattern>*.do</url-pattern>-->
<!--特殊匹配 / 访问所有资源-->
<!-- <url-pattern>/</url-pattern>-->
</servlet-mapping>
</web-app>
二。ServletContext
ServletContext 对象, 应用上下文, 一个应用中只有一个ServletContext对象
1.获得 servlet对象(this), request对象, ServletConfig对象
2.作用
获得虚拟目录
获得应用的初始化参数
获得应用文件的绝对路径
作为域对象
3.生命周期
创建: 服务器启动
销毁: 服务器关闭
4.域对象: 存数据, 取数据 Map<String, Object>
范围: 整个应用运行期间, 所有客户端和所有资源共享
setAttribute(“name”, Object)
getAttribute(“name”)
removeAttribute(“name”)
统计网站的访问量
//获得ServletContext对象()
ServletContext application = this.getServletContext();
//作用一:获得应用全局参数
String drivervalue=application.getInitParameter("driver");//("driver")是键param-name。返回值是值param-value
System.out.println(drivervalue);
//作用二:获得虚拟目录
String path = application.getContextPath();
System.out.println(path);//web02_war_exploded2
//作用三:获得应用绝对路径
String apath = application.getRealPath("/WEB-INF/a.txt");
String bpath = application.getRealPath("/b.txt");
String cpath = application.getRealPath("/WEB-INF/classes/c.txt");
System.out.println(apath);
System.out.println(bpath);
System.out.println(cpath);
/*
D:\Javaobject\javaweb\out\artifacts\web02_war_exploded2\WEB-INF\a.txt
D:\Javaobject\javaweb\out\artifacts\web02_war_exploded2\b.txt
D:\Javaobject\javaweb\out\artifacts\web02_war_exploded2\WEB-INF\class\c.txt
*/
//作用三:设置域对象
application.setAttribute("name","123123");
------------------------------------------------------
ServletContext application = this.getServletContext();
//访问域对象
Object namevalue=application.getAttribute("name");
response.getWriter().println(namevalue);
//删除域对象
application.removeAttribute("name");
Object namevalue2=application.getAttribute("name");
response.getWriter().println(namevalue2);
-----------------------------------------------------
三。request
@WebServlet("/demo3")
public class demo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//请求行操作
//1.获得请求方式
String method=request.getMethod();
System.out.println(method);//GET
//2.获得请求url
String uri = request.getRequestURI();
String url = request.getRequestURL().toString();//request.getRequestURL()返回的是StringBuffer类型
System.out.println("uri:"+uri);//uri:/web02_war_exploded2/demo3
System.out.println("url:"+url);//url:http://localhost:8080/web02_war_exploded2/demo3
//3.获得get请求参数(如果是post请求方式请求要在浏览器中看请求;get请求方式会在此获得)
String queryString=request.getQueryString();
System.out.println(queryString);//username=11211&password=1111
//4.获得协议版本
String address=request.getProtocol();
System.out.println(address);//HTTP/1.1
System.out.println("------------------------------------");
//请求头操作
//获得客户端信息
String userAgent = request.getHeader("User-Agent");
System.out.println("用户信息:"+userAgent);//Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
//获得链接来源
String referer = request.getHeader("referer");
System.out.println("链接来源:"+referer); //http://localhost:8080/web02_war_exploded2/form.html
//枚举头链接
Enumeration<String> heardNames=request.getHeaderNames();
while (heardNames.hasMoreElements()){
System.out.println("heardnames:"+heardNames.nextElement());
}
// //防盗链操作(获得链接的referer来源和想比较的域名比较是否相同)
// if(request.getHeader("referer").startsWith("https://www.youku.com/")){
// response.getWriter().println("start play");
// }else {
// response.getWriter().println("thief");
// }
//post默认字符集是ISO8859-1
request.setCharacterEncoding("UTF-8");//post可直接设置字符集
//获得请求参数
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println("username"+username);
System.out.println("password"+password);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//get默认字符集不一定,此处为utf-8
String method=request.getMethod();
System.out.println(method);//获得方式get/post
//获得请求参数1
String username=request.getParameter("username");
String password=request.getParameter("password");
System.out.println("username"+username);
System.out.println("password"+password);
//获得请求参数2:一个name对应多个value,如checkbox复选框
String[] hobby=request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobby));//[basketball, football]
//获得请求参数3:value是日期.会自动转成YYY-MM-dd
String birth=request.getParameter("birth");
System.out.println(birth);//2020-08-06
//获得亲求参数4:获得所有参数并封装成map,此处map是ParameterMap
Map<String, String[]> map = request.getParameterMap();
map.entrySet().stream().forEach((entry)->{
System.out.println(entry.getKey()+":"+entry.getValue());
});
}
}
四。将注册页面信息封装成对象写入数据库
用到BeanUtils工具jar包
//将注册信息加入数据库方法一:
Map<String, String[]> map = request.getParameterMap();
User user=new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
UserDao userDao=new UserDao();
userDao.insertUser(user);