一个简单的servlet服务器

来源:互联网 发布:实现rsaq算法加密实例 编辑:程序博客网 时间:2024/05/16 14:04

之前做了爬取电影天堂的爬虫.将电影天堂爬取到数据库中,于是想做一个网站用于在线查询电影信息,大概学习了一下,做了一个小的servlet

需求:

服务器接收来自网页的get请求

提取电影名,在数据库查询通过响应写回

用到了自己写的一个连接池的工具类,dbutils包,c3p0jar包等

服务器端数据库查询模块,在服务器端查询数据库信息,返回一个list<bean>对象

package Test;


import java.sql.SQLException;
import java.util.List;


import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;




public class UserDao {


public List<move> searchmovebymovename(String movename) {
// TODO Auto-generated method stub
//1.创建queryrunner
QueryRunner queryrunner =  new QueryRunner(DataSourceUtils.getDataSource());
//2.编写sql语句
String sql = "select * from moves where movename like ?";
//3.执行sql语句
List<move> moves = null;
try {
moves = queryrunner.query(sql, new BeanListHandler<move>(move.class),"%"+movename+"%");
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库操作发生了问题");
}
return moves;
}
}

自定义的bean对象,用于封装电影信息

package Test;


public class move {
private int id;
private String Classfication;
private String movename;
private String role;
private String introduce;
private String titilepicture;
private String introducepicture;
private String address ;
private String douban;
public String getClassfication() {
return Classfication;
}
public void setClassfication(String classfication) {
Classfication = classfication;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getMovename() {
return movename;
}
public void setMovename(String movename) {
this.movename = movename;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getIntroduce() {
return introduce;
}
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
public String getTitilepicture() {
return titilepicture;
}
public void setTitilepicture(String titilepicture) {
this.titilepicture = titilepicture;
}
public String getIntroducepicture() {
return introducepicture;
}
public void setIntroducepicture(String introducepicture) {
this.introducepicture = introducepicture;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getDouban() {
return douban;
}
public void setDouban(String douban) {
this.douban = douban;
}
}

user类,用于封装提供给用户的方法

package Test;


import java.sql.SQLException;
import java.util.List;


public class User {
//用户查找方法
public List<move> searchMove(String movename){
return new UserDao().searchmovebymovename(movename);
}
}

servlet类

package Test;


import java.io.IOException;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;


import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;




public class searchservlet extends HttpServlet {
/**

*/
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
ServletContext con = getServletContext();
con.setAttribute("count", 0);
}
@Override
protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException{
req.setCharacterEncoding("GBK");
resp.setContentType("text/html;charset=GBK");
String movename = req.getParameter("movename");
System.out.println(movename);
QueryRunner queryrunner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from moves where movename like ?";
List<move> moves = new User().searchMove(req.getParameter("movename"));
if(moves != null&&moves.size() != 0){
for(move amove:moves){
resp.getWriter().print("电影名称:"+amove.getMovename());

resp.getWriter().print("电影主演:"+amove.getRole());
resp.getWriter().print("<img src="+"\""+amove.getTitilepicture()+"\">");
resp.getWriter().print("下载地址:"+amove.getAddress().replace(":~~~~:", ""));
ServletContext con = getServletContext();
Integer count = (Integer)con.getAttribute("count");
count++;
con.setAttribute("count", count);
}
}else{
resp.getWriter().print("没有找到电影,三秒之后跳转...");
resp.setHeader("refresh", "3;url=/pro3/1.html");
}
}
}

配置文件为

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>pro3</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  <servlet-name>hellow</servlet-name>
  <servlet-class>Test.searchservlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>showservlet</servlet-name>
    <servlet-class>Test.showservlet</servlet-class>
  </servlet>


  <servlet-mapping>
  <servlet-name>hellow</servlet-name>
  <url-pattern>/hellow</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>showservlet</servlet-name>
    <url-pattern>/showservlet</url-pattern>
  </servlet-mapping>
</web-app>

其中联系了ServletContext对象的使用方法

ServletContext 代表一个项目的引用,是一个域对象,可以理解为是一个容器

当项目启动的时候,服务器为每一个web项目创建一个该对象

项目一处或者服务器关闭的时候销毁

可以用来存放共享的数据,达到多个servlet通信的目的,比如在上面的searchservlet中获取上下文

可以用来获取文件在服务器上的绝对路径

可以用来获取文件类型

并且在其中写入了一个用于记录查询到的电影总数的变量,可以再另一个servlet中获取这个变量

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html,charset=UTF-8");
ServletContext con = getServletContext();
Integer count = (Integer)con.getAttribute("count");
PrintWriter out = response.getWriter();
out.print(count);
out.close();
}

0 0
原创粉丝点击