jsp表单通过servlet更新数据库的信息并显示,保存的信息位置发生了移位

比如本来是改的密码从1改到111,结果保存的时候,不同输入框的内容位置全部乱掉了,比如输入框A的内容保存到了输入框B上
图片说明
图片说明

我刚接触JSP,请问大大们这是什么原因?
下面是servlet的代码:

 package com.gkd.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.gkd.service.UpdateService;
import com.gkd.vo.UserVo;

/**
 * Servlet implementation class UpdateServlet
 */
@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public UpdateServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");

        String idNum = request.getParameter("idNum");
        String userName = request.getParameter("userName");
        String password = request.getParameter("password");
        String phoneNum = request.getParameter("phoneNum");
        String address = request.getParameter("address");
        String sex = request.getParameter("sex");
        String area = request.getParameter("area");
        String credit = request.getParameter("credit");
        String flg = request.getParameter("flg"); 

        UserVo userVo = new UserVo(idNum, password, userName, phoneNum, address, area, sex, credit);

        UpdateService updateService = new UpdateService();

        UserVo userVo1 = updateService.findUserById(idNum);

        if("preupd".equals(flg)){

            request.setAttribute("userVo", userVo1);
            request.setAttribute("password", userVo1.getPassword());
            request.setAttribute("userName", userVo1.getUserName());
            request.setAttribute("phoneNum", userVo1.getPhoneNum());
            request.setAttribute("address", userVo1.getAddress());
            request.setAttribute("area", userVo1.getArea());
            request.setAttribute("sex", userVo1.getSex());
            request.setAttribute("credit", userVo1.getCredit());    
            request.getRequestDispatcher("/grxx.jsp").forward(request, response);

        }else if("update".equals(flg)){

            boolean b = updateService.saveInfo(userVo);
            String s=null;
            if(b)
            {
                s="修改成功!";
            }
            else
            {
                s="修改失败!";
            }
            request.setAttribute("reminder", s);
            request.setAttribute("userVo", userVo);
            request.setAttribute("password", userVo.getPassword());
            request.setAttribute("userName", userVo.getUserName());
            request.setAttribute("phoneNum", userVo.getPhoneNum());
            request.setAttribute("address", userVo.getAddress());
            request.setAttribute("area", userVo.getArea());
            request.setAttribute("sex", userVo.getSex());
            request.getRequestDispatcher("/grxx.jsp").forward(request, response);
        }       
    }

}

2个回答

这三个顺序要一致

            String idNum = request.getParameter("idNum");
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
    String phoneNum = request.getParameter("phoneNum");
    String address = request.getParameter("address");
    String sex = request.getParameter("sex");
    String area = request.getParameter("area");
    String credit = request.getParameter("credit");
    String flg = request.getParameter("flg"); 


            request.setAttribute("userVo", userVo1);
        request.setAttribute("password", userVo1.getPassword());
        request.setAttribute("userName", userVo1.getUserName());
        request.setAttribute("phoneNum", userVo1.getPhoneNum());
        request.setAttribute("address", userVo1.getAddress());
        request.setAttribute("area", userVo1.getArea());
        request.setAttribute("sex", userVo1.getSex());
        request.setAttribute("credit", userVo1.getCredit());    



                    request.setAttribute("reminder", s);
        request.setAttribute("userVo", userVo);
        request.setAttribute("password", userVo.getPassword());
        request.setAttribute("userName", userVo.getUserName());
        request.setAttribute("phoneNum", userVo.getPhoneNum());
        request.setAttribute("address", userVo.getAddress());
        request.setAttribute("area", userVo.getArea());
        request.setAttribute("sex", userVo.getSex());


            改完之后还不行的话就把这个顺序也该一致了
            UserVo userVo = new UserVo(idNum, password, userName, phoneNum, address, area, sex, credit);

围观一下 谢谢大佬提供的代码

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在MVC模式下将浏览网页的用户信息写入后台数据库的处理流程问题
大家知道,在MVC模式下,是JSP-->SERVLET-->SERVICE-->DAO这种调用关系,就是说针对后台数据库的操作都是在DAO中实现。 有这样一个需求,用户用浏览器访问网页a.jsp,a.jsp非常简单,就是用户访问时显示个hello world,没有任何提交表单的操作。 现在需要获取访问页面的用户的两个信息,一个是IP,一个是user-agent,那么是不是我应该在a.jsp里调用SERVLET,在SERVLET中用request.getHeader之类的方法获得用户信息(IP和user-agent),然后通过调用SERVICE-->DAO来把用户信息写入数据库,写完数据库,SERVLET的任务就完成了,之后没有任何跳转之类的操作。 那么,这种没有提交表单的JSP里怎么调用SERVLET呢?是不是在a.jsp加载页面时用java script的onload中调用SERVLET呢? 总感觉上面的流程有点怪怪的感觉。。。。。 请大神指教,万分感谢!
JSP表单提交给servlet,获取表单数据
在一个JSP表单内有单选框、复选框、输入框等,在servlet获取值,怎么办? 以下的JSP文件大概意思概括如下:从数据库取出所有数据放入Iterator,然后根据每一条数据的类型显示为单选、多选、单选+输入、多选+输入、填空、多行输入。每一个题目的name设为它在数据库的ID。 jsp如下: [code="java"]<!-- 显示问卷内的题目 --> <hr /> <% while (it.hasNext()) { Questions questions = (Questions) it.next(); %> <br /><%=questions.getQ_id()%>&nbsp; <%=questions.getQ_head()%><br /> <% String body = questions.getQ_body(); Vector<String> vector = ParseString.ParseStr(body);//把题目的内容根据换行符分割 String qType = questions.getQ_type().getQt_des(); if (qType.endsWith("单选")) {//若果是单选就依次显示单选选项 for (int i = 0; i < vector.size(); i++) { %> <!--把题目编号作为name传过去 --> <input type="radio" name="<%=questions.getQ_id()%>" value="<%=i%>" /><%=vector.get(i)%><br /> <% } } else if (qType.endsWith("多选")) { for(int i=0;i<vector.size();i++){ %> <input type="checkbox" name="<%=questions.getQ_id()%>" value="<%=i%>" /><%=vector.get(i)%><br /> <% } } else if (qType.endsWith("单选+输入")) { for(int i=0;i<vector.size()-1;i++){ %> <input type="radio" name="<%=questions.getQ_id()%>" value="<%=i%>" /><%=vector.get(i)%><br /> <% } %> <%=vector.get(vector.size()-1)%><br/> <textarea rows="2" cols="20" name="single_in" ></textarea><br /> <% } else if (qType.endsWith("多选+输入")) { for(int i=0;i<vector.size()-1;i++){ %> <input type="checkbox" name="<%=questions.getQ_id()%>" value="<%=i%>" /><%=vector.get(i)%><br /> <% } %> <%=vector.get(vector.size()-1)%><br/> <textarea rows="2" cols="30" name="chect_in" ></textarea><br /> <% } else if (qType.endsWith("填空")) { %> <%=body%><br />请填写答案:<input type="text" name="<%=questions.getQ_id()%>"/><br /> <% } else if (qType.endsWith("多行输入")) { %> <%=body%><br />请填写答案:<textarea rows="5" cols="30" name="<%=questions.getQ_id()%>" ></textarea><br /> <% } %>[/code] servlet文件要获取JSP的数据,但是因为若果题目类型是单选,值只有一个;若是多选,值有多个。一个一个获得很麻烦,所以我就定义一个二维数组,str[i][j],i表示该题目的ID,j表示它的值。无论是单选还是多选都可以。servlet文件如下: [code="java"]int s_id=Integer.parseInt(request.getParameter("s_id"));//获得问卷ID QuestionsDao qDao = new QuestionsDaoImpl(); AnswerSheetDao aDao= new AnswerSheetDaoImpl(); ArrayList<Questions> list = (ArrayList<Questions>) aDao .findAllQueBySurId(s_id);//查询到问卷ID为s_id的所有题目 int count=aDao.CountQueBySurId(s_id);//获得该问卷内题目的个数 //System.out.println(count+"*******count"); for (int i = 0; i < list.size(); i++) { int qID = list.get(i).getQ_id();// 获得题目ID int number = list.get(i).getQ_number();// 获得题目选项个数 String q_id = String.valueOf(qID);// 把ID转换成字符串 String[][] str = new String[count][];// 定义二维数组,因为复选框的值是多个,所以用request.getParameterValues() try { // 这样的话,str[i][j],i表示当前的题目的ID,j就表示题目的value。 str[qID] = request.getParameterValues(q_id); } catch (Exception e) { System.out.println("request.getParameter()出错"); e.printStackTrace(); } } }[/code] 问题出来啦: [code="java"]request.getParameter()出错 java.lang.ArrayIndexOutOfBoundsException: 1 at com.answerSheetServlet.AddAnswerSheetServlet.doPost(AddAnswerSheetServlet.java:46) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.util.ChinaFilter.doFilter(ChinaFilter.java:16) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703) at java.lang.Thread.run(Thread.java:619) [/code]
少数民族语言转码保存到数据库
![图片说明](https://img-ask.csdn.net/upload/201508/29/1440834418_238970.png) 各位大神,我在JSP页面建立一张表单如图: ![图片说明](https://img-ask.csdn.net/upload/201508/29/1440833951_879180.png) 表格的第三列是要求编辑人员手工填写藏文 填写好之后,提交表单,在servlet中保存到数据库。 但是参数传递到servlet的时候就已经成乱码了,不能通过Base64转码保存到数据库,怎么破?
jsp与servlet如何实现批量修改的功能
jsp表单中的数据是通过c:foreach从数据库读出来的,听说用javascript可以实现,谁能举个例子什么的,新手求教啊…
jsp中提交到Servlet的表单获取的值为什么都为NULL?
``` ------------------addProduct.jsp--------------- <form action="${pageContext.request.contextPath}/servlet/ManagerServlet?operation=addProduct" method="post""> <table width="80%" border="0"> 商品全称:<input type="text" id="Pro_name" name="Pro_name" style="height:30px" > 商品编码:<input type="text" style="height:30px" id="Pro_code" name="Pro_code"> <input type="submit" value="保存"/> </form> ``` --------------------------ManagerServlet------------------- public class ManagerServlet extends HttpServlet { private BusinessService s = new BusinessServiceImpl(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String operation = request.getParameter("operation"); if("addProduct".equals(operation)){ addProduct(request, response); } } //添加产品到数据库中 private void addProduct(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Product p = WebUtil.fillBean(request, Product.class); s.addProduct(p); System.out.println(p.getPro_name()+p.getPro_id()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` ```
web中servlet有关,关于servlet只修改页面一部分的显示
最近刚学servlet,在eclipse里做的。servlet的doPost(),doGet()方法也学了,表单,数据库也做了。 有个问题,servlet每次用doPost(),doGet(),处理时,去往浏览器里println(),都是重新开一个新的页面,感觉很麻烦。那种点击一个按钮仅仅修改原本页面的一小块部分怎么做到。或者用其他的技术能实现吗,比如JSP,啥的。 还想问问servlet去println图片好麻烦,有啥好方法,或者换种技术
JSP 中的servlet在本地能运行,在服务器端不能运行
做一个用户名密码的登陆表单,使用servlet对输入的用户名密码与数据库里用户名密码进行比较,如果正确,就转至登陆页面,不正确就提示错误。在本地运行一切正常,但是放在服务器上,输入完用户名密码、点击确定后,就一直是网页正在连接的状态,死活不能运行出来。求大神看看到底是哪里有问题.(对不起实在没有C币了……)
Servlet不能读取表单数据
如下代码: ``` public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String testdbName = request.getParameter("testdbName"); String introduce = request.getParameter("introduce"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println(testdbName); out.println(introduce); out.println(" </BODY>"); out.println("</HTML>"); ``` 本意是要读取jsp页面表单内的数据并写进数据库,但是发现Servlet没有把数据读出来,为此专门写了后面的out.println打印,页面完全空白。 各位大侠帮忙看下到底是哪儿出问题了?谢谢!
数据库连接时总是空指针异常?测试表单信息无误,就是查询数据库时出错
java.lang.NullPointerException at com.Users.LoginServlet.doPost(LoginServlet.java:58) at javax.servlet.http.HttpServlet.service(HttpServlet.java:154) at javax.servlet.http.HttpServlet.service(HttpServlet.java:92) at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274) at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514) at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:527) at com.caucho.util.ThreadPool.run(ThreadPool.java:449) at java.lang.Thread.run(Unknown Source) 源代码: package com.Users; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.Service.LoginService; /** * 登录控制层 : LoginServlet * 将用户个人信息保存到 Session范围内 * 根据status对页面进行分别显示 * @author daichen * */ public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /* * 注入 LoginService 服务 */ private LoginService loginService; @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { doGet(req,res); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("GBK"); response.setCharacterEncoding("GBK"); User user = null; // 获取表单提交的登录信息 String userId = null; String password = null; userId = request.getParameter("userId"); password = request.getParameter("password"); // 先判断用户信息是否否为空 if(userId == null || "".equals(userId) || password == null || "".equals(password)) { // 用户信息有误 , 回到 login.jsp 页面 response.getWriter().println("<html><h3><font color='#f00'>对不起,你输入的信息有误 .请重新确认!</h3></font></html>"); return; } else { // 到数据表 user 中查找该用户 , 返回一个 User 对象 System.out.println(userId+" "+password); user = loginService.userLogin(userId,password); // 并对查询到的结果进行处理 if(user != null) { // 获取请求域的session对象 HttpSession session = request.getSession(); // 对三种权限分开添加到 Session 域中 if(user.getStatus() == 0){ session.setAttribute("geneUser", user); } if(user.getStatus() == 1){ session.setAttribute("admin", user); } if(user.getStatus() == 2){ session.setAttribute("superAdmin", user); } // 成功获取到用户信息 , 转到 index.jsp RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/jsp/index.jsp"); rd.forward(request, response); return; } else { // 查询没有该用户 , 转到 login.jsp response.getWriter().print("<h3><font color='#f00'>对不起,你还未注册用户 </h3></font>" + userId + "<h3><font color='#f00'>请先前去注册!</h3></font>"); RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/jsp/register.jsp"); rd.forward(request, response); return; } } } }
基于springmvc+mybatis的登录表单提交后404
前端填写正确的用户名和密码后,提交登录,浏览器显示404,前端提交的地址是/userlogin,后端对接的/user/userlogin也是对的,浏览器f12里显示请求的确成功传给了后端,但是不知道为什么404。用的是tomcat8.5,java版本1.8,phpstudy最新版,mysql5.7.26。 ## 这是所用到的包: ![图片说明](https://img-ask.csdn.net/upload/202002/01/1580567617_880785.jpg) ## 这是目录结构: ![图片说明](https://img-ask.csdn.net/upload/202002/01/1580567511_223692.jpg) ## 这是web.xml: ```xml <?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>springmvc_test</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置spring监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 加载spring配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/context-config.xml</param-value> </context-param> <!-- 配置前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- DispatcherServlet在初始化方法里面会读取该初始化参数的值来获得 spring配置文件的位置 ,然后启动spring容器。 --> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 配置字符编码 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> ``` ## 这是context-config.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 扫描service包下的注解 --> <context:component-scan base-package="com.test.service"></context:component-scan> <!-- 配置数据库 --> <!-- 加载配置文件 --> <!-- <context:property-placeholder location="classpath:jdbc.properties"/> --> <bean id="dateSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driver" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/Eday_Test"></property> <property name="username" value="root"></property> <property name="password" value="123456"></property> </bean> <!-- 配置Sqlsessionfactory并将数据源注入 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 引入数据源 --> <property name="dateSource" ref="dateSource"></property> <!-- 载入mybatis配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <!-- 载入配置mapper映射的xml --> <property name="mapperLocations" value="classpath:com/test/mapper/*.xml"></property> </bean> <!-- 配置扫描mapper接口 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackge" value="com.test.mapper"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dateSource" ref="dateSource"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> </beans> ``` ## 这是mybatis-config.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <!-- 配置别名 --> <typeAlias alias="User" type="com.test.pojo.User"/> </typeAliases> </configuration> ``` ## 这是springmvc-config.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 扫描controller包下的注解 --> <context:component-scan base-package="com.test.controller"></context:component-scan> <!-- 开启注解 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 静态资源访问 --> <mvc:default-servlet-handler/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置试图解析的默认路径,即配置页面的根路径 --> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans> ``` ## 这是UserController.java: ```java package com.test.controller; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.test.pojo.User; import com.test.service.UserService; //声明控制器 @Controller //设置bean的scope属性为多例(prototype) @Scope("prototype") //设置请求映射,当客户端请求/user时,转到该控制器处理 @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping(value="/userlogin") public ModelAndView login(String user_Name,String user_pwd,ModelAndView mv,HttpSession session){ //调用userService中的login方法处理user实体类对象 User user = userService.login(user_Name,user_pwd); //登录的逻辑判断,判断条件是返回结果不为空 if(user!=null){ //登陆成功,将user对象设置到HttpSession作用范围域中,相当于服务端的cookie,有效时间默认30分钟 //在程序运行期间,在任意页面都可以提取它的值。 session.setAttribute("user",user); //转发到main请求 //登录成功,跳转页面 mv.setViewName("login/login-success"); }else{ //登录失败,向前端传递失败信息 mv.addObject("message","用户名或密码错误,请重新输入!"); //登录失败,跳转到登录页面 mv.setViewName("login"); } return mv; } //跳转到用户注册界面 @RequestMapping(value="/userregister"/*,method=RequestMethod.POST*/) public String register(User user){ String user_Name = user.getUser_Name(); //如果数据库中没有该用户,可以注册,否则跳转页面 if(userService.findByUserName(user_Name)==null){ //添加用户 userService.register(user); //注册成功,跳转到主页面 return "index"; }else{ //注册失败,跳转到错误页面 return "error"; } } } ``` ## 这是UserMapper.java: ```java package com.test.mapper; import org.apache.ibatis.annotations.Param; import com.test.pojo.User; public interface UserMapper { //根据用户名和密码查找,mybatis中有多个参数时,需要使用@Param注解 User findByUserNameAndPassword(@Param("user_Name")String user_Name,@Param("user_Pwd")String user_Pwd); //增加用户 void addUser(User user); //根据用户名查询 User findByUserName(String user_Name); } ``` ## 这是UserMapper.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.tes.mapper.UserMapper"> <!-- 根据用户名和密码查询 --> <select id="findByUserNameAndPasssword" resultType="User"> select * from user where user_Name=#{user_Name} and user_Pwd=#{user_Pwd} </select> <!-- 增加用户 --> <insert id="addUser" parameterType="User"> insert into user (user_Name,user_Pwd,user_Email,user_NickName,user_Birth,user_Phone,user_InvitationCode) values(#{user_Name},#{user_Pwd},#{user_Email},#{user_NickName},#{user_Birth},#{user_Phone},#{user_InvitationCode}) </insert> <!-- 根据用户名查询 --> <select id="findByUserName" resultType="User"> select * from user where user_Name=#{user_Name} </select> </mapper> ``` ## 这是User.java: ```java package com.test.pojo; import java.sql.Timestamp; public class User { private int user_Id; private String user_Name; private int user_Pwd; private String user_Email; private String user_NickName; private Timestamp user_Time; private String user_Birth; private int user_Fans; private int user_Follow; private int user_Score; private String user_HeadImgAddr; private int user_Phone; private String user_InvitationCode; public int getUser_Id() { return user_Id; } public void setUser_Id(int user_Id) { this.user_Id = user_Id; } public String getUser_Name() { return user_Name; } public void setUser_Name(String user_Name) { this.user_Name = user_Name; } public int getUser_Pwd() { return user_Pwd; } public void setUser_Pwd(int user_Pwd) { this.user_Pwd = user_Pwd; } public String getUser_Email() { return user_Email; } public void setUser_Email(String user_Email) { this.user_Email = user_Email; } public String getUser_NickName() { return user_NickName; } public void setUser_NickName(String user_NickName) { this.user_NickName = user_NickName; } public Timestamp getUser_Time() { return user_Time; } public void setUser_Time(Timestamp user_Time) { this.user_Time = user_Time; } public String getUser_Birth() { return user_Birth; } public void setUser_Birth(String user_Birth) { this.user_Birth = user_Birth; } public int getUser_Fans() { return user_Fans; } public void setUser_Fans(int user_Fans) { this.user_Fans = user_Fans; } public int getUser_Follow() { return user_Follow; } public void setUser_Follow(int user_Follow) { this.user_Follow = user_Follow; } public int getUser_Score() { return user_Score; } public void setUser_Score(int user_Score) { this.user_Score = user_Score; } public String getUser_HeadImgAddr() { return user_HeadImgAddr; } public void setUser_HeadImgAddr(String user_HeadImgAddr) { this.user_HeadImgAddr = user_HeadImgAddr; } public int getUser_Phone() { return user_Phone; } public void setUser_Phone(int user_Phone) { this.user_Phone = user_Phone; } public String getUser_InvitationCode() { return user_InvitationCode; } public void setUser_InvitationCode(String user_InvitationCode) { this.user_InvitationCode = user_InvitationCode; } @Override public String toString() { return "User [user_Id=" + user_Id + ", user_Name=" + user_Name + ", user_Pwd=" + user_Pwd + ", user_Email=" + user_Email + ", user_NickName=" + user_NickName + ", user_Time=" + user_Time + ", user_Birth=" + user_Birth + ", user_Fans=" + user_Fans + ", user_Follow=" + user_Follow + ", user_Score=" + user_Score + ", user_HeadImgAddr=" + user_HeadImgAddr + ", user_Phone=" + user_Phone + ", user_InvitationCode=" + user_InvitationCode + "]"; } } ``` ## 这是UserService.java: ```java package com.test.service; import com.test.pojo.User; public interface UserService { //通过用户名及密码核查用户登录 User login(String user_Name,String user_Pwd); //增加用户 void register(User user); //根据用户名查询 User findByUserName(String user); } ``` ## 这是UserServiceImpl.java: ```java package com.test.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.test.mapper.UserMapper; import com.test.pojo.User; import com.test.service.UserService; @Service @Transactional public class UserServiceImpl implements UserService { //注入UserMapper接口 @Autowired private UserMapper userMapper; //登录,根据用户名和密码进行查询 @Override public User login(String user_Name,String user_Pwd){ return userMapper.findByUserNameAndPassword(user_Name,user_Pwd); } //注册,增加用户 @Override public void register(User user){ userMapper.addUser(user); } //根据用户名查询 @Override public User findByUserName(String user_Name){ return userMapper.findByUserName(user_Name); } } ``` ##这是login.jsp ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="../css/login.css" /> <title>登录</title> </head> <body> <!--导航栏--> <nav class="nav"> <ul> <li class="logo"><a href="#">Eday</a></li> <li class="shouye"><a href="../index.jsp" class="neirong">首页</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">文章列表</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">留言板</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">更新日志</a></li> </ul> </nav> <!--登录板块--> <header class="header"> <p class="logintitle"> <b>登录</b> </p> <form action="${pageContext.request.contextPath }/user/userlogin" method="post" class=login-form> <p class= login-username-p> <label for="username" class="login-username-text">用户名:</label> <input type=text name="user_Name" class="login-username-input"> <br><a href="register.jsp" class=login-register>注册</a> </p> <p class="login-psw-p"> <label for="psw" class="login-psw-text">密码:</label> <input type=password name="user_Pwd" class="login-psw-input"> <br><a href="#" class=login-forget>忘记密码</a> </p> <div class=login-button-div> <label for=button></label> <button type=sublim class=login-button>登录</button> </div> </form> </header> </body> </html> ``` ## 这是login-success.jsp: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录成功,请等待跳转...</title> <script type="text/javascript"> onload=function(){ setInterval(go, 1000); }; var x=3; //利用了全局变量来执行 function go(){ x--; if(x>0){ document.getElementById("sp").innerHTML=x; //每次设置的x的值都不一样了。 }else{ location.href='../index.jsp'; } } </script> </head> <body> <!--导航栏--> <nav class="nav"> <ul> <li class="logo"><a href="#">Eday</a></li> <li class="shouye"><a href="../index.jsp" class="neirong">首页</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">文章列表</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">留言板</a></li> <li class="fgx">|</li> <li><a href="#" class="neirong">更新日志</a></li> </ul> </nav> <header> <div> <p>登录成功!页面将在3秒后自动跳转,请稍等...</p> </div> </header> </body> </html> ``` ## 这是数据库: ![图片说明](https://img-ask.csdn.net/upload/202002/01/1580568589_694404.jpg)
我是新手,想在jsp页面显示数据库表单 ,求帮助。。
这是action package action; import java.util.List; import com.opensymphony.xwork2.ActionSupport; import DAO.CustomerInfo; import ADO.Customer; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; public class customerList extends ActionSupport{ private static final long serialVersionUID = 1L; /** * */ private static List<Customer> customer1; private CustomerInfo customerinfo; public CustomerInfo getCustomerinfo() { return customerinfo; } public void setCustomerinfo(CustomerInfo customerinfo) { this.customerinfo = customerinfo; } public List<Customer> getCustomer() { return customer1; } public void setCustomer(List<Customer> customer) { customerList.customer1 = customer; } public String execute() throws Exception{ HttpServletRequest request=ServletActionContext.getRequest(); customer1= CustomerInfo.querycustomer(); request.setAttribute("customer",customer1); return SUCCESS; } public static void main(String[] args) { System.out.println(CustomerInfo.querycustomer()); } } 这是操作方法 public static List<Customer> querycustomer() { List<Customer> list = new ArrayList<Customer>(); Customer customer; Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); Query query = session.createQuery("from Customer"); List<?> list1 = query.list(); // 序列化函数 Iterator<?> it = list1.iterator(); //迭代 while (it.hasNext()) { customer = (Customer)it.next(); //System.out.println(customer.getUsername() + " " + customer.getPassword()+ "" ); } tx.commit(); session.close(); sf.close(); return list; } 这是po package ADO; public class Customer { private String id; private String username; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 这是jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <%@page import="DAO.CustomerInfo"%> <%@page import="java.util.List"%> <%@page import="ADO.Customer"%> <%@page import="java.util.ArrayList"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'welcome.jsp' starting page</title> </head> <body> <s:form action="customer" method="post"> <table width="99%" border="0" align="center" cellpadding="0"cellspacing="1" bgcolor="#CECECE"> <%=request.getAttribute("customer") %> <s:iterator value="#request.customer" status="customer"> <ul> <li height="18" bgcolor="#FFFFFF"> <s:div align="center" class="STYLE1"> <s:property value="customer.id" /> </s:div> </li> <li height="18" bgcolor="#FFFFFF" class="STYLE1"> <s:div align="center" class="STYLE1"> <s:property value="customer.username" /> </s:div> </li> <li height="18" bgcolor="#FFFFFF" class="STYLE1"> <s:div align="center" class="STYLE1"> <s:property value="customer.password" /> </s:div> </li> </ul> </s:iterator> </table> </s:form> </body> </html>
Java WEB 连接数据库的登录界面失败?
连接数据库是成功的,但是输入用户名和密码后跳转到错误页面 有几段代码不太确定对不对,请帮忙看一看 //login.jsp ``` <form name="form1" method="post" action="manager.do?action=login"> ``` //struts-config.xml ``` <action name="managerForm" path="/manager" scope="request" type="com.action.Manager" validate="true"> <forward name="managerLoginok" path="/main.jsp" /> <forward name="error" path="/error.jsp" /> </action> ``` //Manager.java ``` package com.action; import org.apache.struts.action.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.actionForm.ManagerForm; import com.dao.ManagerDAO; import javax.servlet.http.HttpSession; public class Manager extends Action { private ManagerDAO managerDAO = null; public Manager() { this.managerDAO = new ManagerDAO(); } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String action = request.getParameter("action"); if (action == null || "".equals(action)) { return mapping.findForward("error"); } else if ("login".equals(action)) { return managerLogin(mapping, form, request, response); } request.setAttribute("error", "操作失败!"); return mapping.findForward("error"); } // 管理员身份验证 public ActionForward managerLogin(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ManagerForm managerForm = (ManagerForm) form; //将接收到的表单信息强制转换成ActionForm类型 managerForm.setAd_name(managerForm.getAd_name()); managerForm.setAd_pwd(managerForm.getAd_pwd()); int ret = managerDAO.checkManager(managerForm); System.out.print("验证结果ret的值:" + ret); if (ret == 1) { //将登录到系统的管理员名称保存到session HttpSession session = request.getSession(); session.setAttribute("manager", managerForm.getAd_name()); return mapping.findForward("managerLoginok"); } else { request.setAttribute("error", "您输入的管理员名称或密码错误!"); return mapping.findForward("error"); } } } ``` //ConnDB.java ``` //执行查询语句 public ResultSet executeQuery(String sql) { try { conn=getConnection(); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery(sql); } catch(SQLException ex){ System.err.println(ex.getMessage()); } return rs; } ``` //ManagerDAO.java ``` //管理员身份验证 public int checkManager(ManagerForm managerForm) { int flag = 0; ChStr chStr=new ChStr(); String sql = "SELECT * FROM Ad_info where ad_name='" + chStr.filterStr(managerForm.getAd_name()) + "'"; ResultSet rs = conn.executeQuery(sql); try { if (rs.next()) { String pwd = chStr.filterStr(managerForm.getAd_pwd()); //获取输入的密码并过滤输入字符串中的危险字符 if (pwd.equals(rs.getString(3))) { flag = 1; } else { flag = 0; } }else{ flag = 0; } } catch (SQLException ex) { flag = 0; }finally{ conn.close(); } return flag; } ``` 大概应该是这几段代码的原因,但是不清楚应该怎么修改,请帮忙看一下
servlet里面删除怎么写,谁能帮忙补充一下
package com.awu.servlet; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet 获得填写的表单数据 */ public class DeleteServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{ request.setCharacterEncoding("UTF-8"); try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } String url = "jdbc:mysql://localhost:3306/mysql" ;//mysql为数据库的名称 String user = "root"; //数据库的登录名 String password = "123456"; //数据库的登录密码 Connection conn=null; conn=DriverManager.getConnection(url, user, password); String flag=request.getParameter("flag"); String users=request.getParameter("id");//用数组接受前台传来的被选中的复选框的值 System.out.printf(users,flag); String[] Id=users.split(","); int m=0; if (Id.length>0) { for (int i = 0; i < Id.length; i++){ int id1=Integer.parseInt(Id[i]); String sql = "delete from test where id="+id1; //test为要查询的表 System.out.println(id1); m++; //根据前台选中的id值循环删除 //将删除落实到数据库删除 ??? //当删除次数等于选中复选框传过来的个数时,删除成功,否则失败,分别返回两种页面 } } if (m==Id.length) { request.setAttribute("delete_infos", "删除成功"); request.getRequestDispatcher("success.jsp").forward(request, response); }else{ request.setAttribute("delete_infos", "删除失败"); request.getRequestDispatcher("login.jsp").forward(request, response); } } catch (SQLException e) { System.out.println(e.getMessage()); } } }
求解jsp页面表单回车查询问题
我在表单里面写一个回车查询验证我输入的id是否和数据库中id一样 如果一样将通过这个id查到的其他数据返回到jsp页面 求大神解惑 最好有源码 谢谢
jsp+servlet实现分页
我在做jsp+servlet数据分页的时候,无法实现前后翻页, 下面是我的分层结构 jsp [code="java"] <%@page contentType="text/html;charset=gbk" %> <%@page language="java" import="java.util.*" %> <%@ include file="inc/cmnAuthenticate.jsp" %> <%@page language="java" import="ch05.*" %> <% Vector vMails = null; int totalPage=0; int curPage=0; int countPerPage=10; int pageNumber=1; Hashtable myValues = (Hashtable)session.getAttribute(CommonConst.VIEWID_INBOXLIST); if ( myValues != null ) { vMails = (Vector)myValues.get("mails"); if ( vMails == null ) { vMails = new Vector(); } if(myValues.get("totalPage")!=null){ totalPage=((Integer)myValues.get("totalPage")).intValue(); } if(myValues.get("curPage")!=null){ curPage=((Integer)myValues.get("curPage")).intValue(); } } %> <html> <head> <title>收件箱</title> <meta http-equiv="Content-Type" content="text/html; charset=gbk"> <script language="JAVASCRIPT" src="common\cmnScript.js"></script> <script language="JAVASCRIPT" src="inbox.js"></script> <link rel="stylesheet" type="text/css" href="common\cmnStyle.css" TITLE="common"></link> <script language="JAVASCRIPT"> <% if ( session.getAttribute("errMsg") != null ) { %> var sErrMsg = "<%=session.getAttribute("errMsg")%>"; <% } else { %> var sErrMsg = ""; <% } %> </script> </head> <%@ include file="inc/cmnPagePart1.jsp" %> <table border=0 cellpadding=0 cellspacing=0 width=650 align=center> <tr> <td height=15>&nbsp;</td> </tr> <tr> <td height=30>你当前共有 <font color=blue><%=vMails.size()%></font> 封邮件。</td> </tr> <tr> <td> <table border=1 bordercolor="#13A7FD" cellpadding=2 cellspacing=0 width=650 align=center> <tr> <td width=130> <b>发件人</b> </td> <td width=400> <b>主题</b> </td> <td width=120> <b>发信时间</b> </td> </tr> <% if ( vMails.size() > 0 ) { for ( int i=0; i<vMails.size(); i++ ) { if(i<countPerPage){ MailContent mailContent = (MailContent)vMails.get(i); String sFrom = mailContent.getSender(); String sSubject = mailContent.getSubject(); String sSendTime = mailContent.getSendTime(); String sReadFlg = mailContent.getReadFlg(); if ( sReadFlg.equals("0") ) { %> <tr> <td> <b><%=sFrom%></b> </td> <td> <b><a href="javascript:gotoMail('<%=i%>')"><%=sSubject%></a></b> </td> <td> <%=sSendTime%> </td> </tr> <% } else { %> <tr> <td> <%=sFrom%> </td> <td> <a href="javascript:gotoMail('<%=i%>')"><%=sSubject%></a> </td> <td> <%=sSendTime%> </td> </tr> <% } } } } else { %> <tr> <td colspan=3> 没有任何邮件! </td> </tr> <% } %> </table> </td> </tr> <tr> <td height=20>&nbsp;</td> </tr> </table> <form name="form_main" action="servlet/Inbox" method="post" > <input type="hidden" name="mailIndex" value=""> <div align="right"> 共 <font color=blue><%=totalPage%></font> 页,当前是第 <font color=blue><%=(totalPage==0?0:curPage+1)%></font> 页 &nbsp; <% if ( curPage > 0 ) { %> <a href="javascript: gotoPagePosition('0')">首页</a> &nbsp; <a href="javascript: gotoPagePosition('<%=curPage-1%>')">前一页</a> &nbsp; <% } else { %> &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <% } if ( curPage < totalPage-1 ) { %> <a href="javascript: gotoPagePosition('<%=curPage+1%>')">后一页</a> &nbsp; <a href="javascript: gotoPagePosition('<%=totalPage-1%>')">末页</a> &nbsp; <% } else { %> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <% } %> <input type="hidden" name="pageId" value="S0101"> <input type="hidden" name="gotoPageNo" value=""> </div> </form> <%@ include file="inc/cmnPagePart2.jsp" %> [/code] servlet [code="java"]/* * This product includes software developed by the * Apache Software Foundation (http://www.apache.org/). */ package ch05.controller; import java.io.*; import java.util.Hashtable; import javax.servlet.*; import javax.servlet.http.*; import ch05.*; import ch05.module.*; /** * 针对收件箱页面的Servlet * @author Administrator * @version 1.0 */ public class Inbox extends HttpServlet implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { //设置提交表单的中文编码 request.setCharacterEncoding("GBK"); HttpSession mySession = request.getSession(true); //清空错误消息 mySession.setAttribute("errMsg",""); //是否非法进入本页面 if ( mySession.getAttribute("username") == null ) { response.sendRedirect("/ch05/login.jsp"); return; } //是否进入默认页面 if ( !request.getParameterNames().hasMoreElements() ) { //设置session中的页面值域 mySession.setAttribute(CommonConst.VIEWID_INBOXLIST, new Hashtable() ); //取得最新邮件 MInbox mInbox = new MInbox(); boolean bGetResult = mInbox.getNewestMail( mySession ); String sGotoPage = request.getParameter("gotoPageNo"); Hashtable myValues = (Hashtable)mySession.getAttribute(ch05.CommonConst.VIEWID_INBOXLIST); myValues.put( "curPage", new Integer(sGotoPage) ); mySession.setAttribute("curPage","inbox"); response.sendRedirect("/ch05/inbox.jsp"); return; } //得到用户输入信息 String sMailIndex = request.getParameter("mailIndex"); String sMailOption = request.getParameter("mailOption"); //如果用户是提交表单 if ( sMailIndex != null && sMailIndex.length() > 0 ) { //设置session中的详细页面值域 mySession.setAttribute(CommonConst.VIEWID_INBOXDETAIL, new Hashtable() ); //获得对应的邮件信息 MInbox mInbox = new MInbox(); boolean bGetResult = mInbox.getDetailMail( mySession, sMailIndex ); if ( bGetResult ) { response.sendRedirect("/ch05/inboxDetail.jsp"); } else { response.sendRedirect("/ch05/inbox.jsp"); } } //如果用户是从详细页面迁移过来的 else if ( sMailOption != null && sMailOption.length() > 0 ) { String sSender = request.getParameter("sender"); String sSendTime = request.getParameter("sendTime"); String sSubject = request.getParameter("subject"); String sContent = request.getParameter("content"); //删除邮件 if ( sMailOption.equals("delete") ) { MInbox mInbox = new MInbox(); boolean bDeleteResult = mInbox.deleteMail( mySession, sSender, sSendTime ); mInbox.getNewestMail( mySession ); response.sendRedirect("/ch05/inbox.jsp"); return; } //回复邮件 else if ( sMailOption.equals("reply") ) { //设置session中的写邮件页面值域 mySession.setAttribute(CommonConst.VIEWID_SENDBOXDETAIL, new Hashtable() ); MInbox mInbox = new MInbox(); boolean bReplyResult = mInbox.replyMail( mySession, sSender, sSubject, sContent ); mySession.setAttribute("curPage","composite"); response.sendRedirect("/ch05/composite.jsp"); return; } try { MInbox mInbox=new MInbox(); mInbox.gotoPage(request, response); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //如果用户非法进入这个页面 else { response.sendRedirect("/ch05/login.jsp"); } } public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { doGet( request, response ); } }[/code] 数据库处理 [code="java"]/* * This product includes software developed by the * Apache Software Foundation (http://www.apache.org/). */ package ch05.module; import java.sql.*; import java.util.*; import java.text.*; import javax.mail.*; import javax.mail.internet.*; import javax.servlet.http.*; import ch05.*; /** * 针对收件箱页面的后台处理类 * @author Administrator * @version 1.0 */ public class MInbox { public boolean getNewestMail ( HttpSession mySession ) { //设置用户信息用 Hashtable myValues = (Hashtable)mySession.getAttribute(CommonConst.VIEWID_INBOXLIST); String sHost = ""; String sUser = ""; String sPass = ""; //尝试查找用户邮箱设置 try { //载入SQLServer的JDBC驱动类 Class.forName(CommonConst.DB_DRIVER_CLASSNAME); //获得数据库连接 Connection conn = DriverManager.getConnection( CommonConst.DB_CONN_STRING ); Statement stmt = null; ResultSet rs = null; String sUsername = (String)mySession.getAttribute("username"); try { //设置数据库的rollback点 conn.setAutoCommit(false); //检查数据库中是否已经有该用户的邮箱设置 stmt = conn.createStatement(); //执行SQL语句 String sQuery = "select * from mail_setting where username='" + sUsername + "'"; rs = stmt.executeQuery( sQuery ); if (rs.next() ) { sHost = rs.getString(2); sUser = rs.getString(3); sPass = rs.getString(4); } else { mySession.setAttribute("errMsg","请首先进行邮箱设置!"); return false; } //尝试连接Pop3服务器 Properties props = System.getProperties(); Session session = Session.getDefaultInstance(props, null); //获得收件箱 Store store = session.getStore("pop3"); store.connect( sHost, sUser, sPass); //获得Folder,并按照只读打开 Folder folder = store.getFolder( "INBOX" ); folder.open( Folder.READ_WRITE ); //获得所有邮件,并依次获取内容 Message messages[] = folder.getMessages(); //往数据库中登录 for ( int i=0; i<messages.length; i++ ) { //只要不是html格式,大概没有乱码问题。。。 String sFrom = MailContent.getFrom( messages[i].getFrom()[0].toString() ); String sTo = MailContent.getFrom( messages[i].getRecipients( Message.RecipientType.TO )[0].toString() ); String sDate = (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).format(messages[i].getSentDate()); String sSubject = messages[i].getSubject(); String sContent = ""; //如果纯文本邮件内容 if ( messages[i].getContent() instanceof String ) { sContent = (String) messages[i].getContent(); } //如果HTML格式邮件内容 else { sContent = ((MimeMultipart)messages[i].getContent()).getBodyPart(0).getContent().toString(); } //插入数据库 String sUpdateQuery = "insert into inbox values('" + sUsername + "', '" + sFrom + "', '" + sTo + "', '" + sDate + "', '" + sSubject + "', '" + sContent + "', '0') "; stmt.executeUpdate( sUpdateQuery ); } conn.commit(); conn.setAutoCommit(true); //删除服务器上的邮件 for ( int i=0; i<messages.length; i++ ) { messages[i].setFlag( Flags.Flag.DELETED, true ); } folder.close(true); store.close(); //重新获取数据库中的所有邮件,并表示在页面上 Vector vMails = new Vector(); sQuery = "select * from inbox where username='" + sUsername + "' order by send_time desc"; rs = stmt.executeQuery( sQuery ); while ( rs.next() ) { String sFrom = rs.getString(2); String sTo = rs.getString(3); String sDate = rs.getString(4); String sSubject = rs.getString(5); String sContent = rs.getString(6); String sReadFlg = rs.getString(7); MailContent mc = new MailContent(); mc.setSender(sFrom); mc.setReceiver(sTo); mc.setSendTime(sDate); mc.setSubject(sSubject); mc.setContent(sContent); mc.setReadFlg(sReadFlg); vMails.add( mc ); } myValues.put( "mails", vMails ); //计算总页数 int countPerPage=10; int totalMail=vMails.size(); int totalPage=0; if(totalMail%countPerPage==0){ totalPage=totalMail/countPerPage; } else{ totalPage=totalMail/countPerPage+1; } int curPage=0; myValues.put("curPage", new Integer(curPage)); myValues.put("totalPage", new Integer(totalPage)); } catch(Exception e) { e.printStackTrace(); mySession.setAttribute("errMsg","查找邮件时出现错误!"); return false; } finally { try { rs.close(); stmt.close(); }catch(Exception ex) { } } }catch(Exception ex) { ex.printStackTrace(); mySession.setAttribute("errMsg","查找邮件时出现错误!"); return false; } return true; } } }[/code] js [code="java"]window.onload = windowLoad; //--------------------------------- //页面载入时调用 function windowLoad() { cmnWindowLoad(); } //查看具体邮件 function gotoMail( index ) { form_main.mailIndex.value = index; form_main.submit(); } //前后翻页 function gotoPagePosition( gotoCount ) { form_main.pageId.value = "goto"; form_main.gotoPageNo.value = gotoCount; form_main.submit(); }[/code]
js jsp 向servlet跳转过程中的request问题
当在html中使用<form enctype="multipart/form-data">时(使用fileupload上传文件),request.getParameter("name")得到的是null,为了避免这一问题,并且为了检验输入框是否为空,通过js向servlet提交。这样值可以传过去了,但是上传图片中解析request的值却为null 现在想要得到即可以检验输入是否为空,又可以得到传值并将图片保存起来的效果。顺便想请教一下 js跳转的servlet的request和action跳转到servlet的request有什么不同。 P.S:请您不要怀疑什么没有进到servlet等类似问题。如果您有更好的解决方案,非常感谢您的告知,我会在一段日子后研究,但现在我的主要问题是使用html、js、servlet这三种技术解决问题。 非常感谢! 代码如下 html: <%@ page contentType="text/html;charset=GBK" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="en"> <head> <title>新增商家</title> </head> <body> <style> body,td{font-size:12px;} </style> <script language=javascript> //验证填入值不为空 function checkEmpty(){ var name = document.getElementById("merchantName").value; var call = document.getElementById("merchantCall").value; var picture = document.getElementById("picture").value; var address = document.getElementById("merchantAdd").value; var validate = document.getElementById("validatetCall").value; if(name==""||call==""||picture==""||address==""||validate==""){ alert("请您填写所需要的信息"); } else{ // 跳转到AddMerchantServlet中 document.merchantForm.action = "/discountCoupon/AddMerchant?name="+name+"&call="+call+"&picture="+picture+"&address="+address+"&verifyCall="+validate ; document.merchantForm.submit(); } } </script> <form name="merchantForm" enctype="multipart/form-data" method="post" > <fieldset style="width: 600; height: 60;padding:2px;" > <table> <tr> <td> <font color="red">*</font> 商家名称: <input type="text" id="merchantName" width="280px" style="height:18px;width:300px" value="请您限制在10个字以内" /> </td> </tr> <tr> <td> <font color="red">*</font> 商家电话: <input type="text" id="merchantCall" maxlength="11" /> </td> </tr> <tr> <td> <font color="red">*</font> 商家海报: <input type="file" id="picture" /> <input type="reset" /> </td></tr> <tr> <td> <font color="red">*</font> 商家地址: <input type="text" id="merchantAdd" style="height:18px;width:300px" /> </td> </tr> <tr> <td> <font color="red">*</font> 验证手机: <input type="text" id="validatetCall" maxlength="11" />&nbsp &nbsp添加 </td> </tr> <tr> <td> <input type="submit" value="保存" name="save" onclick="checkEmpty();" /> </td> <td>&nbsp &nbsp </td> <td> <input type="button" value="取消" name="cancel" onclick="window.close();" /> </td> </tr> </table> </fieldset> </form> </body> </html> servlet package com.ygsoft.servlet; import java.io.BufferedInputStream; public class AddMerchant extends HttpServlet { private static final long serialVersionUID = 1L; File tmpDir = null; File saveDir = null; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); //从addMerchant.jsp中取得数据 String name = request.getParameter("name"); //对得到的数据进行转码 byte [] bytes1 = name.getBytes("iso-8859-1"); String merchantName = new String(bytes1,"GBK"); String merchantCall = request.getParameter("call"); String merchantPicture = request.getParameter("picture"); //对得到的数据进行转码 byte [] bytes2 = merchantPicture.getBytes("iso-8859-1"); String picture = new String(bytes2,"GBK"); String address = request.getParameter("address"); //对得到的数据进行转码 byte [] bytes3 = address.getBytes("iso-8859-1"); String merchantAdd = new String(bytes3,"GBK"); String validateCall = request.getParameter("verifyCall"); //向数据库中存储数据 BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); MerchantDao dao = (MerchantDao) factory.getBean("merchantDao"); Merchant merchant = new Merchant(); MerchantAssistant merchantAssistant = new MerchantAssistant(); HashSet<MerchantAssistant> set = new HashSet<MerchantAssistant>(); merchantAssistant.setVerifyUserPhoneNum(validateCall); merchantAssistant.setActive(1); set.add(merchantAssistant); merchant.setMerchantName(merchantName); merchant.setMerchantAdd(merchantAdd); merchant.setMerchantPhoneNum(merchantCall); merchant.setMerchantPic(picture); merchantAssistant.setMerchant(merchant); merchant.setMerchantAssistantSet(set); dao.addMerchant(merchant); //跳转到商家管理页面 RequestDispatcher rd = request.getRequestDispatcher("/merchantManage"); rd.forward(request, response); } public AddMerchant() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //对图片进行存储 try { if (ServletFileUpload.isMultipartContent(request)) { // 创建该对象 DiskFileItemFactory dff = new DiskFileItemFactory(); // 指定上传文件的临时目录 dff.setRepository(tmpDir); // 指定在内存中缓存数据大小,单位为byte dff.setSizeThreshold(1024000); // 创建该对象 ServletFileUpload sfu = new ServletFileUpload(dff); // 指定上传文件的最大尺寸 sfu.setFileSizeMax(5000000); // 指定依次上传多个文件的总尺寸 sfu.setSizeMax(10000000); // 解析request请求,并返回FileItemIterator集合 FileItemIterator fii = sfu.getItemIterator(request); // 解析request请求,并返回FileItemIterator while (fii.hasNext()) { // 从集合中获得一个文件流 FileItemStream fis = fii.next(); // 过滤表单中空文件域 if ((!fis.isFormField()) && fis.getName().length() > 0) { // 获得的上传文件的文件名 String fileName = fis.getName().substring( fis.getName().lastIndexOf("//") + 1); if (fis.getName().lastIndexOf("//") == -1) { fileName = fis.getName().substring( fis.getName().lastIndexOf("/") + 1); // 获得文件输入流 BufferedInputStream in = new BufferedInputStream( fis.openStream()); // 获得文件输出流 BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(new File(saveDir, fileName))); // 开始把文件写到你指定的上传文件夹 Streams.copy(in, out, true); } } } } } catch (Exception e) { e.printStackTrace(); } } public void init() throws ServletException { super.init(); String tmpPath = "d://tempdir"; String savePath = "d://savedir"; tmpDir = new File(tmpPath); saveDir = new File(savePath); if (!tmpDir.isDirectory()) tmpDir.mkdir(); if (!saveDir.isDirectory()) saveDir.mkdir(); } }
jsp+servlet开发碰到查询数据"错乱"现象
我和我的同事在做web测试时发现一个诡异的问题 我们都用各自的用户名正常登录后,对数据库进行增删改查的操作,比如: select * from bill where userId='"+userId+"'" 但是奇怪的是有时候查询到的不是自己录入的记录,是别人的; 而别人会查询到我的记录。 我查了下,代码应该不会有错,因为userId登录后肯定不会变,相当于一个常量了。 那为什么还会出现上面的情况呢,请同志们看看啊,谢谢。 我猜是不是没有使用ThreadLocal,大家在用同一条线程操作数据库啊? [b]问题补充:[/b] 对的,的却是后登录者替换了前面的!!! [b]问题补充:[/b] hearken01大虾,可以可以给个例子代码,麻烦您了,谢谢! [b]问题补充:[/b] 这个是我使用的数据库类,看下有什么问题 [code="java"] public class DBConnection { public ThreadLocal threadConnection = new ThreadLocal(); public Connection conn = null; public DBConnection() { } public Connection getMySqlConnection() { try { Class.forName(Constants.driver); conn = DriverManager.getConnection(Constants.url, Constants.name,Constants.password); if (conn == null) throw new SQLException("Can't connect MsSql!"); } catch (ClassNotFoundException e2) { e2.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public Connection getCurrentConnection() throws SQLException { conn = (Connection) threadConnection.get(); if (conn == null) { System.out.println("--------------打开链接---------------------"); conn = getMySqlConnection(); threadConnection.set(conn); } return conn; } public Connection getCurrentConnection(boolean isTransaction) throws SQLException { conn = (Connection) threadConnection.get(); if (conn == null) { conn = getMySqlConnection(); threadConnection.set(conn); } if (isTransaction) conn.setAutoCommit(false); return conn; } public void closeCurrentConnection() { try { Connection conn = (Connection) threadConnection.get(); threadConnection.set(null); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } public void closeConnection(Connection conn) throws SQLException { try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } public void beginTransaction() { try { getCurrentConnection().setAutoCommit(false); } catch (SQLException e) { e.printStackTrace(); } } public void commitTransaction() { try { getCurrentConnection().commit(); } catch (SQLException e) { e.printStackTrace(); } } public void rollbackTransaction() { try { getCurrentConnection().rollback(); } catch (SQLException e) { e.printStackTrace(); } } public int executeUpdate(String sqlQuery, String sqlValue[])throws Exception { int count = 0; try { PreparedStatement ps = conn.prepareStatement(sqlQuery); if (sqlValue != null) { for (int i = 0; i < sqlValue.length; i++) ps.setString(i + 1, sqlValue[i]); } count = ps.executeUpdate(); } catch (Exception e) { throw e; } return count; } //记录数 public int executeQuery(String sql){ ResultSet rs = null; PreparedStatement ps; int count=0; try { ps = conn.prepareStatement(sql); rs = ps.executeQuery(sql); rs.next(); count=rs.getInt(1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return count; } public ArrayList executeQueryList(String sql) { Statement st = null; ArrayList alResult = new ArrayList(); try { st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int count = rsmd.getColumnCount(); String colum[] = new String[count]; for (int i = 0; i < colum.length; i++) if (rsmd.getColumnName(i + 1) != null) colum[i] = rsmd.getColumnName(i + 1); else colum[i] = rsmd.getColumnLabel(i + 1); HashMap hdRow = null; String fieldValue = null; for (; rs.next(); alResult.add(hdRow)) { hdRow = new HashMap(); for (int i = 0; i < colum.length; i++) { int iType = rsmd.getColumnType(i + 1); if (iType == 2 || iType == 3) { if (rsmd.getScale(i + 1) == 0) fieldValue = String.valueOf(rs.getLong(i + 1)); else fieldValue = rs.getString(i + 1); } else if (iType == 8) fieldValue = String.valueOf(rs.getDouble(i + 1)); else if (iType == 6 || iType == 7) fieldValue = String.valueOf(rs.getFloat(i + 1)); else fieldValue = rs.getString(i + 1); if (fieldValue == null) fieldValue = ""; else fieldValue = fieldValue.trim(); hdRow.put(colum[i], fieldValue);//.toLowerCase() } } } catch (Exception e) {} return alResult; } public static void main(String arg[]) throws Exception { DBConnection db = new DBConnection(); db.getCurrentConnection(); } } [/code] [b]问题补充:[/b] 我在servlet里这样用的,有什么不妥? [code="java"] public class LoginServlet extends HttpServlet{ private DBConnection db; public void init() throws ServletException { db = new DBConnection();//打开链接 try { db.getCurrentConnection(); } catch (SQLException e1) { } } public void destroy() { db.closeCurrentConnection(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sql="select * from bill where userId='"+userId+"'" ; List list=db.executeQueryList(sql); ......... } } [/code] [b]问题补充:[/b] To hearken01: 我把ThreadLocal部分去掉,还是不行啊。 [b]问题补充:[/b] To 蔡华江: 这里别省?什么意思,完整些啊,麻烦了。 [b]问题补充:[/b] To Ihavegotyou: 没有static的都。 [b]问题补充:[/b] To 蔡华江: [code="java"] public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String sql="select * from bill where userId='"+userId+"'" ; List list=db.executeQueryList(sql); request.setAttribute("list", list); request.getRequestDispatcher("infoList.jsp").forward(request, response); } [/code] 省略号里就这些啊,也没什么特别的啊 [b]问题补充:[/b] TO hearken01: userId就是登录的时候表单里的数据,这样子: [code="java"] String userId=request.getParameter("userId"); String password=request.getParameter("password"); String sql="select * from user where userId='"+userId+"' and password='"+password+"'"; List list=db.executeQueryList(sql); if(list==null||list.size()==0){//没有记录 ...... }else{ request.getSession().setAttribute(Constants.USER_KEY, userId);//一旦登录成功,创建session ...... } [/code] 就是这么做的,也没什么特别的。 [b]问题补充:[/b] to hearken01: 后台打印出来是变了,可为什么变了呢?这个。。。。 :cry: [b]问题补充:[/b] to hearken01: 恩,不过我也在不同的机器上试过2个帐号,结果都一样查询错乱。 [b]问题补充:[/b] to hearken01: 你当初是怎么解决的呢? “我就把那些公共的方法,改成了要传入request和response,接下来就没这样的问题出现了,我想你的问题应该是请求和响应错乱了。” QQ聊吧,50342016
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
C语言荣获2019年度最佳编程语言
关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang近日,TIOBE官方发布了2020年1月编程语言排行榜单。我在前面给过一篇文章《2019年11月C语言接近Ja...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
应届生/社招面试最爱问的几道Java基础问题
本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb (【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下! 一 为什么 Java 中只有值传递? 首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。按值调用(call by value)表...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
立即提问