Servlet小知识

来源:互联网 发布:快走丝编程教学视频 编辑:程序博客网 时间:2024/06/10 00:17
1.搞定启动问题fail to start,双击Servers下的Tomcat,勾选Publish module contexts to seperate XML files
2.如果出现映射相同,那是因为表单中action=“XXX”,XXX与Src目录下的某个包里的Servlet文件名字相同了,不需要重复声明
只需要把配置文件的<Servlet>和<Servlet-mapping>注释掉
form action=“XXX”到一个映射的Servlet-mapping的url-pattern中的“/XXX”,它对应着一个Servlet-name,url-pattern根据servlet-name去找Servlet
中的servlet-name,Servlet中的servlet-name,对应着一个具体的Servlet
<servlet>
  <servlet-name>LoginServlet1</servlet-name>
  <servlet-class>com.geek99.demo.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>LoginServlet1</servlet-name>
  <url-pattern>/LoginServlet1</url-pattern>
  </servlet-mapping>
  action映射到4,4找3,3找1,1找2,当然action中Servlet目标在Src包里有的话就不要配置文件了
3.HttpServletRequest请求    javax.servlet.http.HttpServlet;
  HttpServletResponse响应
      在doGet中
  PrintWriter out = resp.getWriter();能够给用户返回信息
      如果是get方法提交的,执行Servlet中的doGet方法
4.XML中能设置初始化参数
  <context-param>
  <param-name>name/param-name>
  <param-value>value</param-value>
  </context-param>
Servlet能获取到这个参数
String str = this.getServletContext().getInitParameter("name");
sop(str);//value
5.页面重定向
1.一般在doGet方法中或者doPost方法中
response.sendRedirect("http://www.xxx.com");//1.响应客户端,转发到新页面
PrintWriter out = response.getWriter();//自己先回应客户端一些话


//2.请求到File1.html,并且把自己的内容也带上
out.print("<h1>loginServlet</h1>");
request.getRequestDispatcher("File1.html").include(request, response);


//3.直接请求到新页面,不管自己的话
request.getRequestDispatcher("File1.html").forward(request,response);



6. 如果表单提交方式是doPost,向指定Servet提交则服务器端会显示
doPost run...
dsas
323
reading
swiming
主要代码是String username=request.getParameter("username");
 String [] values = request.getParameterValues("hobby");
 接下来能在这个java代码中执行查询数据库的操作,嘎嘎!
服务器端 Servlet代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost run...");
String username=request.getParameter("username");
String password=request.getParameter("password");
String [] values = request.getParameterValues("hobby");
System.out.println(username);
System.out.println(password);
for(String s : values){
System.out.println(s);
}
}

7.request.getHeaderNames 返回一个Enumeration集合,里面装的是请求行请求头的名字,
迭代这个Enumeration
  对应 的值可以通过request。getHeader(name)获取
8.设置响应给客户的的类型
Excel类型
response.setContentType("application/vnd.ms-excel");
PrintWriter out = response.getWriter();
out.println("\tQ1\tQ2\tQ3\tQ4\tTotal");
out.println("Apples\t78\t87\t92\t29\t=SUM(B2:E2)");
out.println("Oranges\t77\t86\t93\t30\t=SUM(B3:E3)");

    获取图片
    response.setContentType("image/jpeg");
    InputStream in = this.getClass().getClassLoader()
.getResourceAsStream("3.jpg");
byte[] buf = new byte[in.available()];
OutputStream out = response.getOutputStream();
in.read(buf);
out.write(buf);
in.close();
out.close();
 刷新时间
  response.setHeader("refresh","1");
PrintWriter out = response.getWriter();
out.println(new Date().toLocaleString());
9.cookie是保存在本地的一些键值对,用来标识一些用户信息
创建cookie Cookie c = new Cookie("name","value");
 c.setMaxAge(60*60);//60分钟
添加              response.addCookie(c);
获取  Cookie [] cs = request.getCookies();
 for(Cookie cook : cs){
  String name = cook.getName();
  String value = cook.getValue();
 }
 一般用于判断新用户,设置一个标记,如果刚开始getCookies()里没有任何Cookie,执行创建Cookie并添加
 进response,下次在请求页面的时候就说welcome back
10.Session获取
HttpSession session = request.getSession();
session.setAttribute("session_name","session_value");
获取session值
HttpSession session = request.getSession();
String value = (String)session.getAttribute("session_name");
11.Session登录实例
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username);


UserDao dao = new UserDaoImpl();//可以用工厂生产dao接口的实现类
User user = dao.login(username, password);//数据库操作,根据查询到的结果创建一个user并返回
System.out.println(user);

if (user != null) {
HttpSession session = request.getSession();
session.setAttribute("userSession", user);


request.getRequestDispatcher("welcome.jsp").forward(request,
response);
}else{
request.getRequestDispatcher("Login.html").forward(request, response);
}
}
//1.在页面中向Servlet发出请求,由于Src中包非常的多,所以必须通过web.xml的配置文件获取Servlet
//2.Servlet获取页面的参数,并控制接下来应该干什么,,他指挥dao去执行login方法,返回一个user,
然后去欢迎页面。并保存一些参数信息,如请求拿到Session,保存数据库中用户的信息,
代码HttpSession session = request.getSession();
  session.setAttribute("UserSession",user);//user通过数据库拿到对象
所以欢迎界面能拿到这些信息
代码${UserSeesion.getName()}
12.作用域
ServletContext 作用域 是全局的,服务器开启,它就存在,服务器关闭,它才释放(感觉是配置文件)
HttpSession在一个浏览器,当前会话里面有效
request仅在当前请求中有效。可以通过getRequestDispatcher("html").forward(request,response);延续
它们设置共享变量的方式是相同的,setAttribute("name","value");
获取的方法是 getAttribute("name")
获取它们的方法 ServletContext  ctx = this.getServletContext();
HttpSession session = request.getSession();
request来自于daGet(HttpServletRequset request,HttpSerlvetResponse response);
String ctx_value = (String)ctx.getAttribute("name");
String session_value = (String)session.getAttribute("name");
String request_value = (String)request.getAttribute("name");
13.过滤器filter
首先,一个静态页面向一个 Servlet发送请求,在Servlet中
protected void doGet(HttpServletRequest request, HttpServletResponse response){
System.out.println("do get run");
HttpSession session = request.getSession();
session.setAttribute("username", "admin");
response.sendRedirect("admin/admin.html");//一旦服务器接受到访问受保护文件请求,就执行过滤器
}
Servlet从request请求对象中获取到Session对象,并把Session中保存一个用户的值,为username--admin
并重新请求一个守权限保护的页面admin/admin.html
过滤器怎么写呢?在Src中创建一个类,实现Filter,重写doFilter方法
public class MyFilter implements Filter {
//java的普通类,不是Servlet
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("MyFilter run");
HttpServletRequest reuqest = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
HttpSession session = reuqest.getSession();
if(session.getAttribute("username")==null){
response.sendRedirect("error.html");
}else{
String value = (String)session.getAttribute("username");
System.out.println(value);
if(value.equals("admin")){
chain.doFilter(reuqest, response);//继续执行下去,访问受保护文件吧
}
else{
System.out.println("普通权限不能访问");//当然,这显示在服务器端的控制台上
}
}
配置文件web.xml
就像Servlet一样
<filter>
  <filter-name>filter</filter-name>
  <filter-class>com.xxx.demo.MyFilter</filter-class>
  //com.xxx.demo包里的MyFilter过滤器规则,这里只是指定一旦请求这些受保护文件,怎么过滤?指定一个过滤器
  </filter>
  <filter-mapping>
  <filter-name>filter</filter-name>
  <url-pattern>/admin/*</url-pattern>//请求admin包中的任意资源都需要进行过滤,即获取Session中的username的身份
  </filter-mapping>
14.servlet的作用
响应用户请求
获得表单数据
调用业务逻辑
页面导航,成功去哪个页面,失败跳转哪个页面
MVC
M:业务逻辑层 dao,模型
V:页面
C:Servlet,控制器,获取前台表单数据,指挥模型根据前台数据查询并获取后台数据,并指挥调用相关跳转页面功能
原创粉丝点击