Apache服务器
一.Servlet:Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件.
1).Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,所有的HTTP头数据读可以通过request对象调用对应的方法查询到。
2).Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象,通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器
3).实现Servlet的三个方法一;Servlet有五个方法需要覆写
public class MyServlet implements Servlet {
private int count = 0; //Servlet 是线程不安全的
//1.等级一:不在Servlet中创建全局变量
//2.等级二:在Servlet中创建无状态的全局变量(没有属性的对象)
//3.等级三:创建有状态的全局变量,但是状态都是只读的
@Override
public void init(ServletConfig servletConfig) {
System.out.println("init"); } //初始化方法
@Override
public ServletConfig getServletConfig () {
return null; } //此方法需手动调用,返回Servlet的配置信息
@Override
public void service (ServletRequest req,ServletResponse resp) {
System.out.println("service"); } //此方法是提供服务的,每一次访问Servlet都会执行此方法
@Override
public String getServletInfo () {
return "啥都行"; } //此方法获取Servlet信息,没有用,手动调用
@Override
public void destroy () {
System.out.println("destroy"); } //此方法在servlet被销毁之前调用
4).实现Servlet的方法二,继承GenericServlet覆写service方法即可
public class MyServlet extends GenericServlet {
@Override
public void service (ServletRequest req,ServletResponse resp) {
PrintWriter pw = resp.getWriter();
} //获取写流对象
5).实现Servlet的方法三.继承HttpServlet类,覆写doGet和postGet方法,从数据库获取数据
public class MySQLServlet extends HttpServlet {
//super.doGet(req, resp); 会抛405异常,所以为了Servlet支持get请求,则需覆写doGet方法,并且不能调用父类的doGet()方法
@Override
protected void doGet (HttpServletRequest req,HttpServletResponse resp) {
resp.setContentType ("text/html;charset=utf-8");//告知浏览器解码的格式
PrintWriter writer = resp.getWriter();//获取写(输出)对象
Class.forName("com.mysql.jdbc.Driver"); //加载驱动
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/lan_ou","root","123456");//连接数据库
String sql = "SELECT * FROM stu";//sql语句
PreparedStatement statement = conn.prepareStatement(sql);//创建执行sql语句的对象
ResultSet rs = statement.executeQuery();//执行查询语句,返回结果集
rs.next();//移动到数据的第一行
String name = rs.getString("sname"); //通过列名获取数据
Integer age = rs.getInt("age");//通过列名获取数据
writer.println(name); //输出数据
writer.println(age); //输出数据
5).javaWeb四大域对象之ServletContext
public class MyServlet extends HttpServlet { //获取网页被访问的次数
@Override
//1.ServletContext 是JavaWeb四大域对象之一,有时我们也叫做app/application
//2.特点:1.所有的servletContext无论在哪都是同一个对象,那么可以做多个servlet传值/记录整个网站的信息;特点:2.寿命极长:tomcat启动,这个对象就被创建,tomcat停止,这个对象就会销毁
protected void doGet (HttpServletRequest req,HttpServletResponse resp) {
ServletContext app = getServletContext();//创建ServletContext域对象
Integer count = (Integer) app.getAttribute ("counts");//通过键值对获取值
if(count == null) { //初始值为null
count = 1;
}else { count++; }
app.setAttribute("counts",count);//通过键值对赋值给key
PrintWriter writer = resp.getWriter();//创建输出对象
writer.println(count); //输出数据
6).利用apache封装好的commons-io包
public class PathServlet extends HttpServlet{
@Override
protected void doGet (HttpServletRequest req,HttpServletResponse resp) {
resp.setContentType ("text/html;charset=utf-8");//告知浏览器解码的格式
ServletContext app = getServletContext();//创建ServletContext域对象
PrintWriter writer = resp.getWriter();//创建输出对象
InputStream is = app.getResourceAsStream("error.html");//获取输入流
//commons的jar包继承好了IO流的方法,不用再写复杂的IO流代码了
String html = IOUtils.toString(is);//windows系统需要多一个参数utf8
writer.println(html);
二.注册Servlet
1.基本格式
<servlet>
<servlet-name>name</servlet-name> //servlet指定的名字
<servlet-class>com.lanou3g.code0509.MyServlet</servlet-class> //指定哪个servlet
</servlet>
<servlet-mapping> //映射
<servlet-name>name</servlet-name> //名字
<url-pattern>/hello</url-pattern> //对应的网址
</servlet-mapping>
2.一个servlet可以配置多个路径,这些路径都会生效
<url-pattern>/your</url-pattern>
<url-pattern>/her</url-pattern>
3.路径匹配:只要前半段的路径匹配上了,后半段可以随意,即*代表任意字符
<url-pattern>/my/*</url-pattern>
4.后缀匹配:只要最后是以.action结尾的就能匹配
<url-pattern>*.action</url-pattern>
5.通配:所有url都会被匹配到
<url-pattern>/*</url-pattern>
* 叫做通配符,表示任意数量的任意字符,注意*要么出现在开头,要么出现在结尾,一定不会出现在中间
6.启动时自动加载配置文件
<load-on-startup>0</load-on-startup>
7.加载404页面
<error-page>
<error-code>404</error-code> //404表示出错码
<location>/error4040</location> //当出现这个404错误时去往的页面
</error-page>
三.文件位置
1.jar包放在WEB-INF包下
2.html文档放在web包下